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

无法使用java获取IE中新打开窗口的句柄,java,selenium,internet-explorer,Java,Selenium,Internet Explorer,我正在点击代码“Go”中的一个按钮,打开一个新窗口。 当我检查任务管理器时,我可以看到IE的实例为2,但是getWindowHandles()无法获取新打开窗口的句柄,而只是返回父窗口句柄 我使用的代码是: SeleniumUtils.clickOneElement(webDriver,By.xpath(//input[@name='Go'和@value='Go']),“Click on Go”,reporter); Seleniumultils.waitLoading(Seleniumulti

我正在点击代码“Go”中的一个按钮,打开一个新窗口。 当我检查任务管理器时,我可以看到IE的实例为2,但是
getWindowHandles()
无法获取新打开窗口的句柄,而只是返回父窗口句柄

我使用的代码是:

SeleniumUtils.clickOneElement(webDriver,By.xpath(//input[@name='Go'和@value='Go']),“Click on Go”,reporter);
Seleniumultils.waitLoading(Seleniumultils.WAIT_LONG);
List windowsList=new ArrayList();
字符串parentWindow=webDriver.getWindowHandle();
windowsList.add(父窗口);
字符串emailWindow=SeleniumUtils.changeDriverToTheNewWindow(webDriver、windowsList、windowsList.size()+1);
windowsList.add(emailWindow);
为了切换到新窗口,我编写了一个函数:

公共静态字符串转换器驱动程序新窗口(WebDriver WebDriver,列出以前的窗口,int numberOfWindows){
试一试{
JavascriptExecutor jsExecuter=(JavascriptExecutor)webDriver;
设置windows=Collections.emptySet();
尝试
{
WebDriverWait wait=新的WebDriverWait(webDriver,5);
等待.直到(预期条件.numberOfWindowsToBe(numberOfWindows));
windows=webDriver.getWindowHandles();
}捕获(例外e){
错误(“获取窗口句柄时出错。”,e);
windows=webDriver.getWindowHandles();
}
用于(字符串windowId:windows){
如果(!previousWindows.contains(windowId)){
webDriver.switchTo().window(windowId);
jsExecuter.executeScript(“window.focus”);
//changeDriverToWindow(webDriver,windowId);
返回windowId;
}
}
}捕获(例外e){
错误(“将驱动程序更改为新窗口时出错!”,e);
}
返回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>

<span class="xyz-link" id="body_XYZSelector_XYZLookup_LookupName" style="width: 175px; height: 18px; display: inline-block;" onclick="OpenXYZ(GetCurrentLookupId(this),'42e7a262-36ef-e911-80f1-005056aea4ce','10001'); return false;"> SHARANA </span>
<img class="xyz-lookup" id="body_XYZSelector_XYZLookup_LookupImage" onmouseover="onMouseOver(this);" onmouseout="onMouseOut(this);" onclick="OpenLookUp(this);" alt="Browse" src="../Content/images/btn_lookup.png" entitytype="xyz">

<input name="ctl00$body$XYZSelector$XYZLookup$LookupHiddenId" id="body_XYZSelector_XYZLookup_LookupHiddenId" type="hidden" value="56765">

<input name="ctl00$body$XYZSelector$XYZLookup$LookupHiddenName" id="body_XYZSelector_XYZLookup_LookupHiddenName" type="hidden" value="SHARANA">

<input name="ctl00$body$XYZSelector$XYZLookup$LookupHiddenId" id="body_XYZSelector_XYZLookup_LookupHiddenId" type="hidden" value="fd878f2b-90a2-4bf0-8a00-daa007b64b7d">


</td>

MouseOver(控制)功能{
control.src='../Content/images/lookup.png';
}
onMouseOut功能(控制){
control.src='../Content/images/btn_lookup.png';
}
莎拉娜

我找到了解决问题的方法。只要确保按照@DebanjanB所回答的步骤进行操作即可

更具体地说,在我的情况下,它是
。。。
InternetExploreProptions选项=新建InternetExploreProptions();
期权。合并(cap);
WebDriver驱动程序=新的InternetExplorerDriver(选项)

正如你在和上看到的

ieCapabilities.setCapability(“requireWindowFocus”,false)

正如你在


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

在使用getWindowHandles之前先等待一段时间。。先用线试试。sleep@Shubham我尝试了
Thread.sleep(1000)
之前的
getwindowHandles()
仍不工作。尝试更新您的iedriver,可能是版本问题then@ShubhamJain我不认为版本是个问题,因为我可以使用相同的窗口在其他窗口之间成功切换。是否尝试调试代码并验证是否获得正确的窗口句柄?如果没有,你可以试一试。那个窗口需要更多的时间才能完全加载吗?如果是这样的话,试着增加一些额外的时间来检查它是否有帮助。您说过,您可以切换到其他窗口。那么这些窗户之间有什么区别吗?让我们知道这可能有助于缩小问题的范围。