Edge浏览器107版本中getWindowHandles方法异常求助
问题描述
应用登录流程
- 仅支持Edge浏览器,登录流程:输入账号密码点击登录后,弹出新窗口,同时显示**“登录成功”警告弹窗**(带确定按钮),旧窗口变为空白
- 点击确定/回车后,新窗口加载首页,旧窗口保持空白
自动化测试异常情况
- Edge 105及以前版本:使用
getWindowHandles()获取新窗口句柄并处理警告弹窗,逻辑正常运行 - Edge 107版本后:
getWindowHandles()陷入无限循环导致测试超时 - 已尝试的解决方法:用Robot类模拟回车、使用匹配版本的EdgeDriver 107,问题仍存在
问题代码
for(String wh : driver.getWindowHandles()){ driver.switchTo().window(wh); }
解决方案
1. 优化窗口句柄获取逻辑,避免无限循环
原代码没有判断窗口数量变化,也没限制等待时间,新版Edge可能在窗口创建/句柄返回上有延迟或异常,建议添加显式等待+数量判断:
// 记录初始窗口数量 Set<String> initialHandles = driver.getWindowHandles(); // 显式等待新窗口出现,最多等10秒 WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.numberOfWindowsToBe(initialHandles.size() + 1)); // 获取所有窗口句柄,切换到新窗口 Set<String> allHandles = driver.getWindowHandles(); allHandles.removeAll(initialHandles); String newWindowHandle = allHandles.iterator().next(); driver.switchTo().window(newWindowHandle); // 处理警告弹窗 wait.until(ExpectedConditions.alertIsPresent()); driver.switchTo().alert().accept();
2. 调整EdgeDriver启动参数,规避窗口句柄异常
新版Edge在多窗口处理上有行为变化,添加以下启动参数尝试:
EdgeOptions options = new EdgeOptions(); // 禁用弹出窗口阻止程序,避免新窗口被拦截 options.addArguments("--disable-popup-blocking"); // 禁用默认浏览器检查,减少干扰 options.addArguments("--no-default-browser-check"); // 启用自动化扩展,确保Driver与浏览器通信正常 options.setCapability("useAutomationExtension", true); EdgeDriver driver = new EdgeDriver(options);
3. 先处理警告弹窗,再切换窗口
原流程中弹窗和新窗口同时出现,新版Edge可能弹窗优先级更高,导致窗口句柄获取异常,尝试先处理弹窗再切换窗口:
// 点击登录后,先等警告弹窗出现并处理 WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.alertIsPresent()); driver.switchTo().alert().accept(); // 再等新窗口出现并切换 wait.until(ExpectedConditions.numberOfWindowsToBe(2)); Set<String> allHandles = driver.getWindowHandles(); for(String handle : allHandles) { if(!handle.equals(driver.getWindowHandle())) { driver.switchTo().window(handle); break; } }
Edge 107版本已知问题说明
Edge 107版本在WebDriver交互的多窗口处理上存在部分兼容性问题:
- 部分场景下,新窗口创建后,
getWindowHandles()不会立即返回更新后的句柄集合,导致循环或等待超时 - 警告弹窗与新窗口同时触发时,Driver的上下文切换逻辑出现冲突,无法正确识别窗口句柄
这些问题在Edge 108及以上版本中已有修复,建议升级浏览器到最新稳定版,同时同步更新EdgeDriver版本。
内容的提问来源于stack exchange,提问作者Akshay Kane
相关产品推荐
相关产品推荐

