t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f9b040094d8> #<Tag:0x00007f9b04009398> #<Tag:0x00007f9b040092d0> #<Tag:0x00007f9b040091b8> #<Tag:0x00007f9b04009050> #<Tag:0x00007f9b04008f38>

Посмотрел форум и тема с 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. Какие есть еще варианты поиска/переключения?

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

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

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

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

1 Симпатия

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