- Selenium 教程
- Selenium - 首页
- Selenium - 概述
- Selenium - 组件
- Selenium - 自动化测试
- Selenium - 环境搭建
- Selenium - 远程控制
- Selenium IDE 教程
- Selenium - IDE 简介
- Selenium - 特性
- Selenium - 限制
- Selenium - 安装
- Selenium - 创建测试
- Selenium - 创建脚本
- Selenium - 控制流
- Selenium - 存储变量
- Selenium - 警报和弹出窗口
- Selenium - Selenese 命令
- Selenium - Actions 命令
- Selenium - Accessors 命令
- Selenium - Assertions 命令
- Selenium - Assert/Verify 方法
- Selenium - 定位策略
- Selenium - 脚本调试
- Selenium - 验证点
- Selenium - 模式匹配
- Selenium - JSON 数据文件
- Selenium - 浏览器执行
- Selenium - 用户扩展
- Selenium - 代码导出
- Selenium - 代码生成
- Selenium - JavaScript 函数
- Selenium - 插件
- Selenium WebDriver 教程
- Selenium - 简介
- Selenium WebDriver vs RC
- Selenium - 安装
- Selenium - 第一个测试脚本
- Selenium - 驱动程序会话
- Selenium - 浏览器选项
- Selenium - Chrome 选项
- Selenium - Edge 选项
- Selenium - Firefox 选项
- Selenium - Safari 选项
- Selenium - 双击
- Selenium - 右击
- Python 中的 HTML 报告
- 处理编辑框
- Selenium - 单个元素
- Selenium - 多个元素
- Selenium Web 元素
- Selenium - 文件上传
- Selenium - 定位器策略
- Selenium - 相对定位器
- Selenium - 查找器
- Selenium - 查找所有链接
- Selenium - 用户交互
- Selenium - WebElement 命令
- Selenium - 浏览器交互
- Selenium - 浏览器命令
- Selenium - 浏览器导航
- Selenium - 警报和弹出窗口
- Selenium - 处理表单
- Selenium - 窗口和标签页
- Selenium - 处理链接
- Selenium - 输入框
- Selenium - 单选按钮
- Selenium - 复选框
- Selenium - 下拉框
- Selenium - 处理 iframe
- Selenium - 处理 Cookie
- Selenium - 日期时间选择器
- Selenium - 动态 Web 表格
- Selenium - Actions 类
- Selenium - Action 类
- Selenium - 键盘事件
- Selenium - 键上/键下
- Selenium - 复制和粘贴
- Selenium - 处理特殊键
- Selenium - 鼠标事件
- Selenium - 拖放
- Selenium - 笔事件
- Selenium - 滚动操作
- Selenium - 等待策略
- Selenium - 显式/隐式等待
- Selenium - 支持特性
- Selenium - 多选
- Selenium - 等待支持
- Selenium - 选择支持
- Selenium - 颜色支持
- Selenium - ThreadGuard
- Selenium - 错误和日志记录
- Selenium - 异常处理
- Selenium - 其他
- Selenium - 处理 Ajax 调用
- Selenium - JSON 数据文件
- Selenium - CSV 数据文件
- Selenium - Excel 数据文件
- Selenium - 跨浏览器测试
- Selenium - 多浏览器测试
- Selenium - 多窗口测试
- Selenium - JavaScript 执行器
- Selenium - 无头执行
- Selenium - 捕获屏幕截图
- Selenium - 捕获视频
- Selenium - 页面对象模型
- Selenium - 页面工厂
- Selenium - 录制和回放
- Selenium - 框架
- Selenium - 浏览上下文
- Selenium - DevTools
- Selenium Grid 教程
- Selenium - 概述
- Selenium - 架构
- Selenium - 组件
- Selenium - 配置
- Selenium - 创建测试脚本
- Selenium - 测试执行
- Selenium - 端点
- Selenium - 自定义节点
- Selenium 报告工具
- Selenium - 报告工具
- Selenium - TestNG
- Selenium - JUnit
- Selenium - Allure
- Selenium & 其他技术
- Selenium - Java 教程
- Selenium - Python 教程
- Selenium - C# 教程
- Selenium - Javascript 教程
- Selenium - Kotlin 教程
- Selenium - Ruby 教程
- Selenium - Maven & Jenkins
- Selenium - 数据库测试
- Selenium - LogExpert 日志记录
- Selenium - Log4j 日志记录
- Selenium - Robot Framework
- Selenium - AutoIT
- Selenium - Flash 测试
- Selenium - Apache Ant
- Selenium - Github 教程
- Selenium - SoapUI
- Selenium - Cucumber
- Selenium - IntelliJ
- Selenium - XPath
- Selenium 其他概念
- Selenium - IE 驱动程序
- Selenium - 自动化框架
- Selenium - 关键字驱动框架
- Selenium - 数据驱动框架
- Selenium - 混合驱动框架
- Selenium - SSL 证书错误
- Selenium - 替代方案
- Selenium 有用资源
- Selenium - 问答
- Selenium - 快速指南
- Selenium - 有用资源
- Selenium - 自动化实践
- Selenium - 讨论
Selenium WebDriver - 显式/隐式等待
Selenium WebDriver 可以与显式等待和隐式等待结合使用以实现同步。等待主要用于测试中,以处理动态网页。
网页完全加载并 web 元素完全可用之前,通常存在一些延迟时间。Selenium WebDriver 中提供的等待机制有助于将测试执行暂停,直到元素以正确的状态出现在/消失在网页上。
让我们讨论 Selenium WebDriver 中的一些等待类型:
隐式等待
这是 Selenium 中默认的等待方式。这是一种应用于整个驱动程序会话的全局等待。默认等待时间为 0,这意味着如果找不到元素,将立即抛出错误。但是,如果设置了等待时间,则在等待时间超过后将抛出错误。一旦识别出元素,就会返回其引用,并且执行将移至下一步。我们应该以最佳方式使用隐式等待,较长的等待时间会增加测试的执行时间。
语法
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
在上面的示例中,将在 15 秒后抛出 NoSuchElementException。
显式等待
它类似于添加到代码中的循环,这些循环轮询网页以使特定场景在退出循环并转到下一行代码之前变为 true。如果在规定的时间内未满足情况,则会抛出超时异常。显式等待使用 ExpectedConditions 和 WebDriverWait 类应用于具有其条件的特定元素。显式等待的一些预期条件是:
titleContains, alertIsPresent, invisibilityOfElementLocated(By locator), titleIs(), invisibilityOfElementWithText(By locator, String s), visibilityOf(), textToBePresentInElement(By locator, String s), visibilityOfElementLocated(By locator), visibilityOfAllElements(), presenceOfAllElementsLocatedBy(By locator), presenceOfElementLocated(By locator), elementToBeClickable(By locator), stalenessOf(WebElement e), textToBePresentInElementValue(), textToBePresentInElementLocated(), elementSelectionStateToBe(), elementToBeSelected(), frameToBeAvaliableAndSwitchToIt().
在同一个驱动程序会话中添加隐式等待和显式等待时,我们应该谨慎,例如,将 15 秒的显式等待和 10 秒的隐式等待组合在一起可能会导致在 20 秒后发生超时。
语法
WebDriverWait wt = new WebDriverWait(driver,5); wt.until(ExpectedConditions.invisibilityOfElementLocated (By.xpath("//*[@class='mui−btn']")));
在上面的示例中,如果在指定时间内未满足元素不可见的预期条件,则将在 5 秒后抛出 TimeOutException。
让我们举个例子,我们将尝试使用错误的 xpath 值识别文本 Selenium - 自动化练习表单 并添加隐式等待。在这种情况下,一旦超时时间过去,我们将收到 NoSuchElementException。
此元素的正确 xpath 为:/html/body/div/header/div[2]/h1。但是,为了获得异常,我们将在我们的实现中使用不正确的 xpath /html/body/div/header/div[2]/u1。
示例
在 Implicitwts.java 类文件中实现代码。
package org.example; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; import java.util.concurrent.TimeUnit; public class Implicitwts { public static void main(String[] args) throws InterruptedException { // Initiate the Webdriver WebDriver driver = new ChromeDriver(); // adding implicit wait of 10 secs driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // launching a browser and open a URL driver.get("https://tutorialspoint.com/selenium/practice/selenium_automation_practice.php"); // identify element with incorrect xpath value WebElement l = driver.findElement(By.xpath("/html/body/div/header/div[2]/u1")); l.click(); // get text System.out.println("Get text : " + l.getText()); // Quitting browser driver.quit(); } }
输出
Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/header/div[2]/u1"} (Session info: chrome=121.0.6167.160) For documentation on this error, please visit: https://www.seleniumcn.cn/documentation/webdriver/troubleshooting/errors#no-such-element-exception Process finished with exit code 1
在上面的示例中,由于使用了不正确的 xpath 值来识别元素,因此我们收到了 NoSuchElementException。在 2 秒的隐式等待时间过去后,抛出了异常。
最后,收到消息 Process finished with exit code 1,表示代码执行失败。
让我们再举一个例子,我们将看到在显式等待时间过去时会抛出超时异常。
示例
在 Explicitwt.java 类文件中实现代码。
package org.example; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.time.Duration; public class Explicitwt { public static void main(String[] args) throws InterruptedException { // Initiate the Webdriver WebDriver driver = new ChromeDriver(); // launching a browser and open a URL driver.get("https://tutorialspoint.com/index.htm"); // identify element with locator xpath WebElement l = driver.findElement (By.xpath("/html/body/header/nav/ul/li[2]/a")); // explicit wait 2 secs for presence of incorrect element WebDriverWait wt = new WebDriverWait(driver, Duration.ofSeconds(2)); wt.until(ExpectedConditions.presenceOfElementLocated (By.xpath("/html/body/header/nav/ul/li[2]/li"))); // get text after presence of element condition is met System.out.println("Get text : " + l.getText()); // Quitting browser driver.quit(); } }
输出
Exception in thread "main" org.openqa.selenium.TimeoutException: Expected condition failed: waiting for presence of element located by: By.xpath: /html/body/header/nav/ul/li[2]/li (tried for 2 second(s) with 500 milliseconds interval) at org.openqa.selenium.support.ui.WebDriverWait. timeoutException(WebDriverWait.java:84) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:230) at org.example.Explicitwt.main(Explicitwt.java:25) Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/header/nav/ul/li[2]/li"} (Session info: chrome=121.0.6167.85)
在上面的示例中,由于在 2 秒的显式等待时间内未满足元素存在的预期条件,因此我们收到了 TimeOutException。在 2 秒的显式等待时间过去后,抛出了异常。
最后,收到消息 Process finished with exit code 1,表示代码执行失败。
在本教程中,我们讨论了如何使用 Selenium WebDriver 处理隐式等待和显式等待。