【selenium】三种等待方式

这篇具有很好参考价值的文章主要介绍了【selenium】三种等待方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、强制等待  time.sleep()

time模块中的sleep()方法,程序执行到此代码时强制等待一段时间。

1、写法

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)

2、优点

可以控制等待的具体时间,一般在调试代码时使用

3、缺点

无法准确把握需要等待的时间

如果设置时间过短,操作还未完成,等待时间已到,会导致测试用例执行报错,影响测试用例的继续执行。

如果设置时间过长,操作执行完毕,等待时间未到,会浪费不必要的等待时间,影响测试用例的执行效率。

二、隐式等待  implicitly_wait()

webdriver对象的implicitly_wait()方法,在设置时间内周期性的寻找元素。

1、写法

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")

2、优点

在设置时间内周期性(默认0.5s)的寻找元素

如果元素还未找到,不会立即抛出异常,只有在超过设置的最大等待时间时才会报错

如果元素提前找到,就继续执行后面的代码,不会浪费过多的等待时间

在整个driver周期中都起作用,设置一次全局有效,所有查找元素的操作都会进行等待

可以随时更改隐式等待的时间,对更改位置之后的查找元素操作起作用

3、缺点

隐式等待只能解决元素查找问题,不能解决元素交互问题。

页面加载完成,定位的元素已经找到,找到了元素就结束等待继续执行之后的代码。但是可能因为js设置等情况,元素非可交互状态,无法通过交互实现想要的结果,从而导致报错。

注:隐式等待只对查找元素起作用。查找元素的操作需要等到页面加载完成,才会执行。因此隐式等待是在页面完全加载,开始查找元素时计时。

三、显示等待  WebDriverWait

selenium中的WebDriverWait类,可以针对某一个元素进行等待设置

使用显示等待时一般 WebDriverWait 和 expected_conditions 两个类结合使用

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

1、写法

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

  • driver:webdriver实例对象
  • timeout:最长超时时间,以秒为单位
  • poll_frequency:检测的间隔步长,默认为0.5s。(可不填)
  • ignored_exceptions:超时后抛出的异常信息,默认抛出NoSuchElementExeception异常。(可不填)

until/until_not(self, method, message: str = "")

until():条件成立返回True,等待结束,如果超时,抛出TimeoutException异常。

until_not():条件不成立返回True,等待结束,如果超时,抛出TimeoutException异常。

  • method:每次轮询时执行的等待条件。
  • message:轮询超时后打印的信息。(可不填)

等待条件 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()

2、expected_conditions模块

页面标题内容

方法 描述
title_is(title: string) 精准匹配页面标题 title
title_contains(title: string) 模糊匹配页面标题 title

元素是否在DOM中

注:元素在 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

方法 描述
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 列表中条件都不符合

2、优点

可以精确定位元素的状态,每个元素分别设置,不会浪费过多的等待时间,提高测试效率

3、缺点

使用相对比较复杂。每个元素要单独设置,无法全局使用。

注:隐式等待和显示等待可以混合使用,当作用于同一个元素时,等待时间取决于时间更长的等待文章来源地址https://www.toymoban.com/news/detail-771188.html

到了这里,关于【selenium】三种等待方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium的三种等待方式(强制等待,隐式等待,显示等待)

    目录 1.强制等待(无条件等待) 2.隐式等待 3.显示等待 有时候做自动化测试,需要进行等待,因为下一步的操作依赖于上一步的结果,但是程序执行的很快,有时候页面还未加载完成就进行了下一步的操作,很容易就出现错误,例如像【NO SuchElement Exception】有时候就是因为这

    2024年02月15日
    浏览(24)
  • selenium之三种等待方式

    1:强制等待 无条件等待,必须等待设置的时间后,再执行 使用方法:导入time库,time.sleep(sec)      sec表示多少秒,sec设置多少秒页面就会等待多少秒(死等),时间一到,继续执行下面的代码。在调试的时候很有用,但这个方法很容易让线程挂掉,使程序抛异常。 例:使

    2024年02月08日
    浏览(31)
  • selenium的三种等待方式

    设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点:不智能,使用太多的sleep会影响脚本运行速度。 使用方法:time.sleep(delay) 使用举例:打开百度,强制等待5秒 (无条件等待,在一个时间段内等待) 一次设置,全局生效。 不要当作固定等待

    2023年04月13日
    浏览(33)
  • selenium中的三种等待方式以及显示等待和隐式等待区别

    selenium中一般分为三种等待方式:显示等待、隐式等待、sleep强制等待 1、显示等待(有条件) 程序提前指定等待条件和等待时间,在查找元素时,判断规定时间内是否满足条件,满足则继续执行,不满足或超出时间则抛出异常 2、隐式等待(无条件) 程序提前指定等待时间,在查

    2024年02月12日
    浏览(28)
  • Appium/Selenium+Java的三种等待方式

    参考: java-selenium三种等待方式 Selenium+Java(六)Selenium 强制等待、显式等待、隐实等待 强制等待是利用time模块的sleep方法来实现,最简单粗暴的等待方法。 缺点:不能准确把握需要等待的时间(有时候操作未完成,等待就结束了,导致报错;有时候操作已经完成了,但时间

    2024年02月05日
    浏览(45)
  • 爬虫学习(13):selenium自动化测试(二):等待页面加载完成

    在上一篇已经讲过了大部分的知识点和实战,本篇主要内容为知识点回顾和多个元素的定位知识点补充,以及补充页面加载知识点和案例。 在一个页面中有很多不同的策略可以定位一个元素。在你的项目中,你可以选择最合适的方法去查找元素。Selenium提供了下列的方法给你

    2024年02月06日
    浏览(44)
  • python自动化测试selenium核心技术三种等待方式

    UI自动化测试过程中,可能会出现因测试环境不稳定、网络慢等情况,如果不做任何处理的话,会出现无法定位到特定元素而报错,导致自动化测试无法顺利执行。 selenium官网手册:Waits | Selenium slenium自动化测试中,主要涉及三种等待方式:     缺点:即使网络条件较好时

    2024年04月11日
    浏览(39)
  • selenium-webdriver+nodejs等待页面加载完毕后执行后续动作

    最近在用selenium-webdriver+nodejs为自己的项目写一个自动登录、自动跳转页面的自动化工具,减少开发环境中切换不同账号时,频繁操作的目的。(特殊环境,浏览器不允许打开密码记录功能) 网络上大部分是python或者java的项目,作为前端,当然要选择nodejs。 例如:登录后,点

    2024年02月06日
    浏览(32)
  • selenium中三种等待方式:sleep,implicitly_wait,WebDriverWait

    强制等待, sleep,设置等待多长时间,就要等待多长时间。等待完成后,才会继续下一步: 相比较于sleep的强制等待,selenium中还有种等待,可以称之为智能等待:implicitly_wait。所谓智能等待,就是在我设置的等待时间范围内,只要满足了我的条件,就会立即结束等待,继续

    2024年02月16日
    浏览(46)
  • webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行。我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包