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

2024-02-01 11:52

本文主要是介绍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常用方法一一举例了,记住整体的使用方式,配合我们需要的场景进行使用即可。


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

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

                                            

这篇关于Python+Selenium+Unittest 之selenium15--等待时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/667186

相关文章

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模