猿问

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

我单击代码“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>



Smart猫小萌
浏览 95回答 1
1回答

蓝山帝景

具体地说,就我而言,它是 ... InternetExplorerOptions options = new InternetExplorerOptions(); options.merge(cap); WebDriver driver = new InternetExplorerDriver(options);解决方案 1ieCapabilities.setCapability("requireWindowFocus", false);解决方案 2添加这两个之后,驱动程序就能够正确获取窗口的句柄了。
随时随地看视频慕课网APP

相关分类

Java
我要回答