selenium中三种等待方式:sleep,implicitly_wait,WebDriverWait

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

三种等待方式:sleep

  • 强制等待, sleep,设置等待多长时间,就要等待多长时间。等待完成后,才会继续下一步:
from selenium import webdriver
# 导入sleep
from time import sleep


# 创建谷歌浏览器对象
chrome_driver = webdriver.Chrome()
# 访问百度
chrome_driver.get("http://www.baidu.com")
# 定位登录按钮并进行点击
chrome_driver.find_element_by_xpath('//*[@id="s-top-loginbtn"]').click()
# 设置等待时间,单位是秒
sleep(3)

implicitly_wait,自动化,selenium,sleep,WebDriverWait,implicitly_wait

  • 相比较于sleep的强制等待,selenium中还有种等待,可以称之为智能等待:implicitly_wait。所谓智能等待,就是在我设置的等待时间范围内,只要满足了我的条件,就会立即结束等待,继续往下进行,如果超时,则抛出异常。
    implicitly_wait也称之为隐性等待,不需要导入,直接使用webdriver对象调用。它主要执行两件事情,等待元素找到,执行命令。还以刚才的代码为例子,如果我们创建了webdriver对象之后,直接设置implicitly_wait等待,等待一旦设置,那么这个等会在浏览器对象的整个生命周期起作用:
# 创建谷歌浏览器对象
chrome_driver = webdriver.Chrome()
# 智能等待,在设置时间范围内,只要条件成立,马上结束等待, implicitly_wait
chrome_driver.implicitly_wait(5)
# 访问百度
chrome_driver.get("http://www.baidu.com")
# 定位登录按钮并进行点击,在5s之内,找到元素,会立即点击
chrome_driver.find_element_by_xpath('//*[@id="s-top-loginbtn"]').click()

# 设置一个找不到的元素,会进行等待,等待5s后,依旧找不带,会抛出异常
chrome_driver.find_element_by_xpath('//*[@id="s-top-loginbtn1"]').click()

效果:
implicitly_wait,自动化,selenium,sleep,WebDriverWait,implicitly_wait

  • 最后一种等待,显性等待。相较于隐性等待,这个显性等待要明确等待条件和等待上限。比如隐性等待,只要元素存在,可找到就可以,但显性等待,我要明确条件是我的元素可见。而元素存在,并不一定是元素可见。
    显性等待的场景:操作引起了页面的变化,而接下来要操作变化的元素的时候,就需要使用显性等待。
    显性等待导入:
from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait在创建对象时,需要传入三个参数:

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

driver:浏览器驱动
timeout:等待上限,单位是秒
poll_frequency:检测的轮询间隔,默认值是0.5秒
ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

创建WebDriverWait()对象后,要结合until()或者until_not()和expected_conditions类使用。
比如,等待元素id="TANGRAM__PSP_11__changeSmsCodeItem"加载到dom树中:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 使用显性等待, 等待元素id="TANGRAM__PSP_11__changeSmsCodeItem"加载到dom树中,等待上限是10s,每0.8秒去验证一下条件是否成立.
WebDriverWait(chrome_driver, 10, 0.8).until(EC.presence_of_element_located((By.ID,
                                                                            'TANGRAM__PSP_11__changeSmsCodeItem')))

还是以百度首页登录界面为例子,比如点击登录后,在登录界面点击短信登录进行切换:
implicitly_wait,自动化,selenium,sleep,WebDriverWait,implicitly_wait
当我们不点击登录时,发现在dom树中,根本没有短信登录的元素,所以,我们要想点击这个元素,那就需要等待这个元素加载到dom树中,可以找到才行:
implicitly_wait,自动化,selenium,sleep,WebDriverWait,implicitly_wait

用显性等待,代码:

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 创建谷歌浏览器对象, 会话开始
chrome_driver = webdriver.Chrome()

# 访问百度
chrome_driver.get("http://www.baidu.com")
# 定位登录按钮并进行点击
chrome_driver.find_element_by_xpath('//*[@id="s-top-loginbtn"]').click()

sleep(5)
# 使用显性等待, 等待元素id="TANGRAM__PSP_11__changeSmsCodeItem"加载到dom树中,等待上限是10s,每0.8秒去验证一下条件是否成立.
WebDriverWait(chrome_driver, 10, 0.8).until(EC.presence_of_element_located((By.ID,
                                                                            'TANGRAM__PSP_11__changeSmsCodeItem')))

