webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

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

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

一、强制等待

强制等待是利用python语言自带的time库中的sleep()方法:

from time import sleep
sleep(10)

sleep()顾明思义就是睡觉的意思,就是脚本一旦执行到条语句sleep(10)就睡10s,再执行后面的语句,他是一个强制等待的方式,使得整个脚本暂停。但是这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用,特殊情况下,时间设置最好不超过1秒,一般0.5秒。

二、隐式等待

隐式等待相比强制等待更智能,顾明思义,在脚本中我们一般看不到等待语句,但是它会在每个页面加载的时候自动等待;隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。

driver = webdriver.Chrome()
driver.implicitly_wait(10)

implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完),implicitly_wait(10),超时时间10s,10秒内一旦加载完成,就执行下一条语句;如果10秒内页面都没有加载完,就超时抛出异常。隐式等待在自动化测试中的运用,看代码:

from selenium import webdriver
import unittest
 
class TestBase(unittest.TestCase):
  def setUp(self):
    self.driver=webdriver.Chrome() #驱动浏览器
    self.driver.implicitly_wait(10) #设置隐式等待
    self.driver.maximize_window() #最大化浏览器
  def test(self): 
    print('这是一个测试用例')
  def tearDown(self):
    self.driver.quit()
if __name__=='__main__':
  unittest.main()

但是隐式等待依然存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步。所以,这里webdriver提供了一种更加智能的等待方式:显示等待

三、显示等待

显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。

#引入WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#引入expected_conditions类,并重命名为EC
from selenium.webdriver.support expected_conditions as EC
#引入By类
from selenium.webdriver.common.by import By
# Python小白学习交流群:711312441
#设置等待
wait = WebDriverWait(driver,10,0.5)
wait.until(EC.presence_of_element_located((By.ID,'KW')))

显示等待需要用到两个类:

WebDriverWait和expected_conditions两个类。

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

driver:浏览器驱动

timeout:最长超时时间,默认以秒为单位

poll_frequency:检测的间隔步长,默认为0.5s

ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

WebDriverWait()中的until()和until_not()方法:

  • until

method: 在等待期间,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常

  • until_not

与until相反,until是当某元素出现或什么条件成立则继续执行,
until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

2、expected_conditions类

各种类,达到某种条件,返回True和False

常用条件:

条件 说明
presence_of_element_located 判断某个元素是否被加到了DOM树里,并不代表该元素一定可见
visibility_of_element_located 判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0

关于显示等待,也可以自己写条件:

#设置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))

显示等待是一种智能程度较高的等待方式,可以有效的增强脚本的健壮性,以下条件适用:

当打开一个新页面,执行第一个元素操作的时候
当某一步操作会引发页面的加载,并且加载的内容包含了下一步需要操作的元素。一句话,就是当某个元素有加载过程的时候,就需要加上显示等待。文章来源地址https://www.toymoban.com/news/detail-647314.html

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

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

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

相关文章

  • selenium的三种等待方式

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

    2023年04月13日
    浏览(49)
  • Appium/Selenium+Java的三种等待方式

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

    2024年02月05日
    浏览(62)
  • Web自动化测试进阶:网页中难点之等待机制 —— 强制等待,隐式等待

    为什么要添加等待 避免页面未渲染完成后操作,导致的报错 经常会遇到报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {\\\"method\\\":\\\"xpath\\\",\\\"selector\\\":\\\"//*[text()=\\\'个人中心\\\']\\\"} 页面还在加载时,就在进行查收元素,此时元素还没显示加载出来,而报

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

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

    2024年01月17日
    浏览(67)
  • Selenium 3和JUnit 5中的显示等待与隐式等待

    目录 显示等待(Explicit Wait) 什么是显示等待? 如何实现显示等待? 显示等待条件 隐式等待(Implicit Wait) 什么是隐式等待? 如何实现隐式等待? 显示等待和隐式等待的区别 强制等待 在Selenium自动化测试中,等待是一个至关重要的概念。网页加载速度、元素的可见性以及

    2024年02月09日
    浏览(38)
  • web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天

    获取到的断言信息就是实际结果 预期结果使我们确定的,直接写在代码中的 而实际结果是无法确定的,所以需要用一些方法去获取 代码示例 场景:当我们加载页面的时候,一些元素是需要时间的 就有可能发生,代码执行到了,而元素没有被加载出来 此时就会出现找不到元

    2024年01月17日
    浏览(45)
  • Java父类强制转换为子类的三种情况(推荐)

    Father f = new Father(); Son s = (Son)f;//出错 ClassCastException Father f = new Son(); Son s = (Son)f;//可以 f只能用父类的方法 s可以用子类的所有方法 Son s = new Son(); Father f = (Father)s;//可以 f只能用父类的方法

    2024年02月08日
    浏览(40)
  • 【selenium】三种等待方式

    time模块中的sleep()方法,程序执行到此代码时强制等待一段时间。 time.sleep(time),传入具体的等待时间time 可以控制等待的具体时间,一般在调试代码时使用 无法准确把握需要等待的时间 如果设置时间过短,操作还未完成,等待时间已到,会导致测试用例执行报错,影响测试

    2024年02月03日
    浏览(41)
  • Selenium:三种等待方式

    目录 一、显示等待 二、隐式等待 三、强制等待 UI自动化测试,大多都是通过定位页面元素来模拟实际的生产场景操作。但在编写自动化测试脚本中,经常出现元素定位不到的情况,究其原因,无非两种情况:1、有frame;2、没有设置等待。 因为代码运行速度和浏览器加载渲

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

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

    2024年02月08日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包