Selenium 4:功能升级与应用实例全解析
Selenium 是一款广泛应用于 Web 应用程序自动化测试的工具套件。随着技术的不断发展,Selenium 4 的推出带来了诸多令人期待的新特性,这些特性旨在提高自动化测试的效率、灵活性和可维护性,使测试人员能够更好地应对复杂多变的 Web 应用测试场景。二、Selenium 4 的新特性(一)相对定位器
[*]概念与原理
[*]在 Selenium 4 之前,元素定位主要依赖于绝对定位方式,如通过 ID、名称、类名、XPath 和 CSS 选择器等。然而,相对定位器提供了一种基于元素与其他元素的相对位置关系来定位元素的新方法。例如,“above” 定位器可以用于查找位于指定元素上方的元素,“below” 定位器则用于查找下方的元素,“toLeftOf” 和 “toRightOf” 分别用于定位在指定元素左侧和右侧的元素,还有 “near” 定位器可以查找在指定元素附近一定范围内的元素。
[*]相对定位器的实现基于 Selenium 对页面元素布局的深入分析和计算。它会根据浏览器渲染页面后元素的坐标位置信息,结合所指定的相对位置关系条件,筛选出符合要求的元素。
[*]代码示例
[*]以下是使用 Selenium 4 的相对定位器的示例代码。假设我们有一个网页,其中有多个按钮,我们要定位位于某个特定按钮下方的按钮。
<font face="微软雅黑" size="3">import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.locators.RelativeLocator;
public class RelativeLocatorExample {
public static void main(String[] args) {
// 设置 Chrome 驱动路径
System.setProperty("webdriver.chrome.driver", "path/to/chrome/driver");
WebDriver driver = new ChromeDriver();
// 打开网页
driver.get("http://example.com");
// 找到参考元素
WebElement referenceButton = driver.findElement(By.id("referenceButtonId"));
// 使用相对定位器找到位于参考按钮下方的按钮
WebElement targetButton = driver.findElement(RelativeLocator.with(By.tagName("button")).below(referenceButton));
// 可以对目标按钮进行操作,如点击等
targetButton.click();
// 关闭浏览器
driver.close();
}
}</font>
在上述代码中,首先通过By.id找到参考按钮,然后使用RelativeLocator.with(By.tagName("button")).below(referenceButton)来定位位于参考按钮下方的按钮。这种相对定位的方式在页面布局发生一定变化时,只要元素之间的相对位置关系不变,测试脚本仍然能够正常工作,提高了测试脚本的稳定性。(二)全新的 Selenium Manager
[*]功能概述
[*]Selenium Manager 是 Selenium 4 中的一个重要新特性,它自动处理 WebDriver 的下载、安装和配置等繁琐任务。在之前的版本中,测试人员需要手动下载与浏览器版本对应的 WebDriver 可执行文件,并将其正确配置到项目中,这一过程容易出错且增加了项目的复杂性。而 Selenium Manager 会根据测试代码中指定的浏览器类型(如 Chrome、Firefox 等),自动检测系统环境,下载合适版本的 WebDriver,并进行必要的配置,使得测试人员可以更加专注于测试脚本的编写和测试逻辑的设计。
[*]使用方式与示例
[*]在使用 Selenium 4 时,无需像以前那样显式地设置 WebDriver 的路径。例如,在 Java 中,只需简单地创建 WebDriver 实例,Selenium Manager 会自动处理后续的事情。
<font face="微软雅黑" size="3">import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumManagerExample {
public static void main(String[] args) {
// 不再需要设置 webdriver.chrome.driver 属性
WebDriver driver = new ChromeDriver();
// 打开网页等操作
driver.get("http://example.com");
// 其他测试操作
// 关闭浏览器
driver.close();
}
}</font>
在这个示例中,首先点击链接弹出新窗口,然后通过getWindowHandles获取所有窗口句柄,找到新窗口句柄并切换到新窗口,在新窗口中获取元素文本后关闭新窗口,最后切换回主窗口并关闭主窗口。这一系列操作展示了 Selenium 4 改进后的窗口管理功能在处理多窗口场景中的应用。
(四)更灵活的元素等待
[*]等待机制的增强
[*]Selenium 4 对元素等待机制进行了优化。除了传统的显式等待和隐式等待外,新增了一些等待条件和方法。例如,可以使用untilElementRemoved等待某个元素从页面中消失,这在处理一些动态加载或异步操作后元素消失的场景中非常有用。同时,还可以更精确地设置等待的超时时间和轮询间隔,提高了等待的灵活性和准确性。
[*]代码示例
[*]以下是一个使用untilElementRemoved等待元素消失的示例。假设在一个页面中有一个加载动画元素,当页面数据加载完成后该元素会消失,我们需要等待它消失后再进行后续操作。
<font face="微软雅黑" size="3">import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ElementWaitExample {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "path/to/chrome/driver");
WebDriver driver = new ChromeDriver();
// 打开网页
driver.get("http://example.com");
// 找到加载动画元素
WebElement loadingElement = driver.findElement(By.id("loadingAnimation"));
// 创建 WebDriverWait 对象,设置超时时间为 10 秒,轮询间隔为 500 毫秒
WebDriverWait wait = new WebDriverWait(driver, 10, 500);
// 等待加载动画元素消失
wait.until(ExpectedConditions.invisibilityOf(loadingElement));
// 进行后续操作,如查找其他元素等
// 关闭浏览器
driver.close();
}
}</font>
在上述代码中,通过WebDriverWait和ExpectedConditions.invisibilityOf方法,等待指定的加载动画元素消失后再进行后续操作,确保测试操作在页面稳定状态下进行。(五)对 Shadow DOM 的支持
[*]Shadow DOM 概念与 Selenium 4 的支持
[*]Shadow DOM 是一种用于封装 Web 组件内部结构和样式的技术。在 Selenium 4 之前,处理 Shadow DOM 中的元素比较困难。而 Selenium 4 提供了专门的方法来与 Shadow DOM 中的元素进行交互。可以通过driver.findElement(By.cssSelector("shadow-root-element")).getShadowRoot()方法获取 Shadow DOM 的根元素,然后再在 Shadow DOM 内部使用常规的定位方法来查找元素。
[*]代码示例
[*]假设在一个网页中有一个自定义的 Web 组件,其内部结构使用 Shadow DOM 封装,我们要点击组件内部的一个按钮。
<font face="微软雅黑" size="3">import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ShadowDOMExample {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "path/to/chrome/driver");
WebDriver driver = new ChromeDriver();
// 打开网页
driver.get("http://example.com");
// 找到包含 Shadow DOM 的元素
WebElement shadowHost = driver.findElement(By.id("shadowHostElement"));
// 获取 Shadow DOM 的根元素
WebElement shadowRoot = shadowHost.getShadowRoot();
// 在 Shadow DOM 内部找到按钮元素并点击
WebElement buttonInsideShadowDOM = shadowRoot.findElement(By.cssSelector("button"));
buttonInsideShadowDOM.click();
// 关闭浏览器
driver.close();
}
}</font>Selenium 4 的新特性为自动化测试带来了诸多便利和改进。相对定位器使元素定位更加灵活和稳定,全新的 Selenium Manager 简化了测试环境的搭建,改进的窗口管理方便了多窗口场景的处理,更灵活的元素等待提高了测试的准确性和效率,对 Shadow DOM 的支持则拓展了 Selenium 的应用范围。测试人员应深入学习和掌握这些新特性,将其应用到实际的自动化测试项目中,以提升测试质量和效率,更好地适应现代 Web 应用程序的测试需求。随着技术的不断发展,相信 Selenium 还会继续演进,为自动化测试领域持续注入新的活力。
页:
[1]