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

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

       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.mzph.cn/news/659885.shtml

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

相关文章

AlmaLinux上安装Docker

AlmaLinux上安装Docker 文章目录 AlmaLinux上安装Docker一、前言二、具体步骤1、Docker 下载更新系统包索引:添加Docker仓库:安装Docker引擎: 2、Docker服务启动启动Docker服务:设置Docker开机自启: 3、Docker 安装验证…

Android开发--ProgressBar应用显示测点数量

1.自定义ProgressBarView public class ProgressBarView extends View {private Paint mPaintBack;private Paint mPaint;private Paint mPaintText;private float process;int strokeWidth 3;//圈宽度int textSize 17;//字大小private long duration 1000;private float st…

一站式在线APP封装平台的革新之旅

随着移动互联网的快速发展,App已经成为我们日常生活中不可或缺的一部分。对于开发者而言,将创新的应用快速打包成APK格式,并进行有效分发,是确保应用生命周期成功的关键一步。传统的App打包过程往往需要复杂的环境配置、依赖管理以…

Mamba系列日积月累(一):状态空间模型SSM的离散化过程推导

文章目录 1. 背景基础知识1.1 什么是状态空间模型(State Space Model,SSM)?1.2 什么是离散化(Discretization)?1.3 为什么需要离散化? 2. SSM离散化过程推导2.1 为什么在离散化过程中…

无人机除冰保障电网稳定运行

无人机除冰保障电网稳定运行 近日,受低温雨雪冰冻天气影响,福鼎市多条输配电线路出现不同程度覆冰。 为保障福鼎电网安全可靠运行,供电所员工运用无人机飞行技术,通过在无人机下方悬挂器具,将无人机飞到10千伏青坑线…

电脑和手机连接酒店的wifi,网络不通导致charles无法抓手机的包

查看苹果手机,连wifi后的ip地址 电脑去ping 手机的ip地址,发现ping不通 解决方案: 应该是酒店wifi的问题,让朋友开个手机热点,电脑和我的手机都连这个热点,就可以抓包了

2024.1.31每日一题

LeetCode 找出不同元素数目差数组 2670. 找出不同元素数目差数组 - 力扣(LeetCode) 题目描述 给你一个下标从 0 开始的数组 nums ,数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示,其中 di…

OG Trade在ZKX揭幕:一家基于Starknet的游戏化永续合约交易所

ZKX的 OG Trade通过内置游戏化和30分钟交易竞赛,为所有交易者创造机会,革新了永续合约交易模式。 2024年1月30日 — ZKX宣布推出OG Trade,这是一家基于Starknet的游戏化永续合约交易所,旨在满足短期交易者、高水平交易者和波段交易…

Java后端须知的前端知识

Java后端须知的前端知识 HTML &#xff08;超文本标记语言&#xff09; W3C标准 结构&#xff1a;HTML表现&#xff1a;CSS行为&#xff1a;JavaScript 快速入门 <html><head><title></title></head><body><font color"red&q…

【保姆级教程】Windows11下go-zero的etcd安装与初步使用

【Go-Zero】Windows11下etcd的安装与初步使用 大家好 我是寸铁&#x1f44a; 总结了一篇Windows11下etcd的安装与初步使用的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言&#xff1a; 在使用etcd 前&#xff0c;我们需要了解一下etcd 是什么&#xff0c;为什么使用etcd…

日本大带宽服务器速度和性能评测的关系

在互联网的快速发展中&#xff0c;大带宽服务器在提供高速、稳定的数据传输方面起着至关重要的作用。特别是在日本&#xff0c;由于其先进的网络基础设施和庞大的互联网用户群体&#xff0c;大带宽服务器的需求日益增长。那么&#xff0c;日本大带宽服务器的速度和性能评测有何…

机器学习数学基础

机器学习基础 1、标量、向量、矩阵、张量2、概率函数、概率分布、概率密度、分布函数3、向量的线性相关性4、最大似然估计5、正态分布(高斯分布)6、向量的外积(叉积)7、向量的内积(点积)8、超平面(H)1、标量、向量、矩阵、张量 标量、向量、矩阵和张量是线性代数中不同…

探索工业以太网交换机的新纪元:满足多元化市场需求

在当今数字化的时代&#xff0c;工业以太网交换机作为信息网络的核心枢纽&#xff0c;扮演着至关重要的角色。它们连接着各种设备&#xff0c;实现数据的快速传输与稳定交换&#xff0c;为工业自动化、物联网和智能制造提供了可靠的基础设施。随着数字化转型的不断深入&#xf…

VBoxManage 命令行使用

VBoxManage&#xff1a; 序号命令作用1VBoxManage list vms# 查看当前所有虚拟机2VBoxManage list runningvms # 查看当前正在运行的虚拟机3VBoxManage startvm 虚拟机名 --type gui # 启动虚拟机4VBoxManage startvm 虚拟机名 --type headless# 无前端图形界面方式启动虚拟机…

【Linux取经路】进程控制——进程等待

文章目录 一、进程创建1.1 初识 fork 函数1.2 fork 函数返回值1.3 写时拷贝1.4 fork 的常规用法1.5 fork 调用失败的原因1.6 创建一批进程 二、进程终止2.1 进程退出场景2.2 strerror函数2.3 errno全局变量2.4 程序异常2.5 进程常见退出方法2.6 exit 函数2.7 _exit 函数和 exit…

新春送福,暖心探访

春节将至&#xff0c;岁寒情暖。为了深入了解辖区困境老人的生活状况和真实需求&#xff0c;让困境老人感受到党和政府的关爱与温暖&#xff0c;营造幸福和谐的节日气氛。2024年1月31日下午&#xff0c;在长沙市湘江新区民政与社会保障局的支持下&#xff0c;学联社区携手长沙市…

Https加密超文本传输协议的运用

一、https的相关知识 1.1 https的简介 HTTPS &#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加…

基于微服务的高考志愿智能辅助决策系统(附源码)

目录 一.引言 1、编写目的 2、系统功能概述 二.功能分析 三.微服务模块 1、微服务用户相关模块 &#xff08;1&#xff09;用户注册 &#xff08;2&#xff09;用户登录 &#xff08;3&#xff09;用户信息管理 &#xff08;4&#xff09;用户操作 2、微服务文件云存…

React Router 完美教程(下)

我们书接上回&#xff0c;继续我们的React Router 路由之路&#xff1a; 我们到目前为止都没有用到 state、useEffect、redux等状态管理器。但也达到了我们的设计目的。 注意&#xff0c;action 返回的结果 可以在组件中使用 useActionData() 来获取。就像 useLoaderData() 的使…

MD5算法:高效安全的数据完整性保障

摘要&#xff1a;在数字世界中&#xff0c;确保数据完整性和安全性至关重要。消息摘要算法就是一种用于实现这一目标的常用技术。其中&#xff0c;Message Digest Algorithm 5&#xff08;MD5&#xff09;算法因其高效性和安全性而受到广泛关注。本文将详细介绍MD5算法的优缺点…