Selenium / WebDriver - 处理有时只存在的弹出窗口?

时间:2013-05-03 16:43:38

标签: java popup selenium-webdriver

我是Selenium / webdriver的新手。我写了一个运行多次迭代的测试用例。在第一个上面会出现一个弹出窗口。但是,在后续迭代中,弹出窗口不存在。如何重新编写此代码以便在继续执行下面的代码之前检查弹出窗口?感谢

    String Parentwindow = oWD.getWindowHandle();

    //Click Search button  -- This will cause the pop-up
    oWD.findElement(By.id("uw_fc_sub_anc")).click();
    Thread.sleep(1000);


    for(String ChildWindow : oWD.getWindowHandles())
    {
        oWD.switchTo().window(ChildWindow);
    }
    oWD.close();
    oWD.switchTo().window(Parentwindow);

3 个答案:

答案 0 :(得分:1)

我可能会将其分解为辅助方法,该方法执行如下操作:

public String clickAndFindPopup(WebDriver driver, By locator) {
    // Get the original list of handles to evaluate if a popup
    // needs to be handled.
    List<String> existingHandles = driver.getWindowHandles();

    //Click Search button  -- This will cause the pop-up
    driver.findElement(locator).click();
    Thread.sleep(1000);

    List<String> windowHandles = driver.getWindowHandles();
    windowHandles.removeAll(existingHandles);

    if (windowHandles.size() > 0) {
        return windowHandles.get(0);
    }

    return "";
}

然后你可以这样做:

String popupHandle = clickAndFindPopup(driver, By.id("uw_fc_sub_anc"));
if (!popupHandle.equals("")) {
    String currentHandle = driver.getWindowHandle();
    driver.switchTo().window(popupHandle);
    driver.close();
    driver.switchTo().window(currentHandle);
}

这里的缺点是,如果你真的只想到第一次迭代的弹出窗口,你可能会忽略一个不应该出现的弹出窗口,因为只要找到弹出窗口就会盲目关闭弹出窗口。一个更好的方法是知道您希望浏览器在自动化状态时所处的状态,并在其上声明。

答案 1 :(得分:0)

我使用try catch来处理“可能的通知”。我捕获了由非现有元素生成的两个可能的异常。这是C#BTW:

            public void ClosePossibleRandomNotification()
        {
            bool exists=false;
            try
            {
                Browser.Driver.FindElement(By.XPath("..."));
                exists = true;
            }

            catch (ElementNotVisibleException)
            {
                exists = false;
            }

            catch (NoSuchElementException)
            {
                exists = false;
            }

            if (exists){
                try
                {
                    //close the pop up
                }
                catch (ElementNotVisibleException)
                {
                    exists = false;
                }

            }
        }

答案 2 :(得分:0)

尝试创建一个布尔函数并使用try catch来处理弹出窗口