Selenium всплывающие окна браузера

Обновлено: 07.07.2024

Продолжение перевода неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.

Содержание:

Предположительно, первое, что вы захотите сделать с помощью WebDriver, будет переход по ссылке. Обычно для таких целей используют метод get:


Метод driver.get перенаправляет к странице URL, поданной в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью. Если необходимо гарантировать полную загрузку страниц, вы можете использовать ожидания (англ. waits).

3.1. Взаимодействие со страницей

Сама по себе возможность переходить по ссылке не так уж полезна. Что действительно хочется сделать, так это взаимодействовать со страницей, или, если быть точным, с элементами HTML на странице. Прежде всего необходимо найти их. WebDriver предоставляет ряд способов для поиска элементов. К примеру, на странице есть элемент, определенный таким образом:


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


Также вы можете искать адрес гиперссылки по тексту гиперссылки, но будьте бдительны: текст должен совпадать в точности. Также будьте внимательны при использовании XPATH в WebDriver. Если существует больше одного элемента, удовлетворяющего условиям запроса, вернется только первый найденный. Если ничего не будет найдено, будет возбуждено исключение NoSuchElementException.

Итак, мы получили элемент. Что вы можете с ним сделать? Первым делом вы захотите ввести какой-нибудь текст в текстовое поле:


Также вы можете имитировать нажатие клавиш-стрелок клавиатуры с помощью класса “Keys”:


Метод send_keys можно вызвать для любого элемента, который позволяет проверить сочетания клавиш, такие как те, что используются в GMail. Существует побочный эффект, заключающийся в том, что ввод в текстовое поле не очищает его автоматически. Вместо этого то, что вы набираете на клавиатуре, будет дописываться к уже вписанному в поле. Очистить содержимое тектового поля или текстовой области textarea легко — с помощью метода clear:

3.2. Заполнение форм

Мы уже рассмотрели ввод текста в текстовую область или текстовое поле, а как быть с другими элементами? Вы можете попробовать раскрыть раскрывающийся список, после чего можно использовать “setSelected” для выделения тэгов вроде OPTION. Работать с тэгами SELECT не так уж сложно:


Такой код найдет первый элемент “SELECT” на странице, и в цикле пройдет по всем тэгам OPTION поочередно, сообщая их значения и поочередно выделяя их.

Как можно заметить, это не самый быстрый способ работы с элементами SELECT. Поддерживаемые вебдрайвером классы содержат один, называющийся “Select”, он предоставляет более удобные способы взаимодействия:


Также WebDriver предоставляет возможность снятия выделения со всех элементов выпадающего списка:


Этот код снимает выделение со всех тегов OPTION первого тега SELECT на странице.

Допустим, для теста вам необходим список всех выделенных по умолчанию опций. Класс Select предоставляет такое свойство (возвращает список):


Для получения всех доступных опций используйте:


В качестве альтернативы первому методу можно использовать метод “submit”, доступный для каждого элемента. Если вызвать его для элемента внутри формы, WebDriver пробежится по всей структуре DOM, пока не найдет закрывающийся тег формы, и затем вызовет для нее submit. Если элемент находится не в форме, тогда возбудится исключение NoSuchElementException:

3.3. Перетаскивание

Есть два варианта «перетаскивания» элементов: перемещение элемента на определенную величину, либо перетаскивание его на другой элемент:

3.4. Переключение между окнами и фрэймами

Современные веб-приложения редко обходятся без фреймов (frame) и редко когда ограничиваются одним окном. WebDriver поддерживает переключение между именованными окнами с помощью метода “switch_to_window”:


Все вызовы, начинающиеся с driver теперь будут истолкованы как обращенные к полученному окну. Но откуда вам знать имя окна? Взгляните на код javascript или ссылку, которые открывают окно:


Также вы можете послать “дескриптор окна” методу “switch_to_window()”. Пользуясь этой особенностью, вы можете использовать цикл для перебора всех открытых окон, к примеру, так:


Еще вы можете переходить между фрэймами (frame или iframes):


