自动化测试系列-Selenium三种等待详解

这篇具有很好参考价值的文章主要介绍了自动化测试系列-Selenium三种等待详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种也是最简单粗暴的一种办法就是强制等待sleep(time),强制让程序等time秒时间,不管程序能不能跟上速度,还是已经提前到了,都必须等time时长。

如下代码案例所示:

from selenium import webdriverfrom time
import sleepdriver = webdriver.Chrome()
driver.get('http://www.1000phone.com')
sleep(5) # 强制等待5秒再执行下一步
print(driver.current_url)driver.quit()

这种叫强制等待,不管你浏览器是否加载完了,程序都得等待5秒,5秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。

二. 隐式等待

第二种是隐式等待,implicitly_wait(time) 隐式等待的意义是:孙悟空和杨戬约定好,无论孙悟空去哪儿,都要等杨戬time秒,如果杨戬在这段时间内来了,则俩人立即出发去打妖怪,如果杨戬在规定时间内没到,则孙悟空自己去,那自然就等着杨戬抛异常吧。

如下代码所示:

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()driver.implicitly_wait(10)# 隐式等待,最长等待10秒driver.get('http://www.1000phone.com')
print(driver.current_url)
driver.quit()

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

注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,仍然得等到页面全部完成才能执行下一步.

我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显式等待WebDriverWait了。需要特别说明的是:隐式等待对整个driver的周期都起作用,所以只要设置一次即可,我曾看到有人把隐式等待当成了sleep在用,走哪儿都来一下.

三. 显式等待

第三种是显式等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。

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

如下代码所示:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者
driver.implicitly_wait(10) driver.get('http://www.1000phone.com')
locator = (By.LINK_TEXT, '学科')
try:
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) print(driver.find_element_by_link_text('学科').get_attribute('href'))
finally:
driver.close()

我们设置了隐式等待和显式等待,在其他操作中,隐式等待起决定性作用,在WebDriverWait...中显式等待起主要作用,但要注意的是:最长的等待时间取决于两者之间的较大者,如上例中为20,如果隐式等待时间 > 显式等待时间,则该句代码的最长等待时间等于隐式等待时间。

显式等待调用方法:

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

这里需要特别注意的是until或until_not中的可执行方法method参数

那么接下来我们看一下selenium提供的条件有哪些:expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件:
selenium.webdriver.support.expected_conditions(模块)

1.验证传入的参数title是否等于或包含于driver.title

title_is
title_contains

自动化测试系列-Selenium三种等待详解

一. 强制等待 sleep


第一种也是最简单粗暴的一种办法就是强制等待sleep(time),强制让程序等time秒时间,不管程序能不能跟上速度,还是已经提前到了,都必须等time时长。

如下代码案例所示:

from selenium import webdriverfrom time
import sleepdriver = webdriver.Chrome()
driver.get('http://www.1000phone.com')
sleep(5) # 强制等待5秒再执行下一步
print(driver.current_url)driver.quit()

这种叫强制等待,不管你浏览器是否加载完了,程序都得等待5秒,5秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。

二. 隐式等待

第二种是隐式等待,implicitly_wait(time) 隐式等待的意义是:孙悟空和杨戬约定好,无论孙悟空去哪儿,都要等杨戬time秒,如果杨戬在这段时间内来了,则俩人立即出发去打妖怪,如果杨戬在规定时间内没到,则孙悟空自己去,那自然就等着杨戬抛异常吧。

如下代码所示:

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()driver.implicitly_wait(10)# 隐式等待,最长等待10秒driver.get('http://www.1000phone.com')
print(driver.current_url)
driver.quit()

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

注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,仍然得等到页面全部完成才能执行下一步.

我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显式等待WebDriverWait了。需要特别说明的是:隐式等待对整个driver的周期都起作用,所以只要设置一次即可,我曾看到有人把隐式等待当成了sleep在用,走哪儿都来一下.

三. 显式等待

第三种是显式等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。

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

如下代码所示:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者
driver.implicitly_wait(10) driver.get('http://www.1000phone.com')
locator = (By.LINK_TEXT, '学科')
try:
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) print(driver.find_element_by_link_text('学科').get_attribute('href'))
finally:
driver.close()

我们设置了隐式等待和显式等待,在其他操作中,隐式等待起决定性作用,在WebDriverWait...中显式等待起主要作用,但要注意的是:最长的等待时间取决于两者之间的较大者,如上例中为20,如果隐式等待时间 > 显式等待时间,则该句代码的最长等待时间等于隐式等待时间。

显式等待调用方法:

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

这里需要特别注意的是until或until_not中的可执行方法method参数

那么接下来我们看一下selenium提供的条件有哪些:expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件:
selenium.webdriver.support.expected_conditions(模块)

1.验证传入的参数title是否等于或包含于driver.title

title_is
title_contains

2.验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, ‘kw’)

presence_of_element_located
presence_of_all_elements_located

3.验证元素是否可见,前两个传入参数是元组类型的locator,第三个传入WebElement 第一个和第三个其实质是一样的

visibility_of_element_located
invisibility_of_element_located
visibility_of

4.判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value

text_to_be_present_in_element
text_to_be_present_in_element_value

condition,与until、until_not组合能够实现很多判断,如果能自己灵活封装,将会大大提高脚本的稳定性。

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

