В предыдущих статьях по Selenium Python Tutorial мы рассмотрели «команды Webelement в Selenium Python». В этом уроке мы изучим, как обращаться с дочерними окнами, фреймами и предупреждениями в Selenium Python.
Selenium имеет уникальный способ обработки предупреждений Javascript. Оповещения представляют собой всплывающие окна, которые появляются при нажатии на ссылку или кнопку. Сразу после его появления на странице фокус смещается с текущей страницы на оповещение.
Selenium WebDriver имеет несколько API для работы с оповещениями и выполнения таких действий, как принятие, отклонение, получение текста оповещения и т. д. . Нам нужно либо принять, либо отклонить оповещения, чтобы продолжить нашу задачу на главной странице.
Предупреждение не может быть идентифицировано путем их проверки. Кроме того, мы не можем создавать настраиваемые XPath для предупреждений. Пока предупреждение присутствует на странице, и если мы попытаемся получить доступ к любому элементу на главной странице, будет выброшено исключение AlertPresentException. Когда на странице появляется всплывающее окно с предупреждением, фокус драйвера по-прежнему остается на главной веб-странице.
Для работы с всплывающим окном с предупреждением нам нужно переключить фокус драйвера с родительской страницы на сгенерированное всплывающее окно. Это достигается с помощью метода switch_to.alert().
Синтаксис:
1 | a = driver.switch_to.alert(); |
После переключения фокуса на предупреждение, мы можем принять, отклонить или получить текст, отображаемый в предупреждении.
Чтобы принять предупреждение или нажать кнопку «ОК», мы должны использовать метод a.accept(). Далее, чтобы закрыть или щелкнуть символ X, следует использовать метод оповещения a.dismiss (). Иногда, если мы хотим извлечь текст во всплывающем окне, следует использовать метод a.text. Также мы можем ввести текст в оповещение с помощью метода a.send_keys(). Вводимый текст передается методу в качестве параметра.
Реализация кода с предупреждением.
12345678910111213141516171819202122232425 | # импортировать веб-драйвер из selenium import webdriver# импортировать класс Keys из selenium.webdriver.common import keysdriver = webdriver.Chrome (executable_path=”C:\chromedriver.exe”)# получить метод для запуска URLdriver.get(“http://softwaretestingplace.blogspot.com/2017/03/javascript-alert-test-page.html”)# для идентификации элемента I = driver.find_element_by_xpath (“//*[@id = 'content']/button”)# для нажмите кнопку l.click()#, чтобы переключиться на alerta = driver.switch_to.alert ();# чтобы получить текст предупреждения print ( a.text)#, чтобы принять alerta.accept ()#, снова создав alertI = driver. find_element_by_xpath(“//*[@id = 'content']/button”)# для нажатия кнопкиl.click()#для закрытия предупреждения.dismiss()#для закрытия браузераdriver.close() |
< p>Фреймы
Мы можем обрабатывать фреймы с помощью Selenium WebDriver. В документе HTML у нас могут быть веб-элементы, которые являются частью другой веб-страницы. Фрейм в HTML-документе описывается внутри тега <frame> или <iframe>. Если есть несколько фреймов, они являются частью тега <frameset>.
Фрейм можно идентифицировать на веб-странице с помощью его имени, идентификатора, веб-элемента или индекса. Чтобы получить доступ к элементу внутри фрейма, мы должны переключить фокус с содержимого главной страницы на конкретный фрейм, в котором присутствует этот элемент.
Рассмотрим пример HTML-кода с тегом frame/iframe.
12 | < фрейм id=”fid” name=”fname” class='fclass' > </frame>< frame id=”fid1″ name=”fname2″ class='fclass2' ></frame> |
Для переключения на фрейм/iframe со значением атрибута name в HTML используется следующий синтаксис :
1 | driver.switch_to.frame(“fname”) |
Чтобы переключиться на фрейм/iframe со значением атрибута id в HTML, используйте следующий синтаксис:
1 | driver.switch_to.frame (“fid”) |
Мы можем переключиться на фрейм/iframe с помощью локаторов, таких как CSS или XPath. Такие локаторы, как текст ссылки и частичный текст ссылки, не работают с фреймами. Кроме того, если страница содержит несколько фреймов, то локатор тэгов не сможет идентифицировать конкретный фрейм/iframe, который мы ищем.
Чтобы переключиться на фрейм/iframe с помощью css, используйте синтаксис driver.switch_to.frame(”frame[class = ‘fclass’] “). Синтаксис с xpath следующий: driver.switch_to.frame (“frame [@class = 'fclass'] “).
Для переключения на фрейм/iframe с индексом используется следующий синтаксис:
1 | driver.switch_to.frame (0) |
Индекс кадра/iframe начинается с 0. Всем фреймам/iframes на веб-странице назначается индекс.
Чтобы переключить фокус со всех фреймов/iframe и перейти на главную веб-страницу, используется метод switch_to. содержимое_по умолчанию (). Как только мы выйдем за пределы фрейма, мы больше не сможем получить доступ к элементам внутри фрейма.
Реализация кода с помощью фрейма.