自动化测试系列-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组合能够实现很多判断,如果能自己灵活封装,将会大大提高脚本的稳定性。

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/453906.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试Pytest实现接口自动化应该如何在用例执行后打印日志到日志目录生成日志文件?

Pytest可以使用内置的logging模块来实现接口自动化测试用例执行后打印日志到日志目录以生成日志文件。以下是实现步骤: 1、在pytest配置文件(conftest.py)中,定义一个日志输出路径,并设置logging模块。 import loggi…

【PLC】现场总线和工业以太网汇总

1、 现场总线 1.1 什么是现场总线 1)非专业描述: 如下图:“人机界面”一般通过以太网连接“控制器(PLC)”,“控制器(PLC)”通过 “现场总线”和现场设备连接。 2)专业描述(维基百科) 现场总线…

「建议收藏」常用adb操作命令详解

1、查看当前运行的所有设备 adb devices 返回当前设备列表 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2、安装软件 adb install 验证是否成功。需要到设备的 data/app路径下查看是否有该包名 这个命令将指定的apk文件安装到设备上 …

案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-先导篇)

专栏系列文章: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 案例分析篇01:软件架构设计考点架构风格及质量属性 案例分析篇11:UML设计考…

Windows系统安装OpenSSH结合VS Code远程ssh连接Ubuntu【内网穿透】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-mEkKUraSFHLKkzIj {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

MySQL 数据库 下载地址 国内阿里云站点

https://mirrors.aliyun.com/mysql/ 以 MySQL 5.7 为例 https://mirrors.aliyun.com/mysql/MySQL-5.7/ 各个版本很齐全,在这里下载要比去 MySQL 官网下载快很多,安逸得很 那我们下期见,拜拜!

什么洗地机值得推荐?旗舰洗地机希亦、追觅、西屋、海尔实际表现如何?

洗地机这个产品相信大家已经不陌生了,它集合吸尘器和电动扫地拖把的功能,轻轻推拉便可以解决地面上的赃物,且不用我们手动清洗滚刷,深得家务人的喜爱,可是,当我们真正要去选购的时候,还是很纠结…

linux统计一个文件有多少行

第一种方法 cat -n anaconda-ks.cfg(文件) 第二种 wc 文件名 wc是 words count之意

Linux系统安全②SNAT与DNAT

一.SNAT 1.定义 利用SNAT技术实现2台私网地址都可以访问公网 2.实验环境准备 (1)三台服务器:PC1客户端、PC2网关、PC3服务端。 (2)硬件要求:PC1和PC3均只需一块网卡、PC2需要2块网卡 (3&a…

[linux][调度] linux 下如何观察线程调度延时 ?

1 什么是调度延时 在实际业务中,大多数情况下,线程都不是一直占着 cpu 在运行的。在读写文件,收发网络数据时,可能会阻塞,阻塞就会进入睡眠,触发调度;在线程等待锁的时候,也可能会触…

ELK 安装部署

文章目录 1.日志收集规划2.Elasticsearch部署2.1.Elasticsearch安装2.2.Elasticsearch-head安装2.3.Elasticsearch设置分片数2.4.elasticsearch健康检查 3.Kibana部署4.Logstash部署5.Filebeat部署 开源中间件 # Elastic Stackhttps://iothub.org.cn/docs/middleware/ https:/…

【Shiro反序列化漏洞】shiro550流程分析

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

续篇:展开聊下 state 与 渲染树中位置的关系

🐾 上篇的结尾处,提到了 > 为了提升性能, React 仅在渲染之间 存在差异 时才会更改 DOM 节点。 本篇,✓ 🇨🇳 展开聊下 state 与 渲染树中位置的关系 📢📢📢 状态与…

Java学习笔记之IDEA的安装与下载以及相关配置

1 IDEA概述 ​IDEA全称IntelliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。 集成环境: ​把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。 2 IDEA…

【视觉三维重建】【论文笔记】Deblurring 3D Gaussian Splatting

去模糊的3D高斯泼溅,看Demo比3D高斯更加精细,对场景物体细节的还原度更高,[官网](https://benhenryl.github.io/Deblurring-3D-Gaussian-Splatting/) 背景技术 Volumetric rendering-based nerual fields&#xff1a…

GZ083 产品艺术设计赛题第五套

全国职业院校技能大赛 产品艺术设计赛项赛题五 赛项名称 产品艺术设计 英语名称 Product Art Design 赛项编号 GZ083 归属产业 数字产业 任务名称 “境•享”家用台式加湿器设计 赛项组别 中职组 高职组 □学生组 □教师组 □师生联队试点赛项 R学生组 □教师组…

【线程】封装 | 安全 | 互斥

线程封装(面向对象) 1.组件式的封装出一个线程类(像C11线程库那样去管理线程) 我们并不想暴露出线程创建,终止,等待,分离,获取线程id等POSIX线程库的接口,我们也想像C1…

机器学习模型—K最近邻(KNN)

机器学习模型—K最近邻(KNN) K最近邻 (KNN) 算法是一种用于解决分类和回归问题的监督机器学习方法。Evelyn Fix 和 Joseph Hodges 于 1951 年开发了该算法,随后 Thomas Cover 对其进行了扩展。本文探讨了 KNN 算法的基本原理、工作原理和实现。 虽然 k近邻算法 (KNN) 可以用…

基于Pytest+Allure+Excel的接口自动化测试框架

1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有用信息。 Allure 是由 Java 语言开发…

接口自动化测试实战之pytest框架+allure讲解

一、前言 本文章主要会讲解Python中pytest框架的讲解,介绍什么是pytest、为何要测试、为何使用以及参考和扩展等等,话不多说,咱们直接进入主题哟。 二、pytest讲解 2.1 什么是pytest? pytest是一款单元测试框架,在…