一、元素等待

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. Linux 操作系统(二)搜索文件命令find、locate、which、whereis、grep、wc

    以下命令均已在 Kali Linux 下验证. 1.find 命令 --1-- find /usr/share -name test.lst //精准搜索,文件名需要与-name后的内容一模一样包括后 ...

  2. rsync+inotify实现全网自动化数据备份

    第1章 环境配置 实例1-1 服务器及IP主机名规划 已知 4 台服务器主机名主机对应信息见下表: 服务器说明 外网 IP(NAT) 内网 IP(NAT)  主机名 web服务器 10.0.0.7/2 ...

  3. nosql数据库之Redis集群

    Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 ...

  4. python基础之字典、集合

    一.字典(dictionary) 作用:存多个值,key-value存取,取值速度快 定义:key必须是不可变类型,value可以是任意类型 字典是一个无序的,可以修改的,元素呈键值对的形式,以逗号分 ...

  5. Windows上能看朋友圈的微信来了 | 附下载地址

    昨天的时候,电脑端的微信提示更新就顺手更新了一下,更新完成后习惯性的点了下设置,纳尼,居然被灰到了测试版本? 带着好奇,赶快看了下更新了什么内容: 支持浏览朋友圈 "搜一搜"支持搜 ...

  6. 技术干货 | 如何在 Library 中使用/依赖 mPaaS?

    使用场景 在使用 mPaaS 框架过程中,有时需要复用模块.复用时需要按照使用 Module 依赖的方式添加模块.本文以将复用 mPaaS 扫码组件的 Module 为例进行说明. 前提条件 已按照原 ...

  7. SQL Server 动态创建表结构

    需求是,在word里面设计好表结构(主要在word中看起来一目了然,方便维护),然后复制sql 里面,希望动态创建出来 存储表结构的表 CREATE TABLE [dbo].[Sys_CreateTa ...

  8. DDD中聚合、聚合根的含义以及作用

    聚合与聚合根的含义 聚合: 聚合往往是一些实体为了某项业务而聚类在一起形成的集合 , 举个例子, 社会是由一个个的个体组成的,象征着我们每一个人.随着社会的发展,慢慢出现了社团.机构.部门等组织,我们 ...

  9. NVIDIA CUDA-X AI

    NVIDIA CUDA-X AI 面向数据科学和 AI 的 NVIDIA GPU 加速库 数据科学是推动 AI 发展的关键力量之一,而 AI 能够改变各行各业. 但是,驾驭 AI 的力量是一个复杂挑战 ...

  10. YOLO v1到YOLO v4(下)

    YOLO v1到YOLO v4(下) Faster YOLO使用的是GoogleLeNet,比VGG-16快,YOLO完成一次前向过程只用8.52 billion 运算,而VGG-16要30.69bi ...