Таким образом, проблема многих из этих решений заключается в том, что вы предполагаете, что окно появляется мгновенно (мгновенно ничего не происходит, а в IE все происходит значительно реже).Также вы предполагаете, что до щелчка на элементе будет только одно окно, что не всегда так.Также IE не будет возвращать дескрипторы окна в предсказуемом порядке.Поэтому я бы сделал следующее.
public String clickAndSwitchWindow(WebElement elementToClick, Duration
timeToWaitForWindowToAppear) {
Set<String> priorHandles = _driver.getWindowHandles();
elementToClick.click();
try {
new WebDriverWait(_driver,
timeToWaitForWindowToAppear.getSeconds()).until(
d -> {
Set<String> newHandles = d.getWindowHandles();
if (newHandles.size() > priorHandles.size()) {
for (String newHandle : newHandles) {
if (!priorHandles.contains(newHandle)) {
d.switchTo().window(newHandle);
return true;
}
}
return false;
} else {
return false;
}
});
} catch (Exception e) {
Logging.log_AndFail("Encountered error while switching to new window after clicking element " + elementToClick.toString()
+ " seeing error: \n" + e.getMessage());
}
return _driver.getWindowHandle();
}