selenium库的使用(七):隐性等待和显性等待
如果浏览器页面没有加载出定位元素,则引发元素不可见异常,添加等待时间能很好的解决这个问题:强制等待(time.sleep)
、selenium提供的 隐性等待
和 显性等待
参考文档
强制等待
1 | import time |
隐性等待
指定一个最长等待时间,期间定位元素如果被加载出来,则返回定位元素,执行下一步操作需等待页面被全部加载完毕或等到时间截至;规定时间内未找到则引发超时异常
1 | import time |
显性等待
指定一个最长等待时间,期间定位元素如果被加载出来,则返回定位元素,立即执行下一步操作,不必等待页面被全部加载;规定时间内未找到则引发超时异常
1 | import time |
WebDriverWait
:显性等待类,它有两个方法:until()
:规定时间内定位元素有
被加载出来时立即执行下一步until_not
:规定时间内定位元素没有
被加载出来时立即执行下一步presence_of_element_located()
是等待条件之一
等待条件
标题
页面标题与期望标题是否一致
如果标题一致则返回True,否则返回false
1 | EC.title_is(title) |
title
:一个期望标题,必须是完全匹配的
页面标题是否包含大小写敏感的子字符串的期望标题
如果包含则返回True,否则返回false
1 | EC.title_contains(title) |
title
:一个期望的标题片段
url
当前url是否包含大小写敏感的子字符串的期望url
如果包含则返回True,否则返回false
1 | EC.url_contains(url) |
url
:一个期望的url片段
当前url与期望url的正则表达式匹配
如果url匹配则返回True,否则返回false
1 | EC.url_matches(pattern) |
pattern
:一个期望的正则表达式模式,必须是完全匹配的
当前url与期望url是否一致
如果url一致则返回True,否则返回false
1 | EC.url_to_be(url) |
url
:一个期望url,必须是完全匹配的
当前url与期望url是否不相同
如果url不相同则返回True,否则返回false
1 | EC.url_changes(url) |
url
:一个期望url,不能是完全匹配的
文本
给定文本是否存在于指定元素中
如果存在则返回True,否则返回False
1 | EC.text_to_be_present_in_element(locator, text_) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
text_
:一个期望文字
给定文本是否存在于元素的定位器中
即元素里面的属性值是否存在
如果存在则返回True,否则返回False
1 | EC.text_to_be_present_in_element_value(locator, text_) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
text_
:一个期望文字
元素
元素是否可见并启用
以便可点击
如果可见并且启用就返回WebElement
1 | EC.element_to_be_clickable(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
元素是否存在于页面的DOM中
即元素是否加载出,这个元素不一定可见
当元素被定位就返回WebElement
1 | EC.presence_of_element_located(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
是否至少有一个元素存在
即是否至少有一个元素加载出来
当加载出的元素被定位,返回它们的列表,以WebElement为项
1 | EC.presence_of_all_elements_located(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
元素是否存在于页面的DOM中并且可见
即一个元素是否加载出并且可见,可见性意味着该元素不仅显示,而且高度和宽度大于0
当元素被定位且可见就返回WebElement
1 | EC.visibility_of_element_located(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
一个在页面DOM中的元素是否可见
即已经加载出的一个元素是否可见,可见性意味着该元素不仅显示,而且高度和宽度大于0
当元素可见就返回(相同的)WebElement
1 | EC.visibility_of(element) |
element
:WebElement对象,如driver.find_element_by_id('d')
或driver.find_element(By.ID,'d')
所有元素是否存在于页面的DOM中并且可见
即所有元素是否加载出并且可见,可见性意味着该元素不仅显示,而且高度和宽度大于0
当所有元素被定位并且可见,返回它们的列表,以WebElement为项
1 | EC.visibility_of_all_elements_located(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
是否至少有一个元素可见
当可见的元素被定位,返回它们的列表,以WebElement为项
1 | EC.visibility_of_any_elements_located(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
元素是否被选中
比如用于单选框或复选框或下拉列表
如果被选中则返回True,否则返回False
1 | EC.element_located_to_be_selected(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
element
:WebElement对象,如driver.find_element_by_id('d')
或driver.find_element(By.ID,'d')
元素的选中状态是否符合预期
如果符合预期则返回True,否则返回False
1 | EC.element_located_selection_state_to_be(locator, is_selected) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
element
:WebElement对象,如driver.find_element_by_id('d')
或driver.find_element(By.ID,'d')
is_selected
:一个布尔值,即True
(被选中) 或False
(没有选中)
元素是否在DOM中不可见或不存在
如果元素不可见或不存在就返回WebElement
1 | EC.invisibility_of_element_located(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')
element
:一个定位符(文本)或WebElement对象,如driver.find_element_by_id('d')
或driver.find_element(By.ID,'d')
元素是否不在DOM上
可判断页面是否刷新
如果元素不在DOM上则返回True,否则返回False
1 | EC.staleness_of(element) |
element
:WebElement对象,如driver.find_element_by_id('d')
或driver.find_element(By.ID,'d')
窗口
期望窗口数为某一数值
如果符合期望则返回True,否则返回False
1 | EC.number_of_windows_to_be(num_windows) |
num_windows
:一个预期的窗口数量
是否新增窗口
如果新增窗口则返回True,否则返回False
1 | EC.new_window_is_opened(current_handles) |
current_handles
:当前的窗口句柄,如driver.window_handles
是否出现弹窗
如果出现弹窗则返回Alert,否则返回False
1 | EC.alert_is_present() |
iframe
给定的iframe是否可以切换
如果该iframe是可用的则返回True并且将给定的驱动切换到指定的iframe,否则返回False
1 | EC.frame_to_be_available_and_switch_to_it(locator) |
locator
:用于查找元素的定位器,如定位元组(By.ID,'d')