Еще раз о работе с iframe в selenium (Java)

selenium
java
webdriver
testng
junit
iframe
Теги: #<Tag:0x00007fedb8940d60> #<Tag:0x00007fedb8940ba8> #<Tag:0x00007fedb89409c8> #<Tag:0x00007fedb89407e8> #<Tag:0x00007fedb8940630> #<Tag:0x00007fedb89404c8>

(Kosmos) #1

Посмотрел форум и тема с iframe подымалась достаточно часто.

Сейчас сам столкнулся с ситуацией, когда не удается перейти в нужный iframe.

Перепробовал ряд селекторов:
ManageBrowser.getDriver().switchTo().frame(driver.findElement(By.selector("iframe[name='msb']"))); ManageBrowser.getDriver().switchTo().frame("msb"); // by attr 'name' ManageBrowser.getDriver().switchTo().frame("msb-id"); // by attr 'id' ManageBrowser.getDriver().switchTo().frame(driver.findElement(By.xpath("//iframe[1]"))); // by XPath
Тестировал в консоли Chrome все эти селекторы - все находили нужный iframe. Какие есть еще варианты поиска/переключения?


(Goshko Nazar) #2

iframe - это такой же тег как и все остальные, и методы поиска, в том числе и локаторы поиска, могут быть какими угодно, единственное отличиие данного тега это в том, что он заставляет переключаться webdriver в локальную область видимости втури этого тега, не более.

Если вы не можете найти елемент, то используйте задержки для ожидания появления елемента на странице, а вообще…это уже моветон такое спрашивать:

table = WebDriverWait(self.driver, 5).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, '#items-grid > table > tbody')))


(Dmitrii Demin) #3

Предположу, что один фрейм вложен в другой. Сначала Вам следует переключиться на самый первый, а далее - на дочерний.
В Selenide на эту тему есть удобная штука:
switchTo().innerFrame(“parentFrame”, “childFrame_1”);


(Kosmos) #4

Вполне возможно. Т.к. страница формируется XSL. В исходном коде ч-з Ctrl+U только XML, а если смотреть в консоли - то HTML с iframe.
Сейчас голову ломаю… разработчикам.