首页 > 其他分享 >Selenium的三种等待方式

Selenium的三种等待方式

时间:2024-06-12 12:33:40浏览次数:22  
标签:webdriver Selenium 元素 driver 三种 import 等待时间 等待

目录

Selenium的三种等待方式

1、强制等待

2、隐式等待

3、显性等待


Selenium的三种等待方式

        什么是等待机制?

        等待就是当系统运行时,如果页面渲染的速度跟不上程序执行的速度,这时就需要人为的去

限制计算机的执行速度。例如在WebUI自动化测试的时候,一般要等待页面元素加载完成之后,才

能进行测试操作,否则就会导致找不到元素而报错,这时就需要加入等待时间来让页面元素加载完

成,再进行元素获取操作。

1、强制等待

        Selenium的强制等待是一种在测试过程中使用的技术,用于在执行测试脚本时暂停程序一段

固定的时间。这样做的目的是为了确保在执行下一步操作之前给页面足够的时间加载或响应。

        使用方式:

sleep(秒数) 

        完整代码:

from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
"""
    强制等待:
        使用方法:sleep(秒数)
        程序遇到sleep停止运行,时间一到开始执行

"""
# 0.加载驱动
service = Service('E:\\driver\\chromedriver.exe')
# 1.打开浏览器
driver = webdriver.Chrome(service=service)
# 2.输入网址
driver.get("https://www.baidu.com/")
sleep(1)
# 3.找到元素
# 4.输入关键字
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("淘宝")
# 5.点击搜索
driver.find_element(By.ID, "su").click()
# 识别页面是否跳转成功
sleep(5)
ele = driver.find_element(By.XPATH, '//*[@id="1"]/div/div[1]/h3/a[1]')
assert ele != None
print("测试通过")

        优点:可以人为控制具体等待时间。

        缺点:无法准确把握需要等待的时间。如果设置时间过短,操作还未完成,等待时间已到,

会导致测试用例执行报错,影响测试用例的继续执行;如果设置时间过长,操作执行完毕,等待时

间未到,会浪费不必要的等待时间,影响测试用例的执行效率。

2、隐式等待

        隐式等待是在整个页面加载过程中等待元素出现的一种全局性设置。在设置了隐式等待后,

Selenium会在查找元素时等待一定的时间,直到元素出现为止。如果在规定的时间内找到了元

素,则立即执行下一步操作;如果超时了,则抛出NoSuchElementException异常。这样的等待是

全局性的,适用于整个测试脚本。

        使用方式:

driver.implicitly_wait(秒数)

        完整代码:

from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
"""
    隐示等待:
        使用方法:driver.implicitly_wait(秒数)
        设置一个最长等待时间,如果在规定的时间内,网页加载完成,则进行下一步
        否则一直等到时间截至,然后执行下一步

"""
# 0.加载驱动
service = Service('E:\\driver\\chromedriver.exe')
# 1.打开浏览器
driver = webdriver.Chrome(service=service)
# 2.输入网址
driver.get("https://www.baidu.com/")
sleep(1)
# 3.找到元素
# 4.输入关键字
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("淘宝")
# 5.点击搜索
driver.find_element(By.ID, "su").click()
# 识别页面是否跳转成功
driver.implicitly_wait(5)
ele = driver.find_element(By.XPATH, '//*[@id="1"]/div/div[1]/h3/a[1]')
assert ele != None
print("测试通过")

        优点:

        ①、全局性设置: 隐式等待是针对整个测试脚本的全局性设置,一次设置就可以应用于整个页

面加载过程,不需要在每个元素操作之前都设置等待条件。

        ②、简单易用: 设置隐式等待非常简单,只需在初始化WebDriver实例时指定等待的时间即

可,不需要额外的代码来处理每个元素的等待。

        ③、适用范围广: 隐式等待适用于整个页面的元素查找,可以应对页面加载时间的不确定性,

提高测试的稳定性和可靠性。

        缺点:

        ①、全局性等待: 虽然全局性设置可以方便应用到整个测试脚本,但有时候并不是所有的元素

都需要相同的等待时间。如果页面上某些元素加载速度较快,而设置的等待时间较长,可能会造成

不必要的等待时间浪费。

        ②、不精确: 隐式等待是按照固定的时间等待元素出现,而不考虑元素实际加载的时间。如果

页面元素加载速度快于设置的等待时间,会导致不必要的等待;反之,如果加载速度慢于等待时

间,可能会导致元素还未完全加载就进行操作,造成测试失败或不稳定的情况。

        ③、难以调试: 由于隐式等待是全局性设置,当测试出现问题时,难以准确定位是等待时间设

置不合理还是页面本身的问题,增加了调试的难度。

3、显性等待

        显式等待是在特定条件下等待特定元素出现的一种更精细化的等待方式。用户可以设置等待

的最长时间和等待的条件,例如等待元素可见、可点击等。一旦等待的条件满足或超时,测试脚本

将继续执行下一步操作。相比于隐式等待,显式等待更灵活,并且可以针对特定的元素设置不同的

等待条件和时间。

        代码如下:

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

"""
等待机制都一样,都是停止当前代码的继续运行
显性等待更加灵活
    WebDriverWait类  显性等价类
    driver: webDriver 实例
    timeout: 超时时间
    poll_frequency: 间隔时间,默认是0.5
    ignore_exceptions: 忽略异常(元组)   ----一旦发生了我们定义的异常不中断代码继续等待
      
方法 until
method: 在等待期间内,每隔一段时间调用当前方法,如果不能执行返回False,否则返回正常值
message: 如果超时,TimeoutException,把message传入异常

"""