自动化测试系列-Selenium三种等待详解,selenium,chrome,测试工具,软件测试,经验分享,python

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。自动化测试系列-Selenium三种等待详解,selenium,chrome,测试工具,软件测试,经验分享,python

自动化测试系列-Selenium三种等待详解,selenium,chrome,测试工具,软件测试,经验分享,python

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。文章来源地址https://www.toymoban.com/news/detail-846096.html

到了这里,关于自动化测试系列-Selenium三种等待详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • web自动化测试系列-selenium的安装和运行(一)

    web自动化测试系列-selenium的安装和运行(一)

    目录 web自动化系列之如何安装selenium 1.web自动化中的三大亮点技术 2.web自动化能解决什么问题 ? 3.为什么是selenium ? 4.selenium特点 5.selenium安装 6.下载浏览器及驱动 7.测试代码 web自动化 ,一个老生常谈的话题 ,很多人的自动化之路就是从它开始 。它学起来简单 ,但做起来又

    2024年04月25日
    浏览(14)
  • Selenium自动化教程:延时等待的3种方式!

    Selenium自动化教程:延时等待的3种方式!

    我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作。否则页面上的元素不存在,会抛出异常。或者碰到AJAX异步加载,我们需要等待元素加载完成后,才能操作。在进行UI自动化测试时,需要等元素加载完成,才能对元素进行操作,不然

    2024年01月24日
    浏览(13)
  • web自动化测试系列之selenium的安装和运行(一)

    web自动化测试系列之selenium的安装和运行(一)

    web自动化 ,一个老生常谈的话题 ,很多人的自动化之路就是从它开始 。它学起来简单 ,但做起来又比较难以驾驭 ;它的执行效率慢 、但又是最接近于用户的操作场景 ; 接下来本人计划写一个关于web自动化系列 ,打算从零基础开始写 ,直到写完整个进阶部分,进阶部分也

    2024年04月17日
    浏览(15)
  • Python爬虫技术系列-06selenium完成自动化测试V01

    Python爬虫技术系列-06selenium完成自动化测试V01

    使用selenium库完成动点击下一页,点击视频操作等过程, 如果你非要说这是XX,那我也不过多辩解,毕竟 批评不自由,赞美无意义 。 本案例仅是技术演示,所以会隐去相关网址等,读者可以重点查看这里使用的selenium技术点即可。另外本版本为V01版本,所以仅仅是可用,很多

    2024年02月05日
    浏览(12)
  • 测试员进阶必看系列 “ python自动化测试工具selenium使用指南 ”

    测试员进阶必看系列 “ python自动化测试工具selenium使用指南 ”

    概述 python+selenium环境安装 使用selenium启动浏览器 selenium页面加载等待和检测 使用time.sleep()等待 使用implicitly_wait设置最长等待时间 使用WebDriverWait设置等待条件 检测document是否加载完成 selenium元素定位和读取 查找元素 dom元素交互 查找元素失败处理 selenium交互控制 ActionChains动

    2024年02月05日
    浏览(68)
  • web自动化测试系列之selenium的运行原理和常用方法介绍(二)

    web自动化测试系列之selenium的运行原理和常用方法介绍(二)

    在上文中我们编写了一段简单的代码 ,可以驱动浏览器访问百度并搜索 。这里我们再把这段代码再拿来加以说明 。 如果你是初次接触它 ,你可能会想 ,这段代码是怎么驱动浏览器运行的了 ?要知道这个问题的答案 ,就必须搞清楚以下3个问题 。 它(selenium)的运行原

    2024年04月11日
    浏览(21)
  • 《手把手教你》系列技巧篇(六)-java+ selenium自动化测试-阅读selenium源码(详细教程)

    《手把手教你》系列技巧篇(六)-java+ selenium自动化测试-阅读selenium源码(详细教程)

    1.简介 前面几篇基础系列文章,足够你迈进了Selenium门槛,再不济你也至少知道如何写你第一个基于Java的Selenium自动化测试脚本。接下来宏哥介绍Selenium技巧篇,主要是介绍一些常用的Selenium方法或者接口(API),通过这些接口(API)或者方法的具体操作,达到能够熟练使用

    2024年02月03日
    浏览(9)
  • Python+Selenium4三大等待&预期条件_web自动化(4)

    Python+Selenium4三大等待&预期条件_web自动化(4)

    目录 0. 上节回顾 1. 定位失败的原因 2. 强制等待 3. 隐式等待 4. 显式等待 【重点难点】 4.1. 实例化 WebDriverWait 对象 4.2. 指定等待条件 4.3. 等待条件的具体要求 4.3. 1. 等待条件是一个函数 4.3. 2. 返回值是布尔值 4.3. 3. 只有一个参数,参数值是driver 4.3. 4. 出现异常 5. 流畅等待 (

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

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

    2024年02月05日
    浏览(34)
  • 自动化测试-web(弹窗/滚动条/鼠标/等待等操作)

    自动化测试-web(弹窗/滚动条/鼠标/等待等操作)

    为什么要处理弹窗? 如果页面操作过程中,有弹窗出现,不处理,无法继续对页面操作。 弹窗类型: js原生弹窗: 警告框、输入框、提示框,这些必须处理 如何处理: 1)获取弹窗对象 2)点击同意或取消方法 alert 弹窗 :只有信息及确认按钮 confirm弹窗 :在alert弹窗基础上

    2024年04月15日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包