UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)
一、元素等待
1. 元素等待
1.1 什么是元素等待
概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程
意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现象了
1.2 为什么要设置元素等待
- 网络速度慢
- 电脑配置低
- 服务器处理
1.3 元素等待类型
- 强制等待
- 隐式等待
- 显式等待
2. 强制等待
如果我们不设置元素等待,那怎么避免 因元素未加载出来而定位失败 的情况出现呢?
答案很简单,就是调用 sleep() ,也叫强制等待
但是缺点就是:如果指定的时间过长,即使元素已被加载出来了,但还是要继续等,这样会浪费很多时间
例子:
# _*_ coding:utf-8 _*_
# File Name: case02
# Author: Emily
# Date: 2021/7/6 17:24
# Description : 强制等待
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
# 访问网址
driver.get('https://www.baidu.com')
# 最大化浏览器窗口
driver.maximize_window()
# 强制等待3秒才执行下一步
sleep(3)
# 找到搜索框
inputElement = driver.find_element_by_id("kw")
3. 隐式等待
概念:定位元素时,如果能定位到元素则直接返回该元素,不触发等待;如果不能定位到该元素,则间隔一段时间后再去定位元素;如果在达到最大时长还没找到指定元素,则抛出元素不存在的异常 NoSuchElementException
3.1 实现方式
方法:driver.implicitly_wait(timeout)
timeout:为等待最大时长,单位:秒
说明:隐式等待为全局设置(只需要设置一次,就会作用于所有元素)
例子:
# _*_ coding:utf-8 _*_
# File Name: case02
# Author: Emily
# Date: 2021/7/6 17:24
# Description : 隐式等待
from selenium import webdriver
# 加载驱动
driver = webdriver.Chrome()
# 隐式等待20s
driver.implicitly_wait(20)
# 访问网址
driver.get('https://www.baidu.com')
# 最大化浏览器窗口
driver.maximize_window()
# 强制等待3秒才执行下一步
sleep(3)
# 找到搜索框
inputElement = driver.find_element_by_id("kw")
4.显示等待
概念:定位你指定元素时,如果定位到元素则直接返回该元素,不触发等待;如果不能定位到该元素,则间隔一段时间后再去定位元素;如果在达到最大时长时还没有找到指定元素,则抛出超时异常TimeoutException
在Selenium中把显示等待的相关方法封装在WebDriverWait类中
4.1 实现方式
导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver, timeout, poll_frequency=0.5)
1). driver:浏览器驱动对象
2). timeout:超时的时长。单位:秒
3). poll_frequency:检测间隔时间,默认为0.5秒
调用方法 until(method):直到。。。时
1). method:函数名称,该函数用来实现对元素的定位
2). 一般使用匿名函数来实现:lambda x: x.find_element_by_id('username')
element = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element_by_id('username'))
例子:
# _*_ coding:utf-8 _*_
# File Name: case02
# Author: Emily
# Date: 2021/7/6 17:24
# Description : 隐式等待
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
# 访问网址
driver.get("https://www.baidu.com")
# ===显式等待===
# 设置元素等待实例,最多等10秒,每0.5秒查看条件是否成立
element = WebDriverWait(driver, 10, 0.5).until(
# 条件:直到元素加载完成
EC.presence_of_element_located((By.ID, "kw"))
)
UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)的更多相关文章
- UI自动化学习笔记- Selenium元素定位及元素操作
一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...
- UI自动化学习笔记- Selenium一些特殊操作的处理
一.特殊操作处理 1. 下拉选择框操作 1.1 如何操作下拉选择框 实现方式一 思路:先定位到要操作的option元素,然后执行点击操作 driver.find_element_by_css_sele ...
- python+selenium基础篇,三种等待方式,显示、隐式、强制等待
1.显示等待: from selenium import webdriver from time import sleep from selenium.webdriver.support.ui imp ...
- UI自动化学习笔记- UnitTest单元测试框架详解
一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...
- 【Selenium】显示、隐式等待
显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...
- UI自动化学习笔记- PO模型介绍和使用
一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...
- UI自动化学习笔记- 日志相关操作
一.日志相关 1.日志 概念:日志就是用于记录系统运行时的信息,对一个事件的记录,也称log 1.1 日志的作用 调试程序 了解系统程序运行的情况,是否正常 系统程序运行故障分析与问题定位 用来做用户 ...
- sleep(强制等待)和implicitly_wait(隐式等待 )区别与理解---基于python
我们在进行selenium页面自动化的测试的时候,由于需要等待目标页面的加载或由于网络或硬件配置导致的页面加载等待,经常会用到sleep,但是由于在不同场景下对于sleep时间的估计无法十分准确,导致 ...
- Selenium系列(六) - 强制等待、隐式等待、显式等待
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
随机推荐
- Shell脚本 /dev/null 2>&1详解
Shell脚本---- /dev/null 2>&1详解 1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. ...
- web技术开发桌面应用
三款前端工程师桌面应用开发神器! http://mini.eastday.com/a/160630023107669-2.html 如果我告诉你,以后你们可以用前端语言(html5+css3+js)开 ...
- Python小白的数学建模课-03.线性规划
线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 要通过线性规划问题,理解如何学习数学建模.如何选择编程算法. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛 ...
- 向pom.xml中配置Maven使用JDK8编译
maven项目会用maven-compiler-plugin默认的jdk版本来进行编译,如果不指明版本就容易出现版本不匹配的问题,可能导致编译不通过的问题. 解决办法:在pom文件中配置maven-c ...
- Scrapy爬虫返回302重定向问题解决方法
scrapy爬虫遇到爬取页面时302重定向导致response页面与实际需要爬取的页面信息不一致,导致无法正常获取信息,查看日志存在 scrapy.downloadermiddlewares.redi ...
- BEP 7:CUDA外部内存管理插件(下)
BEP 7:CUDA外部内存管理插件(下) Numba依赖 向库中添加EMM插件的实现自然会使Numba成为库的依赖项,而以前可能没有.为了使依赖关系可选,如果需要的话,可以有条件地实例化并注册EMM ...
- CPU的自动调度矩阵乘法
CPU的自动调度矩阵乘法 这是一个有关如何对CPU使用自动调度程序的文档. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,而无需任何调度 ...
- Seata分布式事务框架Sample
前言 阿里官方给出了seata-sample地址,官方自己也对Sample提供了很多类型,可以查看学习. 我这里选择演示SpringBoot+MyBatis. 该聚合工程共包括5个module: sb ...
- 如何打造高性能的 Go 缓存库
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/531 文中代码位置: https://github.com/devY ...
- Linkerd 2.10(Step by Step)—1. 将您的服务添加到 Linkerd
为了让您的服务利用 Linkerd,它们还需要通过将 Linkerd 的数据平面代理(data plane proxy)注入到它们服务的 pod 中,从而进行网格化. Linkerd 2.10 中文手 ...