无法使用WebDriver切换到其他窗口句柄

时间:2014-02-07 18:48:26

标签: java selenium browser selenium-webdriver

所以我有一个IE驱动程序的代码(该网站仅适用于IE ...):

PrintStream out;
try {
    out = new PrintStream(new FileOutputStream("output.txt"));
    System.setOut(out);
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
System.out.println("Main Handle: " + driver.getWindowHandle());

element = driver.findElement(By.id("lnk"));
element.click();

//try {
//  Thread.sleep(1000);
//} catch (InterruptedException e) {
//  // TODO Auto-generated catch block
//  e.printStackTrace();
//}

try{
    for(String winHandle : driver.getWindowHandles()){
        System.out.println(winHandle);
        driver.switchTo().window(winHandle);
    }
}
catch(Exception e){
    System.out.println("na bro, unlucky");
}

System.out.println("end");

System.out.println(driver.getPageSource());

应该有两个窗口句柄,它们似乎来自println。但它只能切换到主窗口,弹出的窗口无法切换到。即使我同时运行程序,也有两种可能的输出。这只是我得到的机会。第一个输出是:

主要句柄:cd484ff9-3dbd-487d-bfa3-805f19b1ff9d
cd484ff9-3dbd-487d-bfa3-805f19b1ff9d
005d28b9-1c4d-40CF-95ab-1782f2dc53fd

导致错误:

线程“main”中的异常org.openqa.selenium.NoSuchWindowException:无法获取浏览器(警告:服务器未提供任何堆栈跟踪信息)

这意味着它能够切换但是它不存在????这真的很奇怪。第二个输出可能是:

主要处理:cd9fe661-7257-48ff-93c1-17c89b1f9443
cd9fe661-7257-48ff-93c1-17c89b1f9443
2d96e296-47a2-4cd1-b994-89a2cbe4f045
呐,不幸的

然后继续打印出主句柄的页面源。我不明白为什么它不能抓住第二个手柄?我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试在切换窗口的代码之前和之后放置thread.sleep(10000)

try {
    Thread.sleep(10000);

    for(String winHandle : driver.getWindowHandles()){
        System.out.println(winHandle);
        driver.switchTo().window(winHandle);
    }

    Thread.sleep(10000);
}catch(InterruptedException e) {
    e.printstacktrace();
}catch(Exception ee){
    System.out.println("na bro, unlucky");
}

System.out.println("end");
System.out.println(driver.getPageSource());

还尝试使用driver.getTitle()获取当前窗口的标题,以查看切换是否成功。