集团官网
  • 国家级全民数字素养与技能培训基地
  • 河南省第一批产教融合型企业建设培育单位
  • 郑州市数字技能人才(码农)培养评价联盟

自动化测试小技巧之Selenium的等待实现方式

编辑:云和数据 日期:2023-10-10 09:56

9a44c0a054a8c4f8168b7c1167045ef.png

页面还没加载出来就对页面上的元素进行操作,就会出现:因为加载元素延时造成的脚本失败,我们可以通过设置等待时间来提升自动化脚本的稳定性。

WebDriver 提供了3种类型的等待:显式等待、隐式等待、休眠

² 显式等待是针对某一个元素进行相关等待判定;

² 隐式等待不针对某一个元素进行等待,全局元素等待;

² sleep 休眠方法。

1.方式1:显式等待

WebDriverWait 类由 WebDriver 提供的等待方法。在设置时间内,默认每个一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常

² WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

² n Driver 浏览器驱动

² n Timeout最长超时时间,默认以秒为单位

² n poll_frequency 检测的间隔时间,默认为 0.5

² n ignored_exceptions

² NoSuchElementException 异常

² WebDriverWait 一般由 until() until_not()方法配合使用

² n until(method,message=’’) 调用该方法提供的驱动程序作为一个参数,知道返回值为 Ture

² n until_not(method,message=’’ 调用该方法提供的驱动程序作为一个参数,知道返回值为 False

2.代码实现

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
# as expected_conditions重命名为EC
from selenium.webdriver.support import expected_conditions as EC
from time import sleep

# 指定浏览器位置
chrome_location =
r'D:\software\Win_x64_1135105_chrome-win\chrome-win\chrome.exe'
options = webdriver.ChromeOptions()
options.binary_location = chrome_location

driver = webdriver.Chrome(options=options)
driver.get(r'https://www.baidu.com/')

driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('selenium')
sleep(
3)
# 显式等待 30 判断搜索按钮是否存在
element = WebDriverWait(driver, 30, 0.5).until(EC.presence_of_element_located((By.ID, 'su'))
element.click()
sleep(
3)
driver.quit()

3.方式2:隐式等待

implicitly_wait() 默认参数的单位为秒。隐性等待设置了一个时间,在一段时间内网页是否加载完成,如果完成了,就进行下一步;在设置的时间内没有加载完成,则会报超时加载。

4.代码实现

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from time import sleep, ctime
# 指定浏览器位置
chrome_location =
r'D:\software\Win_x64_1135105_chrome-win\chrome-win\chrome.exe'
options = webdriver.ChromeOptions()
options.binary_location = chrome_location
driver = webdriver.Chrome(
options=options)
# 隐式等待 30
driver.implicitly_wait(30)
driver.get(
r'https://www.baidu.com')
# 检测搜索框是否存在
try:
   driver.find_element(By.CSS_SELECTOR,
'#kw').send_keys('selenium')
   driver.find_element(By.CSS_SELECTOR,
'#su').click
except NoSuchElementException as msg:
   
print(msg)
sleep(
3)
driver.quit()

5.方式3:sleep 休眠

sleep()方法有 Python time 模块提供。在脚本调试过程中,希望脚本再执行到某一位置时做固定时间的休眠,则可以使用。

sleep()默认参数以秒为单位,如果设置时长小于 1 秒,则用小数表示。

 

相关内容

抢先一步 鸿蒙(HarmonyOS)应用开发者高级认证 免费考! 适合人群计算机相关专业在校生(技师、中职、高职、本科、研究生)对鸿蒙(HarmonyOS)有兴趣的非计算机相关专业在校生目前正在从事移动应用的开发者目前正在从事计算机行业相关的人计算机专业高校老师所有对鸿蒙(HarmonyOS)有兴趣的人 培训方案掌握鸿蒙的核心概念和端云一体化开发、... 什么是Java的多态性(polymorphism)?它有哪些不同的形式? 多态性是Java面向对象编程的一个重要概念,它允许不同的对象以一致的方式响应同一个方法调用,具体表现为对象在运行时可以表现出多个不同的形态。多态性主要有两种不同的形式:编译时多态性(静态多态性)和运行时多态性(动态多态性)。1. 编译时多态性(静态多态性):   ... 如何学习和搭建Hadoop开发环境? Hadoop是大数据处理领域的重要平台,能够处理和分析大量数据。为了有效地利用Hadoop,我们需要学习其基础知识,并正确搭建开发环境。下面是详细的学习和搭建指南。一、学习Hadoop基础掌握基础概念和原理Hadoop主要由HDFS和MapReduce两部分组成。HDFS是分布式文件系统,Ma... UI 设计学习如何进阶成为高手 我总结了六种方法,帮助你走出舒适区,提高技能,成长为自信且经验丰富的UI设计高手一位经验丰富的 UI 设计师,往往十分看中应用程序界面的吸引力和视觉刺激,确保满足用户期望和需求。但是,如果你已经在 UI 设计圈摸爬滚打多年,仍然没有出色的作品,那你极有可能是因为陷入了一个舒适圈,UI技能一直原... 在Java中Executor和Executors的区别? 在Java中,Executor和Executors都与线程池和并发执行有关,但它们是不同的概念和类。1.ExecutorExecutor是一个接口,位于java.util.concurrent包中,用于表示一个执行任务的执行器。它只定义了一个方法:void execute(Runnable c... String类型的常见命令有哪些? String类型,也就是字符串类型,是Redis中最简单的存储类型。其value是字符串,不过根据字符串的格式不同,又可以分为3类:string是普通字符串,int整数类型,可以做自增、自减操作,float浮点类型,可以做自增、自减操作。String的常见命令有:SET:添加或者修改已经存在的...