Можно получить доступ к подчиненным фреймам, подавая путь, разделяемый точкой, или можно получить фрейм по индексу:


Следующий код перенаправит к фрейму с именем “child”, который в свою очередь принадлежит первому подчиненному фрейму фрейма “frameName”. Пути к фреймам описываются полностью — от верхнего уровня:


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

3.5. Всплывающие окна

Selenium WebDriver из упаковки поддерживает управление всплывающими диалоговыми окнами. После того как вы инициируете запуск, откроется окно, управлять им можно так:


Код вернет объект текущего открытого окна. С этим объектом вы можете принять, отклонить вопрос окна, прочитать его содержимое или даже ввести текст по приглашению окна. Интерфейс взаимодействия со всплывающими окнами работает одинаково хорошо как для предупреждений (alerts), так и для запросов к подтверждению (confirms) и приглашений к вводу (prompts). За дополнительной информацией обратитесь к документации API.

3.6. Навигация: история и локация


Чтобы перейти вперед или назад по истории вкладки:


Имейте в виду, что этот функционал полностью зависит от используемого драйвера. Вы можете получить непредвиденный результат, если привыкли к поведению какого-либо конкретного браузера, а работаете с другим.

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

В этом руководстве мы узнаем о различных типах оповещений, обнаруженных в тестировании веб-приложений, и о том, как обрабатывать оповещения в Selenium WebDriver. Мы также увидим, как мы принимаем и отклоняем оповещение в зависимости от типа оповещения.

В этом уроке вы узнаете

Что такое оповещение?

Вот несколько типов предупреждений:

1) Простое оповещение

Это простое предупреждение отображает некоторую информацию или предупреждение на экране.

Обработка оповещений и всплывающих окон в Selenium WebDriver

2) Быстрое оповещение.

Это быстрое предупреждение запрашивает некоторый ввод от пользователя, и веб-драйвер селена может ввести текст с помощью sendkeys («input….»).

Обработка оповещений и всплывающих окон в Selenium WebDriver

3) Подтверждение подтверждения.

В этом уведомлении о подтверждении запрашивается разрешение на выполнение какого-либо типа операции.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Как обрабатывать оповещения в Selenium WebDriver

Интерфейс оповещения предоставляет следующие несколько методов, которые широко используются в Selenium Webdriver.

1) void dismiss () // Нажать на кнопку «Отмена» оповещения.

2) void accept () // Нажать кнопку «ОК» оповещения.

Вы можете увидеть несколько методов оповещения, как показано на экране ниже, предложенном Eclipse.

Мы можем легко переключиться на оповещение из главного окна, используя метод Selenium .switchTo () .

Обработка оповещений и всплывающих окон в Selenium WebDriver

Теперь мы автоматизируем приведенный ниже сценарий.

В этом сценарии мы будем использовать демонстрационный сайт Guru99, чтобы проиллюстрировать обработку Selenium Alert.

Шаг 2) Введите любой идентификатор клиента.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Обработка оповещений и всплывающих окон в Selenium WebDriver

Шаг 4) Отклонить / принять предупреждение.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Обработка оповещений в Selenium Webdriver с использованием приведенного выше сценария

Вывод :

Как работать с всплывающим окном Selenium с помощью Webdriver

В автоматизации, когда у нас есть несколько окон в любом веб-приложении, активность может потребоваться переключить управление между несколькими окнами с одного на другое, чтобы завершить операцию. После завершения операции он должен вернуться в главное окно, то есть в родительское окно. Мы увидим это далее в статье с примером.

В веб-драйвере селена есть методы, с помощью которых мы можем обрабатывать несколько окон.

Driver.getWindowHandles ();

Чтобы обрабатывать все открытые окна с помощью веб-драйвера, мы можем использовать «Driver.getWindowHandles ()», а затем мы можем переключать окно из одного окна в другое в веб-приложении. Тип возвращаемого значения: Iterator <String>.

Driver.getWindowHandle ();

