1. 引言

Selenium WebDriver 是一个广泛用于自动化网络测试的强大工具,它拥有众多功能。在自动化网页操作中,打开新标签页是一个常见的动作。这在多种场景下都很有用,例如测试多页面工作流程、验证在新标签页中打开的外部链接、交互弹出窗口,以及在并行测试中模拟多个用户同时与应用的不同部分交互。

早期的解决方案是自定义脚本,比如发送 "Ctrl" + "T" 的组合键,但这种做法通常会因为浏览器和操作系统差异导致结果不一致。

在这个教程中,我们将探讨使用 Selenium 4 中引入的稳定方法来打开新标签页——newWindow() API,以及JavaScript代码执行

2. 使用 newWindow() API

Selenium 4 引入了一个强大且灵活的 API 方法 newWindow(),用于在当前浏览器会话中创建新的窗口。它允许我们自动打开新浏览器标签页,并切换到该标签页。这个方法接受一个 WindowType 参数,如 WINDOWTAB,然后创建它。语法非常直观:

driver.switchTo().newWindow(WindowType.TAB);

3. 使用 JavaScript

另一种通过 Selenium WebDriver 打开新标签页的方法是执行 JavaScript 代码。这涉及到使用 JavascriptExecutor 接口的 executeScript() 方法,它可以让我们直接在浏览器中运行 JavaScript 代码。当我们需要对新标签页有更多控制,比如指定要打开的 URL 时,window.open() 脚本就很有用。

以下是使用这种方法打开新标签页的示例:

((JavascriptExecutor) driver).executeScript("window.open()");

以及带有 URL 打开新标签页的示例:

((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");

需要注意的是,在调用 window.open() 方法后,驱动程序仍然会聚焦在原始标签页上。为了与新标签页上的元素进行交互,我们需要使用 driver.switchTo().window() 方法将驱动器的焦点切换到那个标签页。

这里有一个在使用 JavaScript 打开新标签页后切换到它的示例:

String newTab = driver.getWindowHandles()
  .stream()
  .filter(handle -> !handle.equals(originalTab))
  .findFirst()
  .get();
driver.switchTo().window(newTab);

4. 总结

在这篇文章中,我们探讨了两种使用 Selenium 打开新标签页的方法:Selenium 4 中的 newWindow() 方法和通过 JavaScript 执行的 window.open() 方法。

newWindow() 方法是 Selenium 4 中引入的新 API,它使得创建新标签页或窗口变得简单易懂。另一方面,通过 JavaScript 执行 window.open() 提供了对新标签页打开方式更大的控制,适用于早期版本的 Selenium。然而,它可能需要更多的代码,并且对于初学者来说可能更难使用。

如往常一样,代码示例可在 GitHub 上找到。