这可能是一个菜鸟问题,但我不知道如何确定我正在与哪种类型的弹出窗口进行交互,因此我可以使用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>
答案 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);
}