📅  最后修改于: 2023-12-03 14:41:23.997000             🧑  作者: Mango
在编写 Web 自动化测试脚本时,有时我们需要操作浏览器的多个窗口。这时,就需要使用 getWindowHandle
和 getWindowHandles
方法来获取和管理窗口句柄。
getWindowHandle
方法用于获取当前浏览器窗口的句柄。句柄是一个唯一的标识符,用于标识浏览器中的每个窗口。通常情况下,我们只能同时操作一个浏览器窗口,所以 getWindowHandle
方法返回的是一个字符串,表示当前活动窗口的句柄。
String handle = driver.getWindowHandle();
getWindowHandles
方法用于获取当前浏览器中所有窗口的句柄。该方法返回一个句柄的集合,每个句柄都表示一个窗口。如果有多个窗口打开,则可以使用 getWindowHandles
方法来获取所有窗口的句柄。
Set<String> handles = driver.getWindowHandles();
下面是一个示例,演示如何使用 getWindowHandle
和 getWindowHandles
方法来处理多个浏览器窗口:
// 获取当前窗口的句柄
String parentHandle = driver.getWindowHandle();
// 打开新的窗口
driver.findElement(By.linkText("Open New Window")).click();
// 获取所有窗口的句柄
Set<String> handles = driver.getWindowHandles();
// 切换到新打开的窗口
for (String handle : handles) {
if (!handle.equals(parentHandle)) {
driver.switchTo().window(handle);
break;
}
}
// 在新窗口中进行操作
driver.findElement(By.id("username")).sendKeys("username");
driver.findElement(By.id("password")).sendKeys("password");
// ...
// 切换回原来的窗口
driver.switchTo().window(parentHandle);
// 继续在原窗口中进行操作
// ...
在上述示例中,通过 getWindowHandle
方法获取了当前窗口的句柄,并使用 getWindowHandles
方法获取了所有窗口的句柄。然后通过遍历窗口句柄,切换到新打开的窗口,并在新窗口中进行操作。最后,再切换回原来的窗口,继续在原窗口中进行操作。
注意,getWindowHandles
方法返回的窗口句柄集合是无序的,因此可能需要根据实际情况来选择需要操作的窗口。
getWindowHandle
和 getWindowHandles
方法是处理多个浏览器窗口时非常有用的工具。通过这些方法,我们可以获取和管理窗口句柄,实现在多个窗口之间的切换和操作。在编写 Web 自动化测试脚本时,务必熟练掌握这两个方法的用法,以便更好地处理多窗口情况。