我单击代码“Go”中的一个按钮,打开一个新窗口。当我检查任务管理器时,我可以看到 IE 的实例为 2,但getWindowHandles()无法获取新打开的窗口的句柄,仅返回父窗口句柄。我用来执行此操作的代码是:SeleniumUtils.clickOnElement(webDriver, By.xpath("//input[@name='Go' and @value='Go']"), "Click on Go", reporter);SeleniumUtils.waitLoading(SeleniumUtils.WAIT_LONG);List<String> windowsList = new ArrayList<>();String parentWindow = webDriver.getWindowHandle();windowsList.add(parentWindow);String emailWindow = SeleniumUtils.changeDriverToTheNewWindow(webDriver, windowsList, windowsList.size()+1);windowsList.add(emailWindow);为了切换到新窗口,我编写了一个函数:public static String changeDriverToTheNewWindow(WebDriver webDriver, List<String> previousWindows, int numberOfWindows) { try { JavascriptExecutor jsExecuter = (JavascriptExecutor) webDriver; Set<String> windows = Collections.emptySet(); try { WebDriverWait wait = new WebDriverWait (webDriver, 5); wait.until(ExpectedConditions.numberOfWindowsToBe(numberOfWindows)); windows = webDriver.getWindowHandles(); }catch(Exception e) { lLogger.error("Error getting the window handles.", e); windows = webDriver.getWindowHandles(); } for (String windowId : windows) { if (!previousWindows.contains(windowId)) { webDriver.switchTo().window(windowId); jsExecuter.executeScript("window.focus"); //changeDriverToWindow(webDriver, windowId); return windowId; } } } catch (Exception e) { lLogger.error("Error changing driver to the new window!", e); } return null;}打开窗口的 HTML 和 JS 代码是:<td class="xyz-column"><link href="../Content/css/XYZ.css" rel="stylesheet" type="text/css"><script type="text/javascript"> function onMouseOver(control) { control.src = '../Content/images/lookup.png'; } function onMouseOut(control) { control.src = '../Content/images/btn_lookup.png'; }</script>
1 回答

蓝山帝景
TA贡献1843条经验 获得超7个赞
具体地说,就我而言,它是 ...
InternetExplorerOptions options = new InternetExplorerOptions();
options.merge(cap);
WebDriver driver = new InternetExplorerDriver(options);
解决方案 1
ieCapabilities.setCapability("requireWindowFocus", false);
解决方案 2
添加这两个之后,驱动程序就能够正确获取窗口的句柄了。
添加回答
举报
0/150
提交
取消