How to Write Test Code
首先,我们需要将selenium webdriver的依赖加入我们的测试代码中:
from selenium import webdriver
webdriver组件包含了所有的WebDriver的实现,这样我们就可以使用selenium webdriver为我们提供的浏览器交互等强大的功能了。
driver = web driver.Firefox()
driver.get("http://www.google.com")
创建一个Firefox WebDriver的实例,driver.get方法将打开方法参数中给出的URL所指向的网页。这行代码将会等到指向的目标页面完全加载后才会把控制还给后续的代码。
得到了我们想要打开的页面后,我们就可以对网页进行一些基础的判断:
assert "Google" in driver.title
这个断言会判断网页的html <title>标签中是否包含“Google”这个字符串。这种断言很常见,可以用来判断打开的是否是我们期待的页面。
之后,在目标页面上,我们可以进一步的定位到每一个页面元素,与这些元素进行交互来模仿用户操作,测试元素的行为是否和我们预期的相符:
searchInput = driver.find_element_by_id("lst-ib") searchInput.send_keys("selenium") searchBtn = driver.find_element_by_name("btnK") searchBtn.click() |
WebDriver提供了多种的定位到元素的方法:
click()与send_keys()都是selenium.webdriver.common.action_chains.ActionChains中提供的与元素交互的方法。click()模拟了对一个元素的点击,send_keys()模拟了向一个元素输入一些键盘输入。其他的交互方法可以查看API。
最后,在完成了页面操作之后我们可以使用driver.close()或是driver.quit()来退出。这两者的区别是:close只关闭一个tab,quit则是关闭整个浏览器。
A Simple Demo
上面的代码严格来说并不像我们常常写的测试代码,它只是打开了一个网页并做了一些简单的操作而已。我们可以使用python提供的标准unittest库来把它写得更符合我们的测试代码的风格。使用unittest库后,我们能在terminal中看到测试报告。
import unittest from selenium import webdriver class GooglePageTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() def test_click_all_links_on_page(self): driver = self.driver driver.get("http://www.google.com") length = len(driver.find_elements_by_tag_name("a")) for i in range(0,length): links = driver.find_elements_by_tag_name("a") if links[i].is_displayed(): links[i].click() driver.back() self.assertIn("Google" or "YouTube",driver.title) def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main() |
这段代码首先引入了unittest组件,然后使用我们熟悉的test case的风格写了一个测试用例,测试了Google主页上面的所有<a>标签点击,对每个打开的页面检查title中是否含有期待的关键字。测试结束后将自动关闭浏览器,并且在terminal中可以看到测试报告。