0

这可能是一个菜鸟问题,但我不知道如何确定我正在与之交互的弹出窗口类型,因此我可以获得足够的信息来使用 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);
        }
    }

此代码在此处进行了描述,并且是公认的答案。我还看到了此代码的许多其他类似示例,但是在我的应用程序中,硒测试在线挂起

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

它只是在等待我输入登录信息,直到我手动输入登录信息,测试才会挂起。如果我确实输入了信息,测试将继续。我想让这段代码找到弹出窗口的句柄(并最终)用用户名填充它并传递并单击“确定”。虽然有可能我不是在处理传统的弹出窗口吗?我怎么知道?

此登录按钮是 html 中的以下元素<a href="/trac/login">Login</a>

4

1 回答 1

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);

}

于 2012-12-18T06:35:40.807 回答