Если кратко, то <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