繁体   English   中英

getWindowHandles 方法使用 MS EDGE IE11 和 Selenium 版本 4.1.2 返回错误数量的 window 句柄

[英]getWindowHandles method returns incorrect number of window handles using MS EDGE IE11 and Selenium version 4.1.2

最近,我将我的 Selenium 版本从 2.53 升级到 4.1.2,以便能够在 MS EDGE IE11 上测试我们的应用程序。 但是我们在使用 selenium-4.1.2 检索在 MS EDGE IE11 中打开的 windows 数量时间歇性地面临问题

还有其他人遇到过与 Selenium-4.1.2 类似的问题吗?

下面是我在 MS EDGE IE11 上试过的一段代码。 有时我们可以看到它返回正确的号码。 windows 但有时不是。 在检索号码 windows 之前,我们还使用了足够的等待时间。

注意 - 这在带有 Selenium-4.1.2 的 IE11 浏览器上工作得很好

int noOfWindowsOpen = driver.getWindowHandles().size();

期望:它应该总是返回正确的值 no。 windows 打开。

打开新选项卡 / window后,在计算WindowHandles的数量之前,您需要为numberOfWindowsToBe()引入WebDriverWait ,如下所示:

driver.get("http://www.google.com");
((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
new WebDriverWait(driver, 10).until(ExpectedConditions.numberOfWindowsToBe(2));
int noOfWindowsOpen = driver.getWindowHandles().size();

这似乎是自动化 Edge IE 模式的一个已知限制 它说:

为确保新的 window 已成功创建并且 IEDriver 已检测到它,您必须不断检查Get Window Handles命令的结果,直到它包含新的 window 的句柄。

你可以试试里面的示例代码:

int initialHandleCount = driver.getWindowHandles().size();
driver.findElement(By.id("<Id of the button that will open a new window>")).click();        
Set<string> newHandles = driver.getWindowHandles();
while (newHandles.size() == initialHandleCount) {
    newHandles = driver.getWindowHandles();
}

我找到了解决上述问题的方法。

执行之前,请确保ME Edge、IE和IE Driver的所有实例都已关闭。 如果没有,请从任务管理器中强制杀死它们,然后重新运行测试脚本。 脚本将正确识别新的 window。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM