1. 引言
Selenium WebDriver 是一个广泛用于自动化网络测试的强大工具,它拥有众多功能。在自动化网页操作中,打开新标签页是一个常见的动作。这在多种场景下都很有用,例如测试多页面工作流程、验证在新标签页中打开的外部链接、交互弹出窗口,以及在并行测试中模拟多个用户同时与应用的不同部分交互。
早期的解决方案是自定义脚本,比如发送 "Ctrl" + "T" 的组合键,但这种做法通常会因为浏览器和操作系统差异导致结果不一致。
在这个教程中,我们将探讨使用 Selenium 4 中引入的稳定方法来打开新标签页——newWindow()
API,以及JavaScript代码执行。
2. 使用 newWindow()
API
Selenium 4 引入了一个强大且灵活的 API 方法 newWindow()
,用于在当前浏览器会话中创建新的窗口。它允许我们自动打开新浏览器标签页,并切换到该标签页。这个方法接受一个 WindowType
参数,如 WINDOW
或 TAB
,然后创建它。语法非常直观:
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 上找到。