Selenium WebDriver для C# — всплывающие диалоговые окна

Есть ли поддержка работы с всплывающими диалогами (в частности, загрузка файлов) в С#?


person BadRaabutation    schedule 14.05.2012    source источник


Ответы (3)


Для диалогового окна всплывающих окон вы можете использовать предупреждение, чтобы поймать:

IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
person Jason    schedule 16.05.2012

Нет, по крайней мере, изначально.

WebDriver взаимодействует только с веб-страницей. Всплывающее диалоговое окно после создания становится доменом операционной системы, а не веб-страницы.

Вы можете обойти диалоговое окно загрузки/выгрузки файла, выполнив POST или GET с содержимым, которое вы извлекаете или отправляете на сервер.

Вы можете использовать такие инструменты, как AutoIt или Windows Automation API, для взаимодействия с другими диалоговыми окнами.

person Anders    schedule 15.05.2012

Из часто задаваемых вопросов по 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;
            }
        }
person CIGuy    schedule 15.05.2012