Фрейм представляет собой отдельный законченный HTML-документ, содержащий свою собственную модель страницы (DOM).
Плавающий фрейм (iframe, inline frame), или еще его называют встроенный фрейм, может встраиваться в любое место HTML-страницы. Для каждого тега <iframe>
в HTML документе создается iFrame объект и позволяет загружать в область заданных размеров любые другие независимые документы.
Поиск элементов в Selenium осуществляется опираясь на DOM-модель. По умолчанию это всегда DOM нашей страницы. Для того, чтобы начать работать с контентом фрейма нужно указать драйверу с какой DOM-моделью необходимо работать. Для этого используется метод switchTo()
. В качестве параметров он принимает индекс, имя или сам iframe элемент
driver.switchTo().frame(0);
driver.switchTo().frame("frameName");
driver.switchTo().frame(webElement);
Все фреймы определяются относительно текущего выбранного фрейма. Если вы переключились во фрейм, то из него можете переключиться только в его вложенные фреймы, а переключиться в “родительский” или «соседний» фрейм (вернуться пошагово вверх по иерархии фреймов) – нельзя.
Вполне возможно получить доступ к дочерним фреймам путем сцепления вызовов switchTo ()
driver.switchTo().frame("frame") .switchTo().frame(0) .switchTo().frame("subsubframe");
либо разделяя путь точкой
driver.switchTo().frame("frame.0.subsubframe");
Приведенный выше код переключит Selenium во фрейм с именем «subsubframe» первого дочернего фрейма, принадлежащего фрейму с именем «frame».
Единственный способ выйти из фрейма без перезагрузки страницы это выполнение команды
driver.switchTo().defaultContent();
Это переключит Selenium в самый верхний уровень иерархии, к модели страницы браузера.
Поэтому если вы хотите переключиться из одного фрейма в другой, не вложенный в него, вам придется сначала переключиться из фрейма на основную страницу, а потом из нее уже в другой фрейм.
В некоторых случаях может оказаться полезным использование ExpectedConditions:
import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; WebDriver driver = new FirefoxDriver(); (new WebDriverWait(driver, 10)) .until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame"));
public static ExpectedCondition
Ожидание с проверкой является ли фрейм доступным для переключения, и если доступен, то переключает драйвер во фрейм.
«Спасибо за доступное объяснение и несколько способов использования, теперь выберу наиболее подходящий!!!
Hi, i have reading out and i will definitely bookmarrk your site, just wanted to say i liked this article.