У Selenium есть «проблема» с IE, когда новые окна могут не появиться в списке WindowHandles
сразу.
Решение может быть либо
- wait a фиксированное количество времени перед вызовом d
river.WindowHandles
или
- используйте
WebDriverWait
класс для ожидания числаэлементы под WindowHandles
для изменения
Я думаю, что второй является более надежным.Вот краткая реализация:
public void LaunchNewWindow(IWebElement element)
{
int windowsBefore = driver.WindowHandles.Count;
element.Click();
TimeSpan timeout = new TimeSpan(0, 0, 10);
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.Until((_driver) =>
{
return _driver.WindowHandles.Count != windowsBefore;
//optionally use _driver.WindowHandles.Count > windowsBefore
});
}
Теперь вы можете использовать функцию следующим образом:
IWebElement clickMe = //some element that launches a new window
LaunchNewWindow(clickMe);
foreach (var item in driver.WindowHandles)
{
//etc.
}