Работа с iframe в Selenium WebDriver, пример на Ruby

Если кратко, то <iframe> создает плавающий фрейм, который находится внутри обычного документа, он позволяет загружать в область заданных размеров любые другие независимые документы.

Работать с ним из Selenium очень просто.
Сначала нужно его (<iframe>) найти, потом перейти в него и далее производить поиск необходимых элементов уже относительно документа <iframe>.

Давайте посмотрим на примере как это работает.

Все документы и рабочие файлы у нас будут находиться по адресу /tmp/ (мы же не воспринимаем работу тестеровщика в Windows всерьёз).

<!-- index.html -->
<p id="uniq_id">foo</p>
<iframe id="iframe_id" src="iframe.html"></iframe>
<!-- iframe.html -->
<p id="uniq_id">bar</p>
# encoding: utf-8

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :chrome

driver.get 'file:///tmp/index.html'

# Находим элемент с uniq_id в осномном документе
element = driver.find_element :id, 'uniq_id'

# foo
puts element.text

# Переключаемся в iframe
element = driver.find_element :id, 'iframe_id'
driver.switch_to.frame element

# Находим элемент с uniq_id внутри iframe 
element = driver.find_element :id, 'uniq_id'

# bar
puts element.text

driver.close

Как видно из кода выше у нас два элемента имеют одинаковые id, однако, это не мешает работе, т. к. они находятся в разных документах.

Заметка написана по следам http://automated-testing.info/t/dostup-k-elementam-vo-vlozhennyx-html

1 лайк