0

在我的代码中,我到达了一个使用 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){

由于弹出窗口是主窗口本身的一部分,即为什么我无法通过 getWindowHandle(); 获得正确的大小;

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

我可以采取任何解决方法来仅获取弹出页面的驱动程序吗?

保存代码是通用的,这在本参考中并不重要。我想要的只是获取弹出页面的驱动程序

4

1 回答 1

0

单击链接后,您需要等到 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;
      }
    };
}

我想要的只是获取弹出页面的驱动程序

编辑:主窗口的驱动程序是弹出窗口的驱动程序,因为弹出窗口本身是主窗口的一部分。唯一的例外是,如果弹出窗口存在于框架中,那么您需要切换到框架,然后您可以对弹出窗口中存在的元素执行操作。

编辑:如果我理解正确,您想获取弹出窗口的页面源。由于弹出窗口是主窗口的一部分。我会做的是

popup.getAttribute("innerHTML"); 其中 popup 是 WebElement 类型。

例如,如果主窗口的 HTML 像

 <html>
<head>
.....
</head>
<body>
...
...
..
<div id = popup> 
//html elements present in popup
</div>
...
..
</head>
</html>

然后

WebElement popup = driver.findElement(By.xpath("//div[@id='popup']"));

String htmlInsidePopup = popup.getAttribute("innerHTML");
System.out.println(htmlInsidePopup);

将解决问题。

于 2013-09-12T14:40:19.600 回答