【发布时间】:2017-06-26 11:49:44
【问题描述】:
美好的一天。我遇到了无法使用 Selenium WebDriver 中的循环在选项卡之间切换的问题。我可以一次执行此操作,但我需要在循环中重复使用代码。
错误来了:
"Exception in thread" main "org.openqa.selenium.NoSuchWindowException: Unable to locate window"
我的代码可以找到所有元素,在新选项卡中打开一个链接,然后关闭它。但是,它不能对下一个元素再次执行此操作。
这是我的代码(我使用的是 Firefox):
List<WebElement> allElements = driver.findElements(By.className("_4zhc5"));
int s = allElements.size();
System.out.println("total users to check: " + allElements.size());
for (int i = 0; i < s; i++) {
allElements = driver.findElements(By.className("_4zhc5"));
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN);
allElements.get(i).sendKeys(selectLinkOpeninNewTab);
for (String winHandle : driver.getWindowHandles()) {
driver.switchTo().window(winHandle);
Thread.sleep(3000);
}
driver.close();
Thread.sleep(2000);
}
我还使用jsfiddle 创建了一个原型页面。该错误出现在第二次尝试执行代码时。只是脚本没有点击另一个名为“可爱”的元素
感谢观看!
【问题讨论】:
-
我认为问题在于,您正在获取所有窗口(比如 5 个)并切换到某个窗口,做一些事情并关闭该窗口。现在我们将只有 4 个窗口,但列表仍然有 5 个窗口。在第二次迭代脚本试图切换到已删除的窗口并抛出错误
-
我认为你是对的。我不知道如何解决它,这似乎很困难。
-
在第一次处理第一个元素后,在第一个选项卡中,您可以在不关闭该选项卡的情况下继续处理下一个元素吗?否则,我们需要再次执行窗口句柄,以便它不会有已删除的选项卡
-
我必须在执行一些操作后立即关闭卡,该列表可能包含例如 50 个链接。这种情况下如何再次使用windowshandles?
标签: java selenium selenium-webdriver