实例分析
脚本的开头我们引入了所有需要的模块,单元测试是python内置的类似Java JUnit
的模块,提供了组织单元测试的框架。 selenium.webdriver
模块提供了WebDriver
的所有实现: Firefox
,Ie
,Chrome
,Remote
,Keys
类提供了键盘的代码(回车,ALT
,F1
等等):
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
测试用例类继承了unittest.TestCase
类,这表明这个类是一个测试用例:
class PythonOrgSearch(unittest.TestCase):
setUp
函数进行了初始化,你将要在这个类里编写的所有测试方法都要先调用这个方法,接着我们创建了一个Firefox WebDriver
实例:
def setUp(self):
self.driver = webdriver.Firefox()
接下来是测试用例的方法,它应该总是以字符'test'
开始. 方法的第一行 本地引用了 setUp
方法中创建的driver
对象:
def test_search_in_python_org(self):
driver = self.driver
driver.get
方法会导向给定的URL的页面,WebDriver
会等待页面完全加载完(就是onload
函数被触发了),才把程序的控制权交给你的测试或者脚本。 但是如果你的页面用了太多的AJAX,那么这个机制就没什么用了,因为它不知道页面到底是什么时候加载完。
driver.get("http://www.python.org")
下一行是个断言,确认页面标题里是否有'Python'
这个单词:
self.assertIn("Python", driver.title)
WebDriver
提供了一系统类似于find_element_by_*
的方法来寻找页面元素,例如,我们利用find_element_by_name
方法,通过元素的name
属性来定位一个文本输入框元素。 更详细的寻找元素的方法可以参阅 第四章-元素定位:
elem = driver.find_element_by_name("q")
接着我们发送了一些字符,类似于用键盘直接输入。特殊的键盘符我们可以导入selenium.webdriver.common.keys
,然后用Keys
类来表示:
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
提交页面之后我们应该确认一下是否有返回,为了确定有东西返回,我们在这里下一个断言:
assert "No results found." not in driver.page_source
最后浏览器窗口被关闭了,你也可以调用quit
方法来代替close
,区别在于quit
会退出整个浏览器,而close
只会关闭一个标签,但是如果浏览器只有一个标签,那么这两个方法完全一样,都会关闭整个浏览器。
driver.close()
最后一行是运行测试套件的一些样板代码:
if __name__ == "__main__":
unittest.main()