Python+Selenium+Unittest 之selenium15--等待时间

news2024/9/21 0:36:45

        在正常的自动化过程中,如果整篇代码中没有加等待时间的话,有时候可能页面跳转或者还没开始点击就执行到下一个流程了,这时候因为页面没有加载完毕,所以有可能会导致找不到对应的元素而报错,因此我们需要在整个代码流程中间合适的位置加上等待时间,使其等待页面加载完毕后,在进行后续代码流程。

       Selenium中有三种等待方式,分别为:强制等待、隐式等待、显示等待。

1、强制等待。

        强制等待顾名思义就是按着设置的等待时间进行等待,设置的多久就是多久,无论元素是有有加载出来,都必须到设置的时间才会进行下面的操作,这种方式相比其他两种在自动化中不是特别灵活。

        强制等待使用的是time模块的sleep(),在sleep()括号中填入数字即可,单位为秒。

from selenium import webdriver        #导入selenium模块的webdriver
from time import sleep       #导入Time模块的sleep
driver = webdriver.Chrome()     #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("http://www.baidu.com")    #打开百度浏览器
sleep(5)   #等待5秒
driver.maximize_window()   #全屏显示

        上面的这段就能明显的看出来,打开浏览器后,等待了5s浏览器才全屏显示的。

2、隐式等待

        隐式等待相比较强制等待比较灵活,隐式等待就是设置一个全局的等待时间即可,定义一次就行,不用在特定的步骤写了,设置完后,就是会在等待时间里,如果页面加载完成(浏览器整个页面元素都加载完毕,一般看浏览器上没有loading的那个小圈圈就行),就可以执行下一步了,不用说是非得等到时间到才执行,如果超过设置的时间还没有加载完成,就不等了去执行下一步。      

        隐式等待用得是implicitly_wait()方法,在括号里填上时间即可。从下面的代码中就可以看出,不到5S时就对浏览器执行了全屏操作。

from selenium import webdriver        #导入selenium模块的webdriver
from time import sleep       #导入Time模块的sleep
driver = webdriver.Chrome()     #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("http://www.baidu.com")    #打开百度浏览器
driver.implicitly_wait(5)   #最多等待5s,如果页面加载完毕开始后续代码执行,设置一次后,后面都会按着这个规则去执行
driver.maximize_window()   #全屏显示

3、显示等待

        显示等待相比较隐式等待更加灵活。显示等待是会加一个判断条件,如果我在规定时间里找到了这个元素,我就开始往下执行了,有时候可能页面里咱们需要的元素已经加载出来了,但是别的元素还在加载中,这时候如果我们用隐式等待的话,他会等都加载出来才执行,但是显示等待发现有我需要的元素了,就停止等待,往下执行代码了。

        显示等待除了要设置等待时间还需要设置一下条件,在使用是需要导入WebDriverWait模块(时间)和expected_conditions模块(条件)。

(1)WebDriverWait()

对于WebDriverWait()方法来说,需要在括号中填入以下内容:

WebDriverWait(driver,timeout,poll_frequency,ignore_exception)

#driver:浏览器驱动
#timeout:设置的最长等待时间
#poll_frequency:检查元素是否存在的时间间隔
#ignore_exception:超时没找到元素后抛出的异常信息

        一般来说只填入driver和timeout即可,其他的为默认值可以不进行填写,如:WebDriverWait(driver,5) ,就是最长等待5S,每500ms检测一次元素是否加载出来了,如果没有加载出来报默认的异常NoSuchElementException。

(2)until()和not_until()

        WebDriverWait()大部分都是配合until()和not_until()使用。下面可以看下具体用法:

until()的用法是直到后面的条件返回内容为Ture,否则就报错错误信息,一般括号里填写为until(method:判断的方法,message=“报错信息”)。用于跟着expected_conditions()方法来判断元素是否加载出来了。

not_until()的用法和until()正好相反,not_until()是直到后面的条件返回的内容为False,否则就报出错误信息,括号里填写的与until()一样。not_until()一般是用于判断某个元素是否消失了。

from selenium import webdriver    #导入selenium的webdriver模块
from selenium.webdriver.support.wait import WebDriverWait  #导入selenium的WebDriverWait模块
from selenium.webdriver.support import expected_conditions as EC   #导入selenium的expected_conditions模块并命名为EC
from selenium.webdriver.common.by import By    #导入导入selenium的by模块并命名为By
driver = webdriver.Chrome()       #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver  
driver.get("https://www.baidu.com")    #打开百度浏览器
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,"kw"))).send_keys("3333")    #设置强制等待10面,每500ms检查一次元素是否存在,检查方式为持续检查,知道发现了ID为kw的元素,然后返回True给until,之后执行输入"3333"的命令