Когда сайт открывается, нам нужно обработать главное окно с помощью driver.getWindowHandle () . Это будет обрабатывать текущее окно, которое однозначно идентифицирует его в этом экземпляре драйвера. Тип возвращаемого значения — String.

Для обработки нескольких окон в Selenium WebDriver, мы следуем следующим шагам.

Теперь мы автоматизируем приведенный ниже сценарий, чтобы увидеть, как обрабатывать несколько окон с помощью Selenium Webdriver.

В этом сценарии мы будем использовать демонстрационный сайт «Guru99», чтобы проиллюстрировать обработку окон.

Шаг 1) Запустите сайт.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Шаг 2) Нажмите на ссылку «Нажмите здесь».

Когда пользователь нажимает на ссылку «Нажмите здесь», открывается новое дочернее окно.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Шаг 3) Откроется новое дочернее окно.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Шаг 4) Введите свой электронный адрес и отправьте.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Шаг 5) Показать учетные данные для доступа при отправке страницы.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Когда вы выполните код, вы увидите, что дочернее окно открыто в новой вкладке.

  1. Закройте дочернее окно, в котором отображаются учетные данные.

Обработка оповещений и всплывающих окон в Selenium WebDriver

Обработка оповещений и всплывающих окон в Selenium WebDriver

Обработка нескольких окон в селеновом веб-драйвере по вышеуказанному сценарию.

Вывод:

Когда вы выполняете приведенный выше код, он запускает сайт и при нажатии на ссылку «Нажмите здесь» открывает дочернее окно в новой вкладке. Вы можете закрыть дочернее окно и переключиться на родительское окно, когда операция будет полностью завершена. Следовательно, обработка более одного окна в приложении.

In this tutorial, we will learn, Store commands, Echo commands, Alerts and Popup handling.

Storing Variables and the Echo command

Store

Для хранения переменных в Selenium IDE мы используем команду «store». На рисунке ниже хранится значение «tutorial» для переменной с именем «myVariable».

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Чтобы получить доступ к переменной, просто заключите ее в символ $ . Например, чтобы ввести значение «myVariable» в текстовое поле «userName» Mercury Tours, введите $ в поле «Значение».

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

StoreElementPresent

Эта команда сохраняет либо «true», либо «false» в зависимости от наличия указанного элемента. Сценарий ниже сохраняет логическое значение «true» для «var1» и «false» для «var2». Для проверки мы будем использовать команду «echo» для отображения значений var1 и var2. Базовый URL для иллюстрации ниже был установлен на домашней странице Mercury Tours.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

StoreText

Эта команда используется для хранения внутреннего текста элемента в переменной. На рисунке ниже хранится внутренний текст тега в Facebook в переменную с именем «textVar».

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Поскольку это единственный элемент на странице, безопасно использовать «css = h1» в качестве нашей цели. Изображение ниже показывает, что Selenium IDE удалось сохранить строку «Зарегистрироваться» в переменной «textVar», правильно напечатав ее значение.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Оповещения, всплывающие окна и несколько окон

Оповещения, вероятно, самая простая форма всплывающих окон. Наиболее распространенные команды Selenium IDE, используемые при обработке оповещений:

Помните эти две вещи при работе с оповещениями:

  • Selenium IDE автоматически нажмет кнопку «ОК» в окне предупреждений, и вы не сможете увидеть фактическое предупреждение.
  • Selenium IDE не сможет обрабатывать оповещения, которые находятся в функции onload () страницы. Он сможет обрабатывать оповещения, которые генерируются только после полной загрузки страницы.

Шаг 2. Создайте скрипт, как показано ниже.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Шаг 3. Запустите сценарий и не ожидайте, что вы сможете увидеть фактическое предупреждение.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Подтверждения

Подтверждения — это всплывающие окна, которые дают вам кнопку ОК и кнопку ОТМЕНА, в отличие от предупреждений, которые дают вам только кнопку ОК. Команды, которые вы можете использовать при обработке подтверждений, аналогичны командам при обработке оповещений.

  • assertConfirmation / assertNotConfirmation
  • assertConfirmationPresent / assertConfirmationNotPresent
  • storeConfirmation
  • storeConfirmationPresent
  • verifyConfirmation / verifyNotConfirmation
  • verifyConfirmationPresent / verifyConfirmationNotPresent

