显式等待-Explicit Waits
格式:–等待到某一预期出现
#等待出现所有的元素
WebDriverWait(self.driver, 10).until(expected_conditions.presence_of_all_elements_located(element))
实例:
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
def test_task(self):
element = (By.CSS_SELECTOR, '[data-name="霍格沃兹测试学院"]')
self.driver.find_element(By.LINK_TEXT, "社团").click()
隐式等待
WebDriverWait(self.driver, 10).until(expected_conditions.presence_of_all_elements_located(element))
self.driver.find_element(*element).click()
expected_conditions类提供的预期条件判断的方法
方法 | 说明 |
---|---|
title_is | 判断当前页面的 title 是否完全等于(==)预期字符串,返回布尔值 |
title_contains | 判断当前页面的 title 是否包含预期字符串,返回布尔值 |
presence_of_element_located | 判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见 |
-visibility_of_element_located- | -判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于 0- |
visibility_of | 跟上面的方法做一样的事情,只是上面的方法要传入 locator,这个方法直接传定位到的 element 就好了 |
presence_of_all_elements_located | 判断是否至少有 1 个元素存在于 dom 树中。举个例子,如果页面上有 n 个元素的 class 都是’column-md-3’,那么只要有 1 个元素存在,这个方法就返回 True |
text_to_be_present_in_element | 判断某个元素中的 text 是否 包含 了预期的字符串 |
text_to_be_present_in_element_value | 判断某个元素中的 value 属性是否包含 了预期的字符串 |
frame_to_be_available_and_switch_to_it | 判断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False |
invisibility_of_element_located | 判断某个元素中是否不存在于dom树或不可见 |
element_to_be_clickable | 判断某个元素中是否可见并且是 enable 的,这样的话才叫 clickable |
|staleness_of| 某个元素从 dom 树中移除,注意,这个方法也是返回 True或 False |
|-element_to_be_selected-|-判断某个元素是否被选中了,一般用在下拉列表-|
|element_selection_state_to_be | 判断某个元素的选中状态是否符合预期 |
| lement_located_selection_state_to_be |跟上面的方法作用一样,只是上面的方法传入定位到的 element,而这个方法传入 locator
|alert_is_present|判断页面上是否存在 alert|
自己编写:—使用lambda函数
# 判断定位的条件是否大于1
WebDriverWait(self.driver, 10).until(lambda x: x.find_elements(element) > 1)
隐式等待-Implicit Waits
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(5)
等待-sleep
from time import sleep #导入时间模块
def setup_method(self, method):
self.driver = webdriver.Chrome()
# self.driver.implicitly_wait(5)
sleep(5)#等待5s