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