赞
踩
time模块中的sleep()方法,程序执行到此代码时强制等待一段时间。
time.sleep(time),传入具体的等待时间time
- # 导入time模块
- import time
- from selenium import webdriver
-
- # 创建webdrive的实例对象
- driver = webdriver.Chrome()
-
- # 通过get()方法打开网址
- driver.get("https://www.baidu.com/")
-
- # 等待10s后代码再继续往下执行
- time.sleep(10)
可以控制等待的具体时间,一般在调试代码时使用
无法准确把握需要等待的时间
如果设置时间过短,操作还未完成,等待时间已到,会导致测试用例执行报错,影响测试用例的继续执行。
如果设置时间过长,操作执行完毕,等待时间未到,会浪费不必要的等待时间,影响测试用例的执行效率。
webdriver对象的implicitly_wait()方法,在设置时间内周期性的寻找元素。
webdriver对象.implicitly_wait(time),传入等待的最大时间time
- from selenium import webdriver
-
- # 创建webdrive的实例对象
- driver = webdriver.Chrome()
-
- # 通过get()方法打开网址
- driver.get("https://www.baidu.com/")
-
- # 设置隐式等待最大时间为10s
- driver.implicitly_wait(10)
-
- # 定位元素时,隐式等待全局作用
- driver.find_element("id", "kw")
在设置时间内周期性(默认0.5s)的寻找元素
如果元素还未找到,不会立即抛出异常,只有在超过设置的最大等待时间时才会报错
如果元素提前找到,就继续执行后面的代码,不会浪费过多的等待时间
在整个driver周期中都起作用,设置一次全局有效,所有查找元素的操作都会进行等待
可以随时更改隐式等待的时间,对更改位置之后的查找元素操作起作用
隐式等待只能解决元素查找问题,不能解决元素交互问题。
页面加载完成,定位的元素已经找到,找到了元素就结束等待继续执行之后的代码。但是可能因为js设置等情况,元素非可交互状态,无法通过交互实现想要的结果,从而导致报错。
注:隐式等待只对查找元素起作用。查找元素的操作需要等到页面加载完成,才会执行。因此隐式等待是在页面完全加载,开始查找元素时计时。
selenium中的WebDriverWait类,可以针对某一个元素进行等待设置
使用显示等待时一般 WebDriverWait 和 expected_conditions 两个类结合使用
- from selenium.webdriver.support.wait import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
until/until_not(self, method, message: str = "")
until():条件成立返回True,等待结束,如果超时,抛出TimeoutException异常。
until_not():条件不成立返回True,等待结束,如果超时,抛出TimeoutException异常。
等待条件 method 由 expected_conditions 类提供,一般导入模块为 EC,并将该模块提供的方法传入
- from selenium import webdriver
- # 导入WebDriverWait 和 expected_conditions
- from selenium.webdriver.support.wait import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
-
- # 创建webdrive的实例对象
- driver = webdriver.Chrome()
-
- # 通过get()方法打开网址
- driver.get("https://www.baidu.com/")
-
- # 显示等待元素为可点击状态
- WebDriverWait(driver, 5).until(EC.element_to_be_clickable(("id", "kw")))
-
- # 操作元素
- driver.find_element("id", "kw").click()
方法 | 描述 |
---|---|
title_is(title: string) | 精准匹配页面标题 title |
title_contains(title: string) | 模糊匹配页面标题 title |
注:元素在 DOM 出现不代表该元素一定可见
方法 | 描述 |
---|---|
presence_of_element_located(locator) | locator 指定的元素出现在 DOM 中 |
presence_of_all_elements_located(locator) | locator 指定的所有元素出现在 DOM 中 |
方法 | 描述 |
---|---|
visibility_of_element_located(locator) | locator 指定的元素可见 |
visibility_of(element) | 元素 element 可见 |
visibility_of_any_elements_located(locator) | locator 指定的元素中至少一个可见 |
invisibility_of_element_located(locator) | locator 指定的元素不可见 |
invisibility_of_element(element) | 元素 element 不可见 |
方法 | 描述 |
---|---|
element_to_be_selected(element) | 元素 element 被选中 |
element_located_to_be_selected(locator) | locator 指定的元素被选中 |
element_selection_state_to_be(element, is_selected) | 元素 element 的选中状态符合 is_selected,True 表示被选中,False 表示未选中。 |
element_located_selection_state_to_be(locator, is_selected) | locator 指定元素的选中状态符合 is_selected,True 表示被选中,False 表示未选中。 |
方法 | 描述 |
---|---|
element_to_be_clickable(mark) | 元素可见并可点击,mark 可以是 locator,也可以是 element |
方法 | 描述 |
---|---|
staleness_of(element) | 元素 element 存在,在等待时间内被移除 |
方法 | 描述 |
---|---|
text_to_be_present_in_element(locator, text_) | locator 指定的元素上包含文本 text |
text_to_be_present_in_element_value(locator, text_) | locator 指定的元素的 value 属性值包含文本 text |
text_to_be_present_in_element_attribute(locator, attribute_, text_) | locator 指定的元素的 attribute 指定的属性值中包含文本 text |
方法 | 描述 |
---|---|
frame_to_be_available_and_switch_to_it(locator) | 切换到 locator 指定的 frame |
方法 | 描述 |
---|---|
number_of_windows_to_be(num_windows) | 当前窗口数为 num_windows |
new_window_is_opened(current_handles) | 有新窗口被打开,current_handles 为调用该方法前的窗口句柄列表 |
alert_is_present() | 出现 alert 窗口 |
将等待条件通过逗号或者逻辑操作符连接起来进行判定。逻辑操作包括:与、或、非。
方法 | 描述 |
---|---|
all_of(*expected_conditions) | expected_conditions 列表中条件都符合 |
any_of(*expected_conditions) | expected_conditions 列表中条件符合其一 |
none_of(*expected_conditions) | expected_conditions 列表中条件都不符合 |
可以精确定位元素的状态,每个元素分别设置,不会浪费过多的等待时间,提高测试效率
使用相对比较复杂。每个元素要单独设置,无法全局使用。
注:隐式等待和显示等待可以混合使用,当作用于同一个元素时,等待时间取决于时间更长的等待
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。