chrome_driver.find_element_by_id('TANGRAM__PSP_11__changeSmsCodeItem').click()

效果:
implicitly_wait,自动化,selenium,sleep,WebDriverWait,implicitly_wait
下面继续基于这一行代码解释:

WebDriverWait(chrome_driver, 10, 0.8).until(EC.presence_of_element_located((By.ID,
                                                                            'TANGRAM__PSP_11__changeSmsCodeItem')))

By.ID,By是webdriver定义好的一个类,这个类只有8个常量,定义了八种元素定位的方式,一般当我们要传入一个元素定位时,会使用到,比如上面的presence_of_element_located的方法,要传入的参数要求是一个定位:
implicitly_wait,自动化,selenium,sleep,WebDriverWait,implicitly_wait
presence_of_element_located是等待元素加载到dom树中的方法,属于expected_conditions类。expected_conditions还有提供了很多的条件判断方法:文章来源地址https://www.toymoban.com/news/detail-565347.html

方法 说明
title_is 判断当前页面的 title 是否完全等于(==)预期字符串,返回布尔值
title_contains 判断当前页面的 title 是否包含预期字符串,返回布尔值
presence_of_element_located 判断元素是否被加到了 dom 树里(注意,加载到dom树中,并不代表这个元素可见)
visibility_of_element_located 判断元素是否可见
visibility_of 同visibility_of_element_located方法,只是visibility_of_element_located方法参数为locator,这个方法参数是 定位后的元素
presence_of_all_elements_located 判断是否至少有 1 个元素存在于 dom 树中。举例:如果页面上有 n 个元素的 class 都是’wp’,那么只要有 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 判断某个元素中是否可见并且可点击
staleness_of 等某个元素从 dom 树中移除,注意,这个方法也是返回 True或 False
element_to_be_selected 判断某个元素是否被选中了,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be 跟上面的方法作用一样,只是上面的方法传入定位到的 element,而这个方法传入 locator
alert_is_present 判断页面上是否存在 alert

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

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

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

相关文章

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

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

    2024年02月15日
    浏览(36)
  • Selenium 三种等待方式详解 (强制等待、隐式等待、显示等待)

    ①在进行WEB自动化工作时,一般要等待某一页面元素加载完成后,才能对该元素执行操作,否则自动化脚本会抛出找不到元素的错误,这样就要求我们在UI自动化测试的有些场景上加上等待时间。 ②等待方式的设置是保证自动化脚本稳定有效运行的一个非常重要的手段。 ①强

    2024年02月03日
    浏览(42)
  • 五、Selenium 三种等待方式:强制等待、隐式等待、显示等待

    名词解释:强制线程休眠一定时间,适合脚本调试时使用。 常用方法: Thread.sleep(long millis); 优点:适合脚本调试时使用; 缺点:不能准确把握需要等待的时间,如果用例中大量使用,会浪费不必要的等待时间,影响用例的执行效率; 操作未完成,等待结束,导致系统报错

    2023年04月08日
    浏览(38)
  • selenium之三种等待方式

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

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

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

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

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

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

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

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

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

    2024年04月11日
    浏览(61)
  • 软件测试/测试开发/全日制/测试管理丨selenium 经典的三种等待方式

    在Selenium中,等待是一种重要的技术,用于处理页面加载和元素查找的时间差异。以下是Selenium中经典的三种等待方式: 隐式等待: 描述:  隐式等待是在查找所有元素时设置的全局等待时间。一旦设置,它将在整个测试执行期间都起作用。 用法:  设置隐式等待的代码通常

    2024年01月17日
    浏览(67)
  • js中三种URI编码方式比较

    数据传递常需要编码后传递,接收还需反编译,定义url: var url = \\\"https://www.cnblogs.com/?username=\\\'小森森\\\'password=\\\'666666\\\'\\\"; https%3A//www.cnblogs.com/%3Fusername%3D%27%u5C0F%u68EE%u68EE%27%26password%3D%27666666%27 https%3A%2F%2Fwww.cnblogs.com%2F%3Fusername%3D\\\'%E5%B0%8F%E6%A3%AE%E6%A3%AE\\\'%26password%3D\\\'666666\\\' https://www.cnblogs

    2024年02月04日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包