首页 > 编程语言 >Python 自动化中三种等待时间的详解

Python 自动化中三种等待时间的详解

时间:2022-11-14 13:55:55浏览次数:52  
标签:Python 元素 driver element 详解 等待时间 等待 find

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

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

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

一、强制等待

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

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

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

优点:使用简单,可以在调试时使用。

案例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()

 

 二、隐式等待

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

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

缺点:

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

优点: 隐性等待对整个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()

三、显式等待

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

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

缺点:

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

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

使用方法:

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

 

标签:Python,元素,driver,element,详解,等待时间,等待,find
From: https://www.cnblogs.com/xiaoxiao-wu/p/16888817.html

相关文章

  • Python量化中用pyecharts画K线示例
    首先需要安装Python软件,以及pyecharts库相关教程链接:龙哥量化:文档目录(股票,期货,通达信、同花顺、文华等软件使用,Python量化交易,策略编写,学习文档,策略案例等等) 1"""......
  • python量化指标计算talib函数功能一览表
    安装talib库:pipinstalltalib 1#取个数据验证一下2set_token('')3data=history(symbol='SHSE.600519',frequency='1d',start_time='2015-01-01',......
  • 90 条简单实用的 Python 编程技巧,建议收藏
    编码原则建议1:理解Pythonic概念—-详见Python中的《Python之禅》建议2:编写Pythonic代码避免不规范代码,比如只用大小写区分变量、使用容易混淆的变量名、害怕......
  • python迭代器和生成器
    1.迭代器1.迭代是访问集合的一种方式,可以记住遍历的位置的对象,int类型和容器类对象不可进行迭代1.int类型不可进行迭代例:num=iter(12345)print(nex......
  • C++ 位运算Bitwise operations详解 ----- 重要的解题技巧
    什么是位运算:利用位运算符号进行二进制位计算的操作即为位运算维基百科:......
  • 关于memset函数的详解
    一般用于数值和结构体的初始化这里仅仅说明对数组的初始化函数原型void*memset(void*s,intch,unsignedn);作用将s所指向的某一块内存中的每个字节的内容全部......
  • 手写弹出框代码详解
    1.代码<!DOCTYPEhtml><htmllang="zh-CN"><head><metahttp-equiv="content-Type"charset="UTF-8"><metahttp-equiv="x-ua-compatible"content="IE=edge"><......
  • 巨蟒python全栈开发django9:一些知识点的汇总
    回顾上周内容:题目:1.人民出版社出版过的所有书籍的名字以及作者的姓名(三种写法,笔记中有两种写法)2.手机以2开头的作者出版过的所有书籍名称以及出版社名称(三种写法,笔记......
  • 巨蟒python全栈开发django3:url&&视图
    1.url正则匹配分组和命名分组2.路由分发3.url别名和反向解析4.httprequest和httpresponse的使用 内容回顾:1.jinja2(flask框架,没有内置模板对象,需要自己用jinja2)......
  • 巨蟒python全栈开发django2:初识django
    今日内容大纲:1.起飞版web框架2.自定制框架的流程3.jinja2模板渲染初识4.MVC&&MTV5.django版本介绍及django安装6.django初识(一些操作) 今日详细内容:1.起飞版web框架2.自......