- 快速入门
- 简单示例
- 用Selenium写测试用例
- 打开一个页面
- 页面交互
- d出对话框
- 等待页面加载完成
- 显示等待
- 隐式等待
- 页面对象
from selenium import webdriver from selenium.webdriver.common.keys import Keys #创建一个Firefox WebDriver的实例 driver = webdriver.Firefox() #driver.get 方法将打开URL中填写的地址,WebDriver 将等待, 直到页面完全加载完毕(其实是等到”onload” 方法执行完毕),然后返回继续执行你的脚本。 driver.get("http://www.python.org") #下一行是用assert的方式确认标题是否包含“Python”一词, assert "Python" in driver.title #包含 name 属性的input输入框可以通过 find_element_by_name 方法查找到 elem = driver.find_element_by_name("q") #为了安全起见,我们先清除input输入框中的任何预填充的文本(例如:”Search”),从而避免我们的搜索结果受影响 elem.clear() #我们发送了一个关键字,这个方法的作用类似于你用键盘输入关键字 elem.send_keys("pycon") elem.send_keys(Keys.RETURN) assert "No results found." not in driver.page_source #关闭浏览器窗口,你还可以使用quit方法代替close方法, quit将关闭整个浏览器,而_close——只会关闭一个标签页, 如果你只打开了一个标签页,大多数浏览器的默认行为是关闭浏览器 driver.close()用Selenium写测试用例
# unittest 模块是基于JAVA JUnit的Python内置的模块。 该模块提供了一个框架去组织测试用例。 # selenium.webdriver 模块提供了所有WebDriver的实现。 import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys #该测试类继承自 unittest.TestCase. 继承 TestCase 类是告诉 unittest 模块该类是一个测试用例: class PythonOrgSearch(unittest.TestCase): #setUp 方法是初始化的一部分, 该方法会在该测试类中的每一个测试方法被执行前都执行一遍。 # 下面创建了一个Firefox WebDriver的一个实例。 def setUp(self): self.driver = webdriver.Firefox() #这是一个测试用例实际的测试方法. 测试方法始终以 test`开头。 #在该方法中的第一行创建了一个在 `setUp 方法中创建的驱动程序对象的本地引用。 def test_search_in_python_org(self): driver = self.driver driver.get("http://www.python.org") self.assertIn("Python", driver.title) elem = driver.find_element_by_name("q") elem.send_keys("pycon") elem.send_keys(Keys.RETURN) assert "No results found." not in driver.page_source #tearDown 方法会在每一个测试方法执行之后被执行。 该方法可以用来做一些清扫工作,比如关闭浏览器。 def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main()打开一个页面 页面交互
对于一个页面中的HTML元素,首先我们要找到他。WebDriver 提供了大量的方法帮助你去查找元素,例如:已知一个元素定义如下:
你可以通过下面的方法查找他:
element = driver.find_element_by_id("passwd-id") element = driver.find_element_by_name("passwd") element = driver.find_element_by_xpath("//input[@id='passwd-id']")d出对话框
Selenium WebDriver 内置了对处理d出对话框的支持。 在你的某些动作之后可能会触发d出对话框,你可以像下面这样访问对话框:
alert = driver.switch_to_alert()等待页面加载完成
现在的大多数的Web应用程序是使用Ajax技术。当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难, 如果元素不再页面之中,会抛出 ElementNotVisibleException 异常。 使用 waits, 我们可以解决这个问题。waits提供了一些 *** 作之间的时间间隔- 主要是定位元素或针对该元素的任何其他 *** 作。
Selenium Webdriver 提供两种类型的waits - 隐式和显式。 显式等待会让WebDriver等待满足一定的条件以后再进一步的执行。 而隐式等待让Webdriver等待一定的时间后再才是查找某元素。
显示等待显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。 最糟糕的案例是使用time.sleep(),它将条件设置为等待一个确切的时间段。 这里有一些方便的方法让你只等待需要的时间。WebDriverWait结合ExpectedCondition 是实现的一种方式。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("http://somedomain/url_that_delays_loading") try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit()
在抛出TimeoutException异常之前将等待10秒或者在10秒内发现了查找的元素。 WebDriverWait 默认情况下会每500毫秒调用一次ExpectedCondition直到结果成功返回。 ExpectedCondition成功的返回结果是一个布尔类型的true或是不为null的返回值。
隐式等待如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。
from selenium import webdriver driver = webdriver.Firefox() driver.implicitly_wait(10) # seconds driver.get("http://somedomain/url_that_delays_loading") myDynamicElement = driver.find_element_by_id("myDynamicElement")页面对象
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)