为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用java获取IE中新打开的窗口的句柄

无法使用java获取IE中新打开的窗口的句柄

Smart猫小萌 2023-09-27 15:10:42
我单击代码“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

添加这两个之后,驱动程序就能够正确获取窗口的句柄了。


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信