确定弹出/新窗口类型,以便我可以在selenium webdriver中与它进行交互

时间:2012-12-17 20:02:27

标签: selenium junit selenium-webdriver popupwindow

这可能是一个菜鸟问题,但我不知道如何确定我正在与哪种类型的弹出窗口进行交互,因此我可以使用selenium webdriver自动获取它。

我认为它只是一个弹出窗口,但是当使用(似乎是)处理弹出窗口的标准方法时,我的Selenium JUnit测试会冻结实例,点击该按钮。

    String mainWindowHandle = driver.getWindowHandle();

    //P2: Click on the element that opens the popup
    driver.findElement(By.xpath("//a[contains(text(),'Login')]")).click();

    Set s=driver.getWindowHandles();

    Iterator ite=s.iterator();
    while(ite.hasNext()){
        System.out.println("Current ite = " + ite.next().toString());
        String popupHandle=ite.next().toString();
        if(!popupHandle.contains(mainWindowHandle)){
            driver.switchTo().window(popupHandle);
            System.out.println("reached popup window? Now perform the login procedure before returning to the original window");
            driver.switchTo().window(mainWindowHandle);
        }
    }

此代码was described here是接受的答案。我还看到了许多其他类似的代码示例,但是在我的应用程序中,selenium测试挂起了

driver.findElement(By.xpath("//a[contains(text(),'Login')]")).click();

它只是等我输入登录信息,直到我手动执行测试挂起。如果我输入信息,测试继续。我想让这段代码找到弹出窗口的句柄(并最终)用用户名填充它并传递并点击'ok'。虽然有可能我没有处理传统的弹出窗口吗?我该怎么说?

此登录按钮是html <a href="/trac/login">Login</a>

中的以下元素

1 个答案:

答案 0 :(得分:0)

使用selenium RC时遇到了同样的问题。我使用了如下所示的try catch块来帮助我解决问题。 希望它会有用。

// webdriver代码,直到点击弹出链接

try {
      selenium.waitForPopUp("myWindow","3000");
        }



    catch(Exception e){
        selenium.selectPopUp("myWindow");
        selenium.windowFocus();

//需要在弹出窗口中执行的活动***

//将焦点带回主窗口的代码

 String[] winFocus; 
 String winTitle;
 winFocus = selenium.getAllWindowTitles();
 winTitle = winFocus[0];
 selenium.selectWindow(winTitle);

}