# 0.加载驱动
service = Service('E:\\driver\\chromedriver.exe')
# 1.打开浏览器
driver = webdriver.Chrome(service=service)
# 2.输入网址
driver.get("https://www.baidu.com/")
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("淘宝")
driver.find_element(By.ID, "su").click()
locator = (By.XPATH, '//*[@id="1"]/div/div[1]/h3/a[1]')
WebDriverWait(driver, 5).until(EC.visibility_of_element_located(locator), "没获取到对应元素")
print("当前页面元素已经被获取到")
driver.quit()

        优点:

        ①、精确等待条件: 显式等待允许设置特定的等待条件,如元素可见、可点击等,使等待更加

精确,只有当条件满足时才会继续执行下一步操作。

        ②、灵活性: 相比隐式等待,显式等待更加灵活,可以针对不同的元素设置不同的等待条件和

时间,以适应不同的测试场景。

        ③、减少不必要的等待时间: 通过设置精确的等待条件,可以减少不必要的等待时间,提高测

试执行效率。

        ④、更容易调试: 显式等待将等待条件明确地暴露出来,当测试出现问题时更容易定位到等待

条件不满足的原因,有助于快速定位和解决问题。

        缺点:

        ①、编写复杂: 相比隐式等待,显式等待需要编写更多的代码来设置等待条件和时间,可能会

增加测试脚本的复杂度和维护成本。

        ②、容易出错: 如果设置的等待条件不够准确或者等待时间设置不合理,可能会导致测试失败

或不稳定,需要花费额外的时间来调试和修复问题。

        ③、局部性等待: 显式等待是针对特定的元素设置等待条件和时间,如果测试场景中有大量元

素需要设置等待条件,可能会增加编码和维护的工作量。

标签:webdriver,Selenium,元素,driver,三种,import,等待时间,等待
From: https://blog.csdn.net/m0_73890953/article/details/139620595

相关文章

  • WPF/C#:程序关闭的三种模式
    ShutdownMode枚举类型介绍ShutdownMode是一个枚举类型,它定义了WPF应用程序的关闭方式。这个枚举类型有三个成员:OnLastWindowClose:当最后一个窗口关闭或者调用System.Windows.Application.Shutdown方法时,应用程序会关闭。OnMainWindowClose:当主窗口关闭或者调用System.Windows.......
  • windows计划任务的“等待空闲时间”已弃用
    想使用windows的计划任务来实现:当计算机空闲时,自动关机,避免资源浪费。方案一:测试了过多个软件,如shutter,WinOFFSetup,虽然功能多,但这些软件只能在用户登录时运行。而windows11一段时间后会自动注销,查了多种设置方法没有解决。方案二:用AI写了检测用户空闲时间的小程序,功能正常,但......
  • Selenium 4 使用
    SeleniumDocumentationTroubleshooting无法启动Chrome:Traceback(mostrecentcalllast):File"/Users/xiao/Library/MobileDocuments/com~apple~CloudDocs/Projects/PycharmProjects/ScoreCollector/计科前5学期成绩查询.py",line32,in<module>driver......
  • 如何查看网络连接人数?为你介绍三种方法
    方法一:通过命令提示符查看1.打开命令提示符(Windows键+R键,输入cmd并回车)。2.在命令提示符窗口中输入“netstat-an”命令,并按回车键执行。3.观察输出的信息,找到本地地址和外部地址对应的TCP和UDP连接数。4.根据连接数可以大致判断当前网络连接的人数。 方法二:通过路由器管理......
  • selenium的主要功能有哪些
    Selenium是一个广泛使用的开源工具,用于自动化web浏览器的操作。它主要用于web应用程序的测试,但也可以用于其他需要浏览器自动化的任务。以下是Selenium的主要功能:###1. 浏览器自动化 Selenium可以自动化各种web浏览器的操作,如Chrome、Firefox、Safari、Edge......
  • 《手把手教你》系列练习篇之15-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细
    1.简介 本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手。因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙伴们或者童鞋们进行了一个登录模块的自动化测试的实例,其他的你可以照......
  • 《手把手教你》系列练习篇之14-python+ selenium自动化测试 -压台篇(详细教程)
    1.简介 本文是练习篇的最后一篇文章,虽然练习篇的文章到此就要和大家说拜拜了,但是我们的学习之路才刚刚开始。不要停下你的脚步,大步朝前走吧!比你优秀的人还在走着,我们有什么理由停下自己的脚步了,生命不止,学习亦是如此。好了,宏哥的毒鸡汤好喝吧,喝够了就开始学习吧。......
  • Redis-6-三种缓存读写策略
    2.1旁路缓存CacheAsidePattern(旁路缓存)适合读请求比较多的场景CacheAsidePattern中服务端需要同时维系db和cache,并且是以db的结果为准。2.1.1写先更新db直接删除缓存2.1.2读先读缓存有,则从缓存返回。没有,从db中读取返回。再将读取的数据写入缓存......
  • 数据并非都是正态分布:三种常见的统计分布及其应用
    你有没有过这样的经历?使用一款减肥app,通过它的图表来监控自己的体重变化,并预测何时能达到理想体重。这款app预测我需要八年时间才能恢复到大学时的体重,这种不切实际的预测是因为应用使用了简单的线性模型来进行体重预测。这个模型将我所有过去的体重数据进行平均处理,然后绘制一条......
  • 【Selenium+java环境配置】(超详细教程常见问题解决)
    Selenium+java环境配置windows电脑环境搭建-chrome浏览器1.下载chrome浏览器2.查看chrome浏览器版本3.下载chrome浏览器驱动4.配置系统环境变量PATH验证环境是否搭建成功1.创建java项目,添加pom文件中添加依赖2.编写代码运行常见问题&解决办法1.访问失败Theversio......