这是我的配置: Windows 7 VM + Selenium Web驱动程序+ IE 11 + IE驱动程序服务器64位
我有一个奇怪的问题,其中,当代码中遇到click事件时,执行只是暂停而不会继续。我能够通过使用sendKeys(Keys.Enter)而不是点击来克服这个问题。但我在尝试切换到弹出窗口并返回到父框架时看到了相同的行为。
这是我用于切换到子窗口并返回父窗口的代码:
WebDriver popup = null;
String popwin = "";
boolean present;
try {
System.out.println(driver.getCurrentUrl());
String winHandleBefore = driver.getWindowHandle();
for (String winHandle : driver.getWindowHandles()) {
System.out.println("WinHandle : " + winHandle);
popwin = winHandle;
}
popup = driver.switchTo().window(popwin);
Actions action = new Actions(popup); action.moveToElement(popup.findElement(by.id("idContinue")))
.sendKeys(Keys.ENTER).build().perform(); //works fine till above, clicks continue button in popup and the popup closes automatically
driver.switchTo().window(winHandleBefore);
执行在最后一行暂停,Thread继续运行,没有结果,也没有抛出异常。
谢谢!
注意:被测试的应用程序是IE兼容的系统,因此无法在其他浏览器中进行测试。(应用程序甚至不在其他浏览器中加载)
答案 0 :(得分:0)
弹出窗口显示在屏幕上或之前是否执行了此部分代码?
如果在显示弹出窗口后执行此操作,则行:
String winHandleBefore = driver.getWindowHandle();
正在获取弹出窗口的实例,并在单击按钮时关闭弹出窗口,您正在销毁该实例本身。
因此,有两个解决方案可以解决这个问题:
修改现有代码:
WebDriver popup = null;
String popwin = "";
boolean present;
try {
System.out.println(driver.getCurrentUrl());
for (String winHandle : driver.getWindowHandles()) {
System.out.println("WinHandle : " + winHandle);
driver.switchTo().window(winHandle);
Actions action = new Actions(popup);
action.moveToElement(popup.findElement(by.id("idContinue"))).sendKeys(Keys.ENTER).build().perform();
break;
}
这两个技巧肯定会解决你所面临的问题