一、元素等待

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. Ubuntu 16.04 上安装 arm-linux-gcc-4.4.3

    参考链接:https://blog.csdn.net/zz56z56/article/details/83021583 注:正常安装后,不同用户切换,需重新刷新环境变量:source /etc/pro ...

  2. 联想INTEL X86台式机 用光驱启动 usb光驱启动

    联想INTEL X86台式机  用光驱启动 usb光驱启动 启动项顺序 都要调整 主要顺序 自动顺序 出错顺序 按下f10 f12

  3. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...

  4. BogoMips 和cpu主频无关 不等于cpu频率

    http://tinylab.org/explore-linux-bogomips/ 内核探索:Linux BogoMips 探秘 Tao HongLiang 创作于 2015/05/12 打赏 By ...

  5. docker0详解

    docker0:https://blog.csdn.net/kubailing/article/details/87936501 veth pair详解:https://www.cnblogs.com ...

  6. 五:.net core(.NET 6)使用Autofac实现依赖注入

    Autofac的简单使用: 由于将来可能引用很多包,为了保持统一队形,我们再新建一个类库项目Wsk.Core.Package,当做包的引用集合: 删掉Class1,把Wsk.Core.Wsk.Core ...

  7. KVO后[obj class]与object_getClass(id obj)的结果竟会不一致?

    说说背景,研究下面的代码时,KVO后[obj class]与object_getClass(id obj)的结果竟会不一致? PersonModel *aPersonModel = [[PersonM ...

  8. python报错“AttributeError: 'set' object has no attribute 'items'“

    作为才开始学爬虫的萌新,遇到了一个这样的错,很懵逼 后面到网络到处查看大佬的解决方法,才发现headers的请求头部信息有错误,headers是一个字典,不是字符串,所以报错了 原代码 headers ...

  9. 解决Caused by: org.apache.ibatis.exceptions.PersistenceException:

    在mybatis-config核心配置文件中注册了xml以后出现了新的异常错误 Caused by: java.io.IOException: Could not find resource cn.d ...

  10. 华为MDC软件架构

    华为MDC软件架构 平台软件零层逻辑架构如下图,由基础层.功能层.应用层和服务层组成. 零层逻辑架构 从平台软件一层逻辑架构可以看出,MDC用了华为自研的越影操作系统.兼容Autosar标准的软件中间 ...