driver.findElement(By.linkText("Click me")).click();// 当到达这行代码时,会打开一个弹出窗口。
System.out.println("点击我后"); // 弹出窗口打开后,这行代码永远不会执行。
这行代码永远不会执行,因为进程正在等待处理弹出窗口。
getWindowHandles() 在这种情况下可以正常工作。
例子:
//handle of the master window before clicking the link
String master = driver.getWindowHandle();
driver.findElement(By.linkText("Click me")).click();
//logic for waiting for the popup, checking the size to become greater than 1 or breaking after sometime to avoid the infinite loop.
int timeCount = 1;
do
{
driver.getWindowHandles();
Thread.sleep(200);
timeCount++;
if ( timeCount > 50 )
{
break;
}
}
while ( driver.getWindowHandles().size == 1 );
//Assigning the handles to a set
Set<String> handles = driver.getWindowHandles();
//Switching to the popup window.
for ( String handle : handles )
{
if(!handle.equals(master))
{
driver.switchTo().window(handle);
}
}
现在驱动程序切换到弹出窗口。如果弹出窗口有一个框架,那么您需要在识别其中的元素之前切换到该框架。