我在这里有一个问题,请您解释一下。
为什么在打开第二个和第三个窗口的过程中,我们按照下面的方法调用getWindowHandles
win = driver.getWindowHandles();
iterate = win.iterator();
first_window = iterate.next();
System.out.println(first_window); // first handle
second_window = iterate.next();
System.out.println(second_window); // second handle
在第三个窗口操作期间我们不能直接调用以下内容
String Third_window = iterate.next();
System.out.println(Third_window);
driver.switchTo().window(Third_window);
答案 0 :(得分:0)
每当您在Web应用程序中浏览多个窗口时,我们都需要使用getWindowHandles()方法处理多个窗口。该窗口将返回每个窗口的唯一字母数字ID(字符串对象),这些窗口是通过使用Webdriver对象的任何链接/按钮单击而打开,关联或实例化的。
getWindowHandles()返回所有当前窗口的窗口句柄列表。
因此,每当您在驱动程序对象上调用getWindowHandles()时。它存储了所有打开的窗口的唯一窗口句柄,包括父窗口句柄。您可以在内部循环中逐个切换到每个窗口,并查找特定的Web元素,如果找到,则可以在该窗口上工作(在您的第3个窗口中)。这样一来,您将确保您的代码将在正确的窗口上运行,而不仅仅是基于假定的窗口编号。此外,您还需要存储父窗口句柄,以便在其他窗口上完成工作后可以切换回去。 / p>
代码:
String parentWindowHandle = driver.getWindowHandle();
Set<String> childWindows = driver.getWindowHandles();
Iterator<String> iterator = childWindows.iterator();
while(iterator.hasNext())
{
String child = iterator.next();
if(!child.equalsIgnoreCase(parentWindowHandle))
{
driver.switchTo().window(child);
try
{
if (driver.findElement(By.id("id_of_some_element_on_that_window")).isDisplayed())
{
break;
}
}
catch(Exception e) // you can catch the specific exoection NoSuchElement or other
{
System.out.println("Element not found."+e.getMessage());
}
}
}
// rest of code to work on desired window
driver.switchTo().window(parentWindowHandle);
希望这会有所帮助:)