(3)expected_conditions()

对于expected_conditions()方法来说,使用时需要在括号里面填上具体的判断条件即可,详细内容见下面。

expected_conditions常用的判断方法
title_is("预期title")网页的title是否完全等于预期(返回布尔值)
title_contains("预期")网页的title是否包含预期结果(返回布尔值)
url_to_be("url")网页的网址是否完全等于预期结果(返回布尔值)
url_contains("url")网页的网址是否包含预期结果(返回布尔值)
url_matches("正则表达式")网页的网址是否满足于正则表达式匹配的网址(返回布尔值)
presence_of_element_located("元素")判断元素是否存在于页面DOM树中(元素不一定可见)(返回元素对象)
visibility_of_element_located("元素")判断元素是否可见(返回元素对象)(locator定位)
visibility_of("元素")判断元素是否可见(返回元素对象)(element定位)(关于locator定位和element定位方式大家自行百度下吧)
text_to_be_present_in_elemen(元素,"文本")判断文本是否存在于元素中(返回布尔值)
number_of_windows_to_be(数字)判断打开的窗口数是否于实际一致(返回布尔值)
element_to_be_clickable(元素)判断元素是否可点击(返回布尔值)
new_window_is_opened(handle)判断是否打开了一个新的窗口(返回布尔值)
element_to_be_selected(元素)判断元素是否被选中(一般用于下拉框)(返回布尔值)(element定位)
element_located_to_be_selected(元素)判断元素是否被选中(一般用于下拉框)(返回布尔值)(locator定位)
element_selection_state_to_be(元素,布尔值)判断元素的选中状态是否符合预期(返回布尔值)(element定位)
element_located_selection_state_to_be(元素,布尔值)判断元素的选中状态是否符合预期(返回布尔值)(locator定位)
alert_is_present()判断页面是否有alert对话框(如果存在切换到alert,如果不存在返回False)

        这里就不对expected_conditions常用方法一一举例了,记住整体的使用方式,配合我们需要的场景进行使用即可。


如果大家在使用过程中遇到了问题,可以在文章下留言,或者关注公众号:刘阿童木的进化记录,进行留言

                   下图为公众号二维码,内容会同步发出,大家可以关注一起学习!

                                            

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做好测试用例的分析 ? 是做好软件测试的必要步骤。

目录 1.测试用例的分析指标 2.可能原因的论证 3.确定原因的解决方案 测试用例作为测试人员最重要的输出物之一 ,它的作用不仅仅是能保证需求覆盖 ,提高测试覆盖率等 。通过对执行后的测试用例分析 ,你也可以发现更多在编写上,执…

案例四:误Ghost分区恢复

1、案例 小王电脑最近有点问题,于是打算将电脑系统重装系统,原本5个分区,第一个区是操作系统区,后4个用户数据区,在一次GHOST时失误,做完发现硬盘只有一个系统区,两个数据区消失了,…

[力扣 Hot100]Day20 旋转图像

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 出处 思路 旋转时每四个位置为一组进行swap操作,找好对…

phpstudy安装并运行redis

对于一个菜鸟来说,任何一个小步骤都可能研究半天,比如“phpstudy安装并运行redis”这一问题,解决好后第一时间记录下来,方便日后查看,也为遇到同样困难的小伙伴提供个参考! 一、phpstudy安装redis 1.打开…

2024年光学通信和物联网、自动化控制和大数据国际会议(OCITACB2024)

会议简介 2024年国际光通信与物联网、自动控制和大数据会议(OCITACB2024)的主要目标是促进光通信与物联网、自动管理和大数据领域的研发活动。另一个目标是促进研究人员、开发人员、工程师、学生和从业者之间的科学信息交流。会议将每年举行一次&#x…

浅谈棉纺织厂电气防火措施及电气防火限流式保护器的应用

摘要:棉纺织厂属于火灾危险场所,在进行电气设计时要考虑并采取一定的防火措施。本文从接线、熔断器的选用、中性点接地方式的选择和接地等问题,介绍了电气防火的一些措施。并就引发火灾较严重的线路短路故障问题,介绍了电气防火限…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第9章 项目范围管理(三)

博主2023年11月通过了信息系统项目管理的考试,考试过程中发现考试的内容全部是教材中的内容,非常符合我学习的思路,因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家,希望更多的人能够通过考试&a…

