当前位置: 首页 > news >正文

Selenium WebDriver中的显式等待与隐式等待:深入理解与应用

在自动化测试中,尤其是在使用Selenium WebDriver进行Web应用的自动化测试时,等待元素加载完成是一个常见的需求。Selenium提供了两种等待机制来处理这一问题:显式等待(Explicit Wait)和隐式等待(Implicit Wait)。理解并正确应用这两种等待机制,对于编写稳定、高效的自动化测试脚本至关重要。

一、显式等待(Explicit Wait)

概念与原理
显式等待是一种条件等待,它允许你等待某个条件成立后再继续执行下一步操作。在Selenium中,这通常通过WebDriverWait类配合预期条件(Expected Conditions)来实现。显式等待只会在指定的元素上等待,直到满足某个条件(如元素可见、可点击等)为止,或者达到最大等待时间。

使用场景

  • 当页面元素加载时间不确定时。
  • 需要等待某个特定的元素状态(如加载完成、可见、可点击等)时。
  • 当希望测试脚本对元素状态有精确控制时。

示例代码

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;public class SeleniumExplicitWaitExample {public static void main(String[] args) {// 初始化WebDriverSystem.getProperties().setProperty("webdriver.chrome.driver","D:\\chromedriver.exe");ChromeDriver driver = new ChromeDriver();// 打开网页driver.get("https://yiyan.baidu.com/");// 定义一个ExpectedCondition,检查元素是否可见并可交互ExpectedCondition<WebElement> elementToBeClickable =ExpectedConditions.elementToBeClickable(By.className("VAtmtpqL _HiOiisZ"));ExpectedCondition<WebElement> elementVisiblity =ExpectedConditions.visibilityOfElementLocated(By.className("yc-editor"));// 创建WebDriverWait实例,设置等待时长为10秒WebDriverWait wait = new WebDriverWait(driver, 10);WebElement element1 = wait.until(elementVisiblity);element1.sendKeys("测试");// 使用wait等待元素变得可点击WebElement element = wait.until(elementToBeClickable);// 点击元素element.click();// 关闭浏览器driver.quit();}
}
二、隐式等待(Implicit Wait)

概念与原理
隐式等待是对WebDriver实例的全局设置,它告诉WebDriver在尝试查找任何元素时,都应该等待一段时间(最长等待时间),直到找到元素或超时。这种等待会应用于该WebDriver实例的生命周期中所有元素查找操作。

使用场景

  • 当页面加载速度较慢,且大部分元素加载时间相近时。
  • 作为一种简单的等待策略,用于快速设置全局等待时间。

示例代码

System.getProperties().setProperty("webdriver.chrome.driver","D:\\chromedriver.exe");ChromeDriver driver = new ChromeDriver();driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
三、区别与联系

区别

  • 作用域:显式等待针对单个元素,隐式等待则影响所有元素查找操作。
  • 灵活性:显式等待可以指定等待条件,更加灵活;隐式等待则较为简单,只能设置等待时间。
  • 推荐使用:显式等待因其灵活性和精确性,通常更受推荐;隐式等待则适用于简单场景或作为临时解决方案。

联系
两者都是为了提高测试脚本的稳定性和可靠性,通过等待元素加载完成来避免因元素未就绪而导致的错误。

四、实际案例

显式等待案例
在登录页面等待“登录”按钮变为可点击状态后再执行点击操作。

隐式等待案例
在访问一个包含多个动态加载内容的页面时,设置隐式等待以确保所有元素有足够时间加载。

五、重要性与建议

重要性

  • 提高测试稳定性:减少因元素未加载完成而导致的测试失败。
  • 优化测试效率:通过合理的等待策略,避免不必要的长时间等待。

建议

  • 尽可能使用显式等待,因为它更灵活、更精确。
  • 在确实需要全局等待时,考虑使用隐式等待,但请谨慎设置等待时间,避免过长等待导致的测试效率低下。
  • 结合使用显式等待和隐式等待,根据具体场景灵活调整策略。
  • 定期检查并优化等待时间,以适应页面加载速度的变化。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LabVIEW学习-LabVIEW储存Excel表格
  • 新版k8s拉取镜像失败问题
  • Python基础学习笔记——异常
  • python实现openssl的EVP_BytesToKey及AES_256_CBC加解密算法
  • “存算分离“和“湖仓一体“
  • Ansible 安装及使用说明
  • (补充)IDEA项目结构
  • Linux重要知识点
  • JMeter案例分享:通过数据验证的错误,说说CSV数据文件设置中的线程共享模式
  • Flutter和React Native(RN)的比较
  • 【无需公网IP】在树莓派上搭建Web站点
  • 亚马逊云科技EC2简明教程
  • 每日Attention学习11——Lightweight Dilated Bottleneck
  • Jetson-AGX-Orin 非docker环境源码编译安装CyberRT
  • ctfshow--web入门--SSRF
  • 2017年终总结、随想
  • HTTP 简介
  • input的行数自动增减
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript中的对象个人分享
  • Java读取Properties文件的六种方法
  • Python打包系统简单入门
  • REST架构的思考
  • Ruby 2.x 源代码分析:扩展 概述
  • Solarized Scheme
  • SpriteKit 技巧之添加背景图片
  • SQLServer之创建数据库快照
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 面试遇到的一些题
  • 你不可错过的前端面试题(一)
  • 我的面试准备过程--容器(更新中)
  • 小程序 setData 学问多
  • gunicorn工作原理
  • UI设计初学者应该如何入门?
  • 阿里云重庆大学大数据训练营落地分享
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)换源+apt-get基础配置+搜狗拼音
  • (二)原生js案例之数码时钟计时
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (四)React组件、useState、组件样式
  • (转)详解PHP处理密码的几种方式
  • ... 是什么 ?... 有什么用处?
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net framework profiles /.net framework 配置
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .NET命令行(CLI)常用命令