当父窗口关闭时,无法在selenium中读取子窗口元素

时间:2015-08-08 14:14:17

标签: java selenium

我正在使用selenium自动化。我已编码登录页面,它工作正常。
结果登录并打开了新子窗口,父窗口关闭。

由于我的网络驱动程序停止并导致异常 线程main org.openqa.selenium.NoSuchWindowException中的例外:

  

找不到窗口(警告:服务器未提供任何堆栈跟踪信息)

请帮忙

2 个答案:

答案 0 :(得分:1)

Selenium保留一个窗口(句柄)列表。 webdriver需要指向正确的句柄。当窗口关闭时,其句柄将被删除,您的驱动程序现在将指向不再存在的内容。

可能,您必须明确切换窗口以将驱动程序指向正确的窗口句柄。也许这可能会有所帮助:

  1. Switch between two browser windows using selenium webdriver
  2. Selenium python bindings: Moving between windows and frames
  3.   

    “结果打开了新的子窗口,关闭了父窗口”

    (1)下面的代码向您展示了如何检索窗口句柄列表,并根据其标题检索正确的句柄。

    private void handleMultipleWindows(String windowTitle) {
            Set<String> windows = driver.getWindowHandles();
    
            for (String window : windows) {
                driver.switchTo().window(window);
                if (driver.getTitle().contains(windowTitle)) {
                    return;
                }
            }
        }
    

    您可以使用该功能(或类似的功能)来检索新窗口。从您提供的代码中,这将给出:

    // Entering the credentials in the login window.
    driver.findElement(By.id(txtUserId)).clear();
    driver.findElement(By.id(txtUserId)).sendKeys(poovan);
    driver.findElement(By.id(txtPassword)).clear();
    driver.findElement(By.id(txtPassword)).sendKeys(welcome1);
    driver.findElement(By.id(btnSubmit)).click();
    // Here the login window gets closed, handler to that window disappears, and driver becomes stale.
    // So we need update the driver to point to the new window
    handleMultipleWindows("The title of my new window");
    driver.findElement(By.name(bono)).sendKeys(080);
    

答案 1 :(得分:0)

请使用以下代码。它肯定会起作用。

String parentWindow = driver.getWindowHandle();
        Set<String> handles2 = driver.getWindowHandles();
        for (String windowHandle : handles2) {
            if (!windowHandle.equals(parentWindow)) {
                driver.switchTo().window(windowHandle);
            }
        }