WebDriver: Как работать с диалоговыми окнами (C#)

Для перехвата диалоговых окон (Alert, Prompt) используется команда SwitchTo().Alert(). Данный метод возвращает объект типа Alert, с которым можно выполнять требуемы операции. Мы можем получить текст Alert-а, можем закрыть Alert, можем нажать клавишу Ok или Cancel. Исключение NoAlertPresentException возникает если перехватываемый Alert не был найден.

Переключиться на диалоговое окно:

1
2
3
4
5
        public void SwitchToAlert()
        {
            Trace.WriteLine("Switch to the currently active modal dialog", "Document");
            _driver.SwitchTo().Alert();
        }
        public void SwitchToAlert()
        {
            Trace.WriteLine("Switch to the currently active modal dialog", "Document");
            _driver.SwitchTo().Alert();
        }

Проверить, появился ли диалог:

1
2
3
4
5
        public void AssertIsAlertPresent()
        {
            Trace.WriteLine("Assert is the alert present:", "Document");
            Assert.IsTrue(ReturnAlert() != null, "Error! The alert is not present");
        }
        public void AssertIsAlertPresent()
        {
            Trace.WriteLine("Assert is the alert present:", "Document");
            Assert.IsTrue(ReturnAlert() != null, "Error! The alert is not present");
        }

Пример метода, который возвращает Alert:

1
2
3
4
5
6
        public IAlert ReturnAlert()
        {
            Trace.WriteLine("Return currently active modal dialog", "Document");
            var alert = _driver.SwitchTo().Alert();
            return alert;
        }
        public IAlert ReturnAlert()
        {
            Trace.WriteLine("Return currently active modal dialog", "Document");
            var alert = _driver.SwitchTo().Alert();
            return alert;
        }

Проверить текст диалогового окна:

1
2
3
4
5
6
        public void AssertAlertText(string confMessage)
        {
            Trace.WriteLine("Assert the text of the alert: '" + confMessage + "'", "Document");
            var confirmationGetText = ReturnAlert().Text;
            Assert.AreEqual(confirmationGetText, confMessage, "Error! Incorrect text of the alert");
        }
        public void AssertAlertText(string confMessage)
        {
            Trace.WriteLine("Assert the text of the alert: '" + confMessage + "'", "Document");
            var confirmationGetText = ReturnAlert().Text;
            Assert.AreEqual(confirmationGetText, confMessage, "Error! Incorrect text of the alert");
        }

Нажать ‘Ok’ на диалоговом окне:

1
2
3
4
5
6
7
        public void AcceptAlert(string confMessage)
        {
            AssertIsAlertPresent();
            AssertAlertText(confMessage);
            Trace.WriteLine("Choose 'Ok' on the alert", "Document");
            ReturnAlert().Accept();
        }
        public void AcceptAlert(string confMessage)
        {
            AssertIsAlertPresent();
            AssertAlertText(confMessage);
            Trace.WriteLine("Choose 'Ok' on the alert", "Document");
            ReturnAlert().Accept();
        }

Нажать ‘Cancel’ на диалоговом окне:

1
2
3
4
5
6
7
        public void DismissAlert(string confMessage)
        {
            AssertIsAlertPresent();
            AssertAlertText(confMessage);
            Trace.WriteLine("Choose 'Cancel' on the alert", "Document");
            ReturnAlert().Dismiss();
        }
        public void DismissAlert(string confMessage)
        {
            AssertIsAlertPresent();
            AssertAlertText(confMessage);
            Trace.WriteLine("Choose 'Cancel' on the alert", "Document");
            ReturnAlert().Dismiss();
        }

Во время выполнения тестов могут появляться диалоговые окна, которых мы не ожидали. В таких случаях WebDriver выкинет исключение UnhandledAlertException. В настройках браузеров (capability) для этого предусмотрена опция перехвата неожиданных диалоговых окон и установкой по-умолчанию, что с такими окнами делать. Я не проверял, в каких браузерах эта опция реализована, но вот нашел ее в IE:

1
        ieOptions.UnexpectedAlertBehavior = InternetExplorerUnexpectedAlertBehavior.Accept;
        ieOptions.UnexpectedAlertBehavior = InternetExplorerUnexpectedAlertBehavior.Accept;