Python自动化中三种等待时间方式

 更新时间:2024年02月08日 08:53:37   作者:明月与玄武  
这篇文章主要介绍了Python自动化中三种等待时间方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Python自动化三种等待时间方式

自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都需要有非常高的成功率,才可以达到提升效率的作用。

在自动化测试中,其实就是通过代码,来执行测试的流程,也就意味着机器自己对页面元素来进行操作,如果说因为页面加载速度过慢,导致元素无法被第一时间找到,则报错,停止本次自动化测试,通过添加等待的方法,让代码在运行时,会进行等待页面加载的操作,以便于更好的进行元素查找。通过等待会让自动化测试变得更加稳定。

我们平常用到的有三种等待方式:强制等待、隐式等待、显式等待

1.强制等待

强制等待是最简单的一种等待方式,强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。

使用方法:

time.sleep(X)或者sleep(X)。在python中是基于time模块的sleep方法来实现。

缺点:

  • 不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间)
  • 如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。

优点:

  • 使用简单
  • 可以在调试时使用。

案例1:​​​​

from selenium import webdriver
# 导包
import time  


driver = webdriver.Chrome()
# 访问百度
driver.get('https://www.baidu.com')
# 搜索框输入 明月
driver.find_element_by_id('kw').send_keys('明月')
# 点击百度一下按钮
driver.find_element_by_id('su').click()
# 强制等待
time.sleep(3) 
# 点击结果中的某一个链接
driver.find_element_by_xpath('//a[@aria-label="明月,百度百科"]').click()
driver.quit()

2.隐式等待

隐式等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后再执行下一步操作。

使用方法:

driver.implicitly_wait(X)。在X时间内,页面加载完成,进行下一步操作。

缺点:

  • 使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。
  • 在等待时间内页面没有加载完成,时间一到也会进入下一步操作;这种情况可能出现要定位的元素没有出现,从而报元素无法找到的错误。

优点:

  • 隐性等待对整个driver的周期都起作用
  • 每一次操作都会调用隐式等待,所以只要设置一次即可。

案例2:

from selenium import webdriver driver = webdriver.Chrome()# 隐式等待
 
 
driver.implicitly_wait(10)
# 访问百度
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('明月')# 点击百度一下按钮driver.find_element_by_id('su').click()# 点击结果中的某一个链接driver.find_element_by_xpath('//a[@aria-label="明月"]').click()
driver.quit()

3.显式等待

显性等待是对指定元素进行等待的一种等待方式。

通过设置最大等待时间,检查频率对页面的元素来进行等待,一旦找到元素,则停止等待,进入后续步骤。

它主要的意思就是:程序每隔X秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。

缺点:

  • 使用相对比较复杂;
  • 和强制等待类似,每一行等待只执行一次,如果要进行多个元素的等待,则需要多次写入

优点:

  •  等待判断准确,不会浪费多余的等待时间
  • 在用例中使用,可以提高执行效率。

使用方法:

from selenium.webdriver.support.wait import WebDriverWait
 
 
WebDriverWait(driver, timeout, poll_frequency=0.5,ignored_exceptions=None).until(method, message='')
 
# driver:浏览器驱动
 
# timeout:最大等待时间# poll_frequency:检测的间隔时间,默认0.5
 
# ignored_exceptions:超时后的异常信息,默认抛出NoSuchElementException 
 
# until()方法:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常
 
# method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False,一般使用lambda匿名函数
 
# message:提示信息,出现异常时会将这个信息输出在控制台

案例3:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait


driver=webdriver.Chrome()
# 访问百度
driver.get("https://www.baidu.com")
# 搜索框输入明月
driver.find_element_by_id('kw').send_keys('明月')
# 点击百度一下按钮
driver.find_element_by_id('su').click()
# 链接元素的xpath路径
path = '//a[@aria-label="明月"]'
# 显示等待:等待结果中要点击的某个链接元素出现
WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath(path),message='元素没有显示')
# 点击结果中的某一个链接
driver.find_element_by_xpath(path).click()
driver.quit()

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 每天迁移MySQL历史数据到历史库Python脚本

    每天迁移MySQL历史数据到历史库Python脚本

    这篇文章主要为大家详细介绍了Python实现每天迁移MySQL历史数据到历史库的脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 如何使用uv构建Python包并本地安装步骤详解

    如何使用uv构建Python包并本地安装步骤详解

    uv是一个由Astral开发的超快Python包安装工具和解析器,使用Rust编写,旨在替代pip、pip-tools和virtualenv,提供更快的性能和更好的依赖管理,这篇文章主要介绍了如何使用uv构建Python包并本地安装的相关资料,需要的朋友可以参考下
    2025-06-06
  • Python科学计算之Pandas详解

    Python科学计算之Pandas详解

    Pandas 是 python 的一个数据分析包,属于PyData项目的一部分。下面这篇文章主要介绍了Python中科学计算之Pandas,需要的朋友可以参考借鉴,下面来一起学习学习。
    2017-01-01
  • Python脚本实现一键自动整理办公文件

    Python脚本实现一键自动整理办公文件

    这篇文章主要介绍了Python实现脚本一键自动整理办公文件,文件下载文件夹就变得乱七八糟,整理的时候非常痛苦,巴不得有一个自动化的工具帮我归类文档。下面小编就给大家分享自动化整理文件的小技巧,需要的朋友可以参考一下文章内容
    2022-02-02
  • 迁移现有的python项目到pyproject.toml

    迁移现有的python项目到pyproject.toml

    本文将详细介绍将现有的 Python 项目迁移到 pyproject.toml,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】

    Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】

    这篇文章主要介绍了Python实现购物评论文本情感分析操作,结合实例形式分析了Python使用中文文本挖掘库snownlp操作中文文本进行感情分析的相关实现技巧与注意事项,需要的朋友可以参考下
    2018-08-08
  • 一篇文章带你了解python迭代器和生成器

    一篇文章带你了解python迭代器和生成器

    这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助
    2021-08-08
  • python安装win32com.client的实现示例

    python安装win32com.client的实现示例

    win32com.client是Python操作Windows COM对象的模块,用于与Office交互,本文主要介绍了python安装win32com.client的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06
  • python中常用的数据结构介绍

    python中常用的数据结构介绍

    这篇文章主要介绍了python中常用的数据结构介绍,帮助大家更好的理解和学习python的基础知识,感兴趣的朋友可以了解下
    2021-01-01
  • Python中使用Counter进行字典创建以及key数量统计的方法

    Python中使用Counter进行字典创建以及key数量统计的方法

    今天小编就为大家分享一篇Python中使用Counter进行字典创建以及key数量统计的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论