atesting.ru Блог Как переключаться между IFrames с помощью Selenium Python

Как переключаться между IFrames с помощью Selenium Python

На веб-сайте часто используется элемент управления HTML iframe . Этот элемент управления необходимо обрабатывать определенным образом во время тестирования. В этой статье я покажу вам, как обрабатывать iframe с помощью Selenium Python

Что такое iframe?

iframe (встроенный фрейм) — это HTML документ, встроенный в другой HTML-документ. HTML-элемент iframe часто используется для вставки содержимого из другого источника, например рекламы, на веб-страницу.

Как работать с iframe с помощью Selenium Python

Мы можем обрабатывать iframe с помощью Selenium WebDriver. В HTML-документе у нас могут быть веб-элементы, которые являются частью другой веб-страницы. Окно iframe в документе HTML описывается внутри тега & lt; frame & gt; или & lt; iframe & gt; ярлык. Если имеется несколько окон iframe, они являются частью & lt; frameset & gt;

iframe можно определить на веб-странице по его имени , id , web < strong> element или index . Чтобы получить доступ к элементу внутри iframe, мы должны переключить фокус с содержимого главной страницы на конкретный iframe, в котором присутствует элемент.

Давайте рассмотрим образец HTML-кода с тегом frame/iframe.

12 & lt; идентификатор кадра = & # 34; fid & # 34; name = & # 34; fname & # 34; class = & # 39; fclass & # 39; & gt; & lt;/frame & gt; & lt; идентификатор кадра = & # 34; fid1 & # 34; name = & # 34; fname2 & # 34; class = & # 39; fclass2 & # 39; & gt; & lt;/frame & gt;

Чтобы переключиться на фрейм/iframe со значением атрибута name в HTML, используйте следующий синтаксис:

1 & lt; span class = & # 34; crayon-i & # 34; & gt; driver & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;. & lt;/span & gt; & lt; span class = & # 34; crayon-i & # 34; & gt; switch_to & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;. & Lt;/span & gt; & lt; span class = & # 34; crayon -e & # 34; & gt; frame & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt; (& lt;/span & gt; & lt; span class = & # 34; crayon-s & # 34; & gt; & # 34; fname & # 34; & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;) & lt;/span & gt;

Чтобы переключиться на фрейм/iframe со значением id атрибут в HTML, синтаксис:

1 & lt; span class = & # 34; crayon-i & # 34; & gt; driver & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;. & lt;/span & gt; & lt; span class = & # 34; crayon-i & # 34; & gt; switch_to & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;. & Lt;/span & gt; & lt; span class = & # 34; crayon -e & # 34; & gt; frame & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt; (& lt;/span & gt; & lt; span class = & # 34; crayon-s & # 34; & gt; & # 34; fid & # 34; & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;) & lt;/span & gt;

Мы можем переключиться на frame/iframe с помощью локаторов вроде CSS или XPath . Локаторы, такие как ссылка текст и частичный ссылка текст не работает с фреймами. Кроме того, если страница содержит несколько фреймов, то локатор тэга не сможет идентифицировать конкретный фрейм/iframe, который мы ищем.

Чтобы переключиться на фрейм/iframe используя css, синтаксис

1 driver.switch_to.frame («frame [class = 'fclass']«)

Синтаксис XPath:

< td class = "crayon-code"> driver.switch_to.frame («frame [@class = 'fclass']«)

1

Чтобы переключиться на кадр/iframe с индексом, синтаксис:

1 & lt; span class = & # 34; crayon-i & # 34; & gt; driver & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;. & lt;/span & gt; & lt; span class = & # 34; crayon-i & # 34; & gt; switch_to & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;. & Lt;/span & gt; & lt; span class = & # 34; crayon -e & # 34; & gt; frame & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt; (& lt;/span & gt; & lt; span class = & # 34; crayon-cn & # 34; & gt; 0 & lt;/span & gt; & lt; span class = & # 34; crayon-sy & # 34; & gt;) & lt;/span & gt;

Индекс фрейма/iframe начинается с 0. Все фреймы/фреймы на веб-странице назначаются с помощью индекса.

Чтобы переключить фокус со всех фреймов/фреймов и перейти на главную веб-страницу, следует использовать метод switch_to.default_content (). Как только мы выйдем за пределы кадра, мы больше не сможем получить доступ к элементам внутри кадра.

Реализация кода с фреймом.

1 & lt; span class = & # 34; crayon-sy & # 34; & gt; # импортировать веб-драйвер & lt; br/& gt; из selenium import webdriver & lt; br/& gt; # импортировать класс ключей & lt; br/& gt; из selenium.webdriver. общие ключи импорта & lt; br/& gt; driver = webdriver.Chrome (executable_path = & # 34; C: \ chromedriver.exe & # 34;) & lt; br/& gt; # get метод для запуска URL & lt; br/& gt; драйвера .get (& # 34; https: //the-internet.herokuapp.com/nested_frames & # 34;) & lt; br/& gt; # для переключения на фрейм с атрибутом имени & lt; br />driver.switch_to.frame (& # 34; frame-bottom & # 34;) & lt; br/& gt; # для идентификации элемента внутри этого фрейма и получения текста & lt; br/& gt; print (driver.find_element_by_css_selector (& # 34; body & # 34;). text) & lt; br/& gt; # для перехода к содержимому главной страницы & lt; br />driver.switch_to.default_content () & lt; br/& gt; # для закрытия браузера & lt; br />driver.close () & lt ; br/& gt; & lt;/span & gt;

Заключение: переключение между iframe с помощью Selenium Python

Мы много раз сталкиваемся с iframe во время записи g наши скрипты selenium. Поэтому очень важно знать, как обрабатывать переключение между фреймами с использованием Selenium Python. Надеюсь, у вас есть четкое представление о том, как с этим справиться.

Если у вас есть другие вопросы, прокомментируйте их ниже.

TAG: qa