gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:47:06 30 4
gpt4 key购买 nike

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

<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>

最佳答案

我找到了解决问题的方法。只需确保遵循 Solution 中看到的所有步骤即可。由@DebanjanB 回答。

更具体地说,就我而言,它是...
InternetExplorerOptions 选项 = new InternetExplorerOptions();
选项.merge(cap);
WebDriver 驱动程序 = new InternetExplorerDriver(options);

如您在 Solution 1 中看到的那样和

ieCapability.setCapability("requireWindowFocus", false);

如您在 Solution 2 中看到的那样

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

关于java - 无法使用java获取IE中新打开的窗口的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58235349/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com