周报(20240128)

日期:2024.1.22 - 2024.1.28 本周工作: 1. 阅读论文 本周阅读了以下论文: 《BRAU-Net:用于医学图像分割的U形混合CNN-Transformer网络》 背景 精确的医学图像分割对于临床量化、疾病诊断、治疗计划和许多其他应用至关重要。基…

力扣hot100 划分字母区间 贪心 思维 满注释版

Problem: 763. 划分字母区间 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 代码随想录 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public List<Integer> partitionLabels(String s){// 创建哈希…

ArkTs布局组件(一)

通用属性 名称参数描述widthLengthheightLengthsize{width?:Length,height?:Length}设置宽高尺寸paddingPadding|Length内边距marginMargin|Length外边距constraintSize{minWidth?:Length|minHeight?:Length|maxWidth?:Length|maxHeight?:Length}设置约束尺寸&#xff0…

VMware vCenter告警:vSphere UI运行状况警报

vSphere UI运行状况警报 不会详细显示告警的具体内容&#xff0c;需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具&#xff0c;用于检测vSphere环境中的潜在问题。当警报触发时&#xff0c;通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…

猫头虎博主第10期赠书活动:《写给大家看的Midjourney设计书》

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

瑞萨RL78G12系列单片机使用IAR软件进行仿真设置及与E2接线

目录 一、单片机与仿真器连接 二、IAR软件在线仿真使用手册 一、单片机与仿真器连接 E1引脚接线图 RL78系列单片机的GND接仿真器的pin2、pin12、pin14 RL78系列单片机的VDD接仿真器的pin8 RL78系列单片机的Tool0接仿真器的pin5 RL78系列单片机的Reset接仿真器的pin10、pin…

【JavaLearn】#(29)Maven引入、Maven项目类型、Maven安装与配置、Maven项目的创建和使用、pom配置文件介绍

1. Maven引入 1.1 传统方式中项目jar包资源的问题 项目中的jar包资源&#xff08;如JDBC驱动包&#xff09;需要我们自己从网上下载&#xff0c;然后手动导入到项目中使用 –> 一旦jar包资源过多&#xff0c;容易造成遗漏&#xff0c;且不好管理 如果有两个项目&#xff0…

Android studio protobuf配置

第一步&#xff1a; id com.google.protobuf version 0.9.3 apply false 第二步&#xff1a; apply plugin: com.google.protobuf sourceSets {main {proto {srcDir src/main/protos}} }protobuf {protoc {artifact com.google.protobuf:protoc:3.19.2}generateProtoTasks …

JVM性能分析工具——Arthas及火焰图的使用

Arthas的使用 Arthas常用命令Arthas的安装Linux压测工具Apache Bench安装火焰图的使用火焰图如何分析火焰图的互动 Arthas常用命令 help &#xff1a;查看所有命令dashboard &#xff1a;仪表板&#xff0c;查看线程的CPU信息等heapdump &#xff1a;不同类对象占用内存比重&a…

windows pm2 执行 npm脚本或执行yarn脚本遇到的问题及解决方案

环境&#xff1a; 在windows上启动终端来运行一个项目&#xff1b;通过指令npm run start来启动&#xff0c;但是将终端一关&#xff0c;就无法访问了&#xff0c;所以想到用pm2来管理 1. 全局安装pm2 npm i pm2 -g2. 在项目根目录执行指令(大部分兄弟的错误使用方法) pm2 st…

微服务—Docker

目录 初识Docker Docker与虚拟机的区别 镜像与容器 Docker架构 常见Docker命令 镜像命令 容器命令 数据卷挂载 直接挂载 初识Docker 在项目部署的过程中&#xff0c;如果出现大型项目组件较多&#xff0c;运行环境也较为复杂的情况&#xff0c;部署时会碰到一些问题&…

Linux ---- Shell编程三剑客之AWK

一、awk处理文本工具 1、awk概述 awk 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。AWK是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作。用来处理列。数据可以来自标准输入也可以是管道或文件。…

EBC金融英国CEO:高波动性周期下,如何寻找市场的稳定性?

利率主导的市场&#xff0c;将在2024年延续。目前&#xff0c;固收市场对于降息的定价&#xff0c;正通过利率传导至不同资产中。尽管市场迫切利用通胀去佐证降息&#xff0c;但各国央行仍囿于通胀目标的政策桎梏。政策和市场预期的博弈将继续牵动市场脉搏&#xff0c;引发价格…