虽然我们通常使用Selenium来写测试脚本,但是Selenium本身不提供测试框架。在这里,我们可以结合Python自动化框架unittest库来进行web测试。当然你也可以使用其他测试框架或工具,如py.test和nose.
下面是结合百度搜索的一个测试函数:
#coding:utf-8 import time import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys class KeySearch(unittest.TestCase): def setUp(self): print("start to test") self.browser = webdriver.Chrome() def test_search_in_Baidu(self): browser = self.browser browser.get('http://www.baidu.com') self.assertIn("百度", browser.title) elem = browser.find_element_by_id("kw") elem.send_keys("test") elem.send_keys(Keys.RETURN) #self.assertIn("结果",browser.page_source) # 有点问题, 待调试 def test_search_in_Google(self): browser = self.browser browser.get('http://www.google.com') self.assertIn("Google", browser.title) elem = browser.find_element_by_id("lst-ib") elem.send_keys("test") elem.send_keys(Keys.RETURN) self.assertIn("results",browser.page_source) def tearDown(self): print("tearDown the test") time.sleep(5) self.browser.close() if __name__ == "__main__": unittest.main()
In the above example, selenium 提供了webdriver的所有实现,Unittest组织整个测试框架。在这个实例中,所有的selenium操作在 [Selenium] 从一个实例开始,访问Baidu并进行关键字搜索 有所介绍,在这里,只介绍unittest的框架。
在这个测试脚本中,类KeySearch继承于unittest.TestCase,从而告知unitest模块,这是个测试类。
class KeySearch(unittest.TestCase):
测试类的调用通过 unittest.main()
unittest.main()
类KeySearch中的函数,除了setUp和tearDown都是一个独立的测试用例。 通常测试用例函数以字符串test开头
def test_search_in_Baidu(self):def test_search_in_Google(self):
每次执行一个测试用例都会调用setUp和Teardown 函数,如这个用例的测试打印结果如下
Start to test
Search in Baidu
TearDown the test
Start to test
.Search in Google
TearDown the test
.
----------------------------------------------------------------------
Ran 2 tests in 26.998sOK
Process finished with exit code 0
Open Issue:
self.assertIn("结果",browser.page_source) # 有点问题, 待调试
会出问题,而google就没这个问题,是因为中文支持的原因吗?待调查,如果有朋友知道,如能告知,万分感谢
self.assertIn("\u7ed3\u679c",browser.page_source)
AssertionError: '\u7ed3\u679c' not found in ……..