一、元素等待

1. 元素等待

1.1 什么是元素等待

概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程

意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现象了

1.2 为什么要设置元素等待
  1. 网络速度慢
  2. 电脑配置低
  3. 服务器处理
1.3 元素等待类型
  1. 强制等待
  2. 隐式等待
  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 实现方式
  1. 导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait

  2. WebDriverWait(driver, timeout, poll_frequency=0.5)

    ​ 1). driver:浏览器驱动对象

    ​ 2). timeout:超时的时长。单位:秒

    ​ 3). poll_frequency:检测间隔时间,默认为0.5秒

  3. 调用方法 until(method):直到。。。时

    ​ 1). method:函数名称,该函数用来实现对元素的定位

    ​ 2). 一般使用匿名函数来实现:lambda x: x.find_element_by_id('username')

  4. 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元素等待(强制等待、显示等待、隐式等待)的更多相关文章

  1. UI自动化学习笔记- Selenium元素定位及元素操作

    一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...

  2. UI自动化学习笔记- Selenium一些特殊操作的处理

    一.特殊操作处理 1. 下拉选择框操作 1.1 如何操作下拉选择框 实现方式一 思路:先定位到要操作的option元素,然后执行点击操作 driver.find_element_by_css_sele ...

  3. python+selenium基础篇,三种等待方式,显示、隐式、强制等待

    1.显示等待: from selenium import webdriver from time import sleep from selenium.webdriver.support.ui imp ...

  4. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

  5. 【Selenium】显示、隐式等待

    显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...

  6. UI自动化学习笔记- PO模型介绍和使用

    一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...

  7. UI自动化学习笔记- 日志相关操作

    一.日志相关 1.日志 概念:日志就是用于记录系统运行时的信息,对一个事件的记录,也称log 1.1 日志的作用 调试程序 了解系统程序运行的情况,是否正常 系统程序运行故障分析与问题定位 用来做用户 ...

  8. sleep(强制等待)和implicitly_wait(隐式等待 )区别与理解---基于python

    我们在进行selenium页面自动化的测试的时候,由于需要等待目标页面的加载或由于网络或硬件配置导致的页面加载等待,经常会用到sleep,但是由于在不同场景下对于sleep时间的估计无法十分准确,导致 ...

  9. Selenium系列(六) - 强制等待、隐式等待、显式等待

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

随机推荐

  1. Shell $?获取函数返回值或者上一个命令的退出状态

    Shell $?获取函数返回值或者上一个命令的退出状态 来自:互联网 时间:2021-01-12 阅读:2 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态, ...

  2. Linux 部署 iSCSI 客户端配置(Linux)

    Linux 部署 iSCSI 客户端配置(Linux) 客户端环境 Client :RHEL8 IP : 192.168.121.11 一.测试与服务端的连通性 [root@Client-linux ...

  3. Mysql数据库-多实例主从复制-主从故障详解

    一.mysql结构 1.实例 1.什么是单实例 一个进程 + 多个线程 + 一个预分配的内存空间 2.多实例 多个进程 + 多个线程 + 多个预分配的内存空间 ](http://shelldon.51 ...

  4. ARP欺骗-断网小技巧

    警告:请勿用于非法用途,后果自负! 环境: 攻击方: Kali Linux 被攻击方: Windows XP 二者在同一局域网下 步骤 1.查看Windows的IP,联网状态 在Windows的cmd ...

  5. MyBatis 高级查询之一对多查询(十)

    高级查询之一对多查询 查询条件:根据游戏名称,查询游戏账号信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据游戏名查询游戏账号 * @param ...

  6. 2.7循环_while

    循环 目标 程序的三大流程 while 循环基本使用 break 和 continue while 循环嵌套 01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 -- 从上向下,顺序执行 ...

  7. ioctl 函数的FIOREAD参数

    在学习ioctl 时常常跟 read, write 混淆.其实 ioctl 是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的. 而read,write 是把数据丢入缓冲区,硬件的驱动从缓冲 ...

  8. SPI接口在LCD上的应用

    ​小分辨率的LCD,比如QQVGA,QCIF,QVGA等,广泛应用于功能手机和穿戴设备(比如手表)上.这类小分辨率的LCD,除了支持并行接口(比如i80),一般也会支持串行接口.在实际产品中广泛运用的 ...

  9. TVM图优化与算子融合

    TVM图优化与算子融合 计算图的定义 Computational graphs: a common way to represent programs in deep learning framewo ...

  10. 深度学习LiDAR定位:L3-Net

    深度学习LiDAR定位:L3-Net 摘要 本文提出L3-Net--一种新颖的基于学习的LiDAR定位系统,可实现厘米级的定位,与现有最高水平的传统定位算法相媲美.与传统定位算法不同,本文创新地实现了 ...