Есть ли поддержка работы с всплывающими диалогами (в частности, загрузка файлов) в С#?
Selenium WebDriver для C# — всплывающие диалоговые окна
Ответы (3)
Для диалогового окна всплывающих окон вы можете использовать предупреждение, чтобы поймать:
IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
Нет, по крайней мере, изначально.
WebDriver взаимодействует только с веб-страницей. Всплывающее диалоговое окно после создания становится доменом операционной системы, а не веб-страницы.
Вы можете обойти диалоговое окно загрузки/выгрузки файла, выполнив POST или GET с содержимым, которое вы извлекаете или отправляете на сервер.
Вы можете использовать такие инструменты, как AutoIt или Windows Automation API, для взаимодействия с другими диалоговыми окнами.
Из часто задаваемых вопросов по WebDriver: WebDriver предлагает возможность работать с несколькими окнами. Это делается с помощью метода "WebDriver.switchTo().window()" для переключения на окно с известным именем. Если имя неизвестно, вы можете использовать "WebDriver.getWindowHandles()" для получения списка известных окон. Вы можете передать дескриптор в "switchTo().window()".
Полный список часто задаваемых вопросов здесь.
Пример от Thoughtworks
String parentWindowHandle = browser.getWindowHandle(); // save the current window handle.
WebDriver popup = null;
Iterator<String> windowIterator = browser.getWindowHandles();
while(windowIterator.hasNext()) {
String windowHandle = windowIterator.next();
popup = browser.switchTo().window(windowHandle);
if (popup.getTitle().equals("Google") {
break;
}
}
Ниже приведен пример, преобразованный из Java в C# (с заменой устаревших методов).
String parentWindowHandle = _browser.CurrentWindowHandle; // save the current window handle.
IWebDriver popup = null;
var windowIterator = _browser.WindowHandles;
foreach (var windowHandle in windowIterator)
{
popup = _browser.SwitchTo().Window(windowHandle);
if (popup.Title == "Google")
{
break;
}
}