Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Selenium切换到新窗口?_Java_Selenium - Fatal编程技术网

Java 如何使用Selenium切换到新窗口?

Java 如何使用Selenium切换到新窗口?,java,selenium,Java,Selenium,在我的代码中,我使用selenium访问了一个页面,其中有一个链接在同一页面上作为弹出窗口打开,但该链接正在使用,因此它就像在新窗口中打开的新页面一样 我可以单击该链接并打开指向的页面,但当我执行driver.getWindowHandles()时,它返回的大小仅为1,而不是2,因此我无法切换到新窗口 以下是我正在使用的代码: String parent = driver.getWindowHandle(); driver.findElement(By.xpath("//a[@i

在我的代码中,我使用selenium访问了一个页面,其中有一个链接在同一页面上作为弹出窗口打开,但该链接正在使用,因此它就像在新窗口中打开的新页面一样

我可以单击该链接并打开指向的页面,但当我执行driver.getWindowHandles()时,它返回的大小仅为1,而不是2,因此我无法切换到新窗口

以下是我正在使用的代码:

    String parent = driver.getWindowHandle();
    driver.findElement(By.xpath("//a[@id='abc']")).click();
    // after clicking on the link
    try{
    Thread.sleep(1000);

    Set<String> availableWindows = driver.getWindowHandles();//this set size is
   // returned as 1 and not 2
    String newWindow = null;
    for (String window : availableWindows) {
        if (!parent.equals(window)) {
            newWindow = window;
        }
    }
    assertNotNull(newWindow);

    // switch to new window
    driver.switchTo().window(newWindow);
    // do assert the elements in the new window
    // and then close the new window
    driver.close();
    // switch to parent
    driver.switchTo().window(parent);
    // close main window
    driver.close();}
    catch(Exception e){
String parent=driver.getWindowHandle();
findElement(By.xpath(“//a[@id='abc']”)。单击();
//点击链接后
试一试{
睡眠(1000);
Set availableWindows=driver.getWindowHandles();//此集合大小为
//返回为1而不是2
字符串newWindow=null;
用于(字符串窗口:可用窗口){
如果(!parent.equals(窗口)){
新窗口=窗口;
}
}
assertNotNull(新窗口);
//切换到新窗口
driver.switchTo().window(newWindow);
//在新窗口中断言元素
//然后关闭新窗口
driver.close();
//切换到父级
driver.switchTo()窗口(父窗口);
//关闭主窗口
driver.close();}
捕获(例外e){
由于弹出窗口是主窗口本身的一部分,即,为什么我不能通过执行getWindowHandle()获得正确的大小

但我的要求是只保存弹出页面。 现在,保存代码正在保存母版页详细信息以及弹出内容,因为每次调用母版页驱动程序时

是否有任何解决办法,我可以做的只是获得弹出页面的驱动程序

保存代码是通用的,这在本参考中并不重要。
我只想在单击链接后获得弹出页面的驱动程序,您需要等待Selenium意识到现在总共有2个窗口

String parent = driver.getWindowHandle();
    driver.findElement(By.xpath("//a[@id='alertHistoryLink']")).click();
    // after clicking on the link
    // call the method numberOfWindowsToBe as follows
    WebDriverWait wait = new WebDriverWait(driver, 15, 100);
    wait.until(numberOfWindowsToBe(2));

public static ExpectedCondition<Boolean> numberOfWindowsToBe(final int numberOfWindows) {
    return new ExpectedCondition<Boolean>() {
      @Override
      public Boolean apply(WebDriver driver) {
                driver.getWindowHandles();
        return driver.getWindowHandles().size() == numberOfWindows;
      }
    };
}

将解决问题。

不工作。它在进入NumberOfWindowTobe方法之前终止。它仍然返回大小为1@user2478636这只意味着弹出窗口不是一个窗口。它属于同一个页面。不要在弹出窗口上进行任何切换和执行任何您想要的操作。将弹出窗口的html添加到问题a中在弹出窗口中指定要执行的操作。
 <html>
<head>
.....
</head>
<body>
...
...
..
<div id = popup> 
//html elements present in popup
</div>
...
..
</head>
</html>
String htmlInsidePopup = popup.getAttribute("innerHTML");
System.out.println(htmlInsidePopup);