Тем не менее, это дополнительные команды, которые вам нужно использовать, чтобы указать Selenium, какую опцию выбрать, кнопку OK или ОТМЕНА.

  • chooseOkOnNextConfirmation / chooseOkOnNextConfirmationAndWait
  • chooseCancelOnNextConfirmation

Вы должны использовать эти команды перед командой, которая вызывает окно подтверждения, чтобы Selenium IDE заранее знала, какой вариант выбрать. Опять же, вы не сможете увидеть фактическое окно подтверждения во время выполнения скрипта.

Давайте протестируем веб-страницу с кнопкой, которая была закодирована, чтобы показать, нажал ли пользователь кнопку ОК или кнопку ОТМЕНА.

Шаг 2. Создайте скрипт, как показано ниже. На этот раз мы сначала нажмем кнопку ОК.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Шаг 3. Запустите сценарий и обратите внимание, что вы не видите фактического подтверждения, но на веб-странице удалось указать, какая кнопка была нажата Selenium IDE.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Шаг 4. Замените команду «ChooseOkOnNextConfirmation» на «ChooseCancelOnNextConfirmation» и снова запустите сценарий.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Несколько окон

Если вам случится щелкнуть ссылку, которая запускает отдельное окно, вы должны сначала дать указание Selenium IDE сначала выбрать это окно, прежде чем вы сможете получить доступ к элементам внутри него . Для этого вы будете использовать заголовок окна в качестве локатора .

Мы используем команду selectWindow для переключения между окнами.

  • Передача управления из родительского окна во вновь запущенное окно Facebook с помощью команды «selectWindow» и его заголовка в качестве локатора
  • Проверьте заголовок нового окна
  • Выберите обратно исходное окно, используя команду «selectWindow» и «null» в качестве цели.
  • Проверьте заголовок текущего выбранного окна.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Шаг 2. Создайте скрипт, как показано ниже.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Нам нужна команда «pause», чтобы дождаться загрузки нового запущенного окна, прежде чем мы сможем получить доступ к его заголовку.

Шаг 3. Выполните скрипт. Обратите внимание, что тестовый пример пройден, это означает, что мы смогли переключаться между окнами и успешно проверять их заголовки.

Хранить переменные, эхо, оповещение, обработку всплывающих окон в Selenium IDE

Всегда помните, что при установке цели selectWindow в значение «null» автоматически будет выбрано родительское окно (в этом случае окно, в котором находится элемент «link = here»)

Примечание: Facebook изменил название с момента создания Учебников. Пожалуйста, измените код соответственно

Продолжение перевода неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.

Содержание:

Предположительно, первое, что вы захотите сделать с помощью WebDriver, будет переход по ссылке. Обычно для таких целей используют метод get:


Метод driver.get перенаправляет к странице URL, поданной в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью. Если необходимо гарантировать полную загрузку страниц, вы можете использовать ожидания (англ. waits).

3.1. Взаимодействие со страницей

Сама по себе возможность переходить по ссылке не так уж полезна. Что действительно хочется сделать, так это взаимодействовать со страницей, или, если быть точным, с элементами HTML на странице. Прежде всего необходимо найти их. WebDriver предоставляет ряд способов для поиска элементов. К примеру, на странице есть элемент, определенный таким образом:


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


Также вы можете искать адрес гиперссылки по тексту гиперссылки, но будьте бдительны: текст должен совпадать в точности. Также будьте внимательны при использовании XPATH в WebDriver. Если существует больше одного элемента, удовлетворяющего условиям запроса, вернется только первый найденный. Если ничего не будет найдено, будет возбуждено исключение NoSuchElementException.

Итак, мы получили элемент. Что вы можете с ним сделать? Первым делом вы захотите ввести какой-нибудь текст в текстовое поле:


Также вы можете имитировать нажатие клавиш-стрелок клавиатуры с помощью класса “Keys”:


Метод send_keys можно вызвать для любого элемента, который позволяет проверить сочетания клавиш, такие как те, что используются в GMail. Существует побочный эффект, заключающийся в том, что ввод в текстовое поле не очищает его автоматически. Вместо этого то, что вы набираете на клавиатуре, будет дописываться к уже вписанному в поле. Очистить содержимое тектового поля или текстовой области textarea легко — с помощью метода clear:

3.2. Заполнение форм

Мы уже рассмотрели ввод текста в текстовую область или текстовое поле, а как быть с другими элементами? Вы можете попробовать раскрыть раскрывающийся список, после чего можно использовать “setSelected” для выделения тэгов вроде OPTION. Работать с тэгами SELECT не так уж сложно:


Такой код найдет первый элемент “SELECT” на странице, и в цикле пройдет по всем тэгам OPTION поочередно, сообщая их значения и поочередно выделяя их.

Как можно заметить, это не самый быстрый способ работы с элементами SELECT. Поддерживаемые вебдрайвером классы содержат один, называющийся “Select”, он предоставляет более удобные способы взаимодействия:


Также WebDriver предоставляет возможность снятия выделения со всех элементов выпадающего списка:


Этот код снимает выделение со всех тегов OPTION первого тега SELECT на странице.

Допустим, для теста вам необходим список всех выделенных по умолчанию опций. Класс Select предоставляет такое свойство (возвращает список):


Для получения всех доступных опций используйте:


В качестве альтернативы первому методу можно использовать метод “submit”, доступный для каждого элемента. Если вызвать его для элемента внутри формы, WebDriver пробежится по всей структуре DOM, пока не найдет закрывающийся тег формы, и затем вызовет для нее submit. Если элемент находится не в форме, тогда возбудится исключение NoSuchElementException:

3.3. Перетаскивание

Есть два варианта «перетаскивания» элементов: перемещение элемента на определенную величину, либо перетаскивание его на другой элемент:

3.4. Переключение между окнами и фрэймами

Современные веб-приложения редко обходятся без фреймов (frame) и редко когда ограничиваются одним окном. WebDriver поддерживает переключение между именованными окнами с помощью метода “switch_to_window”:


Все вызовы, начинающиеся с driver теперь будут истолкованы как обращенные к полученному окну. Но откуда вам знать имя окна? Взгляните на код javascript или ссылку, которые открывают окно:


Также вы можете послать “дескриптор окна” методу “switch_to_window()”. Пользуясь этой особенностью, вы можете использовать цикл для перебора всех открытых окон, к примеру, так:


Еще вы можете переходить между фрэймами (frame или iframes):


Можно получить доступ к подчиненным фреймам, подавая путь, разделяемый точкой, или можно получить фрейм по индексу:


Следующий код перенаправит к фрейму с именем “child”, который в свою очередь принадлежит первому подчиненному фрейму фрейма “frameName”. Пути к фреймам описываются полностью — от верхнего уровня:


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

3.5. Всплывающие окна

Selenium WebDriver из упаковки поддерживает управление всплывающими диалоговыми окнами. После того как вы инициируете запуск, откроется окно, управлять им можно так:


Код вернет объект текущего открытого окна. С этим объектом вы можете принять, отклонить вопрос окна, прочитать его содержимое или даже ввести текст по приглашению окна. Интерфейс взаимодействия со всплывающими окнами работает одинаково хорошо как для предупреждений (alerts), так и для запросов к подтверждению (confirms) и приглашений к вводу (prompts). За дополнительной информацией обратитесь к документации API.

3.6. Навигация: история и локация


Чтобы перейти вперед или назад по истории вкладки:


Имейте в виду, что этот функционал полностью зависит от используемого драйвера. Вы можете получить непредвиденный результат, если привыкли к поведению какого-либо конкретного браузера, а работаете с другим.

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

Читайте также: