Навигация по вложенным безымянным фреймам с помощью selenium webdriver switchTo()

У меня есть страница .jsp, из которой я пытаюсь получить веб-элементы и выполнить функции щелчка и ввода. После проб и ошибок, пытаясь идентифицировать эти веб-элементы на странице jsp, я заметил, что страница содержит «iframes». Я искал ресурсы, чтобы иметь возможность перемещаться по фреймам по имени, а также перемещаться по фреймам по индексу здесь

https://www.guru99.com/handling-iframes-selenium.html 

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

Поскольку, насколько я знаю, я ограничен использованием switchTo (). кадр (индекс)

так как ни один из фреймов не назван, я уже пробовал webDriver.switchTo (). кадр (индекс);

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

webDriver.switchTo().frame(0);
webDriver.switchTo().frame(1);
webDriver.switchTo().frame(2);
webDriver.switchTo().frame(3);

чтобы увидеть, как далеко я могу углубиться, прежде чем я получу исключение. Это просто сложно, поскольку я также не могу определить, в каком iframe я сейчас нахожусь. Возможно, мне нужно создать объект текущего iframe и развернуть его таким образом?

Код выглядит примерно так...

<iframe height = "708px" width = "100%" marginheight = "0" frameborder = "0" scrolling = "auto" src = "..."></iframe>
...
<iframe height = "708px" width = "100%" marginheight = "0" frameborder = "0" scrolling = "auto" src = "..."></iframe>
...
...<iframe onload = "..." height = "100%" width = "100%" marginheight = "0" frameborder = "0" scrolling = "no" src = "..."></iframe>
...
... ...<iframe onload = "..." height = "100%" width = "100%" marginheight = "0" frameborder = "0" scrolling = "YES" src = "..."></iframe> 

Вот где я должен быть

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

webDriver.switchTo().frame(index);

мой единственный вариант, так как iframes не имеют имени и не имеют идентификатора элемента. Но именно поэтому я здесь.

Скорее всего, эти iframe имеют разные ссылки в атрибуте src = "...", поэтому вы можете идентифицировать их по этой ссылке (или ее части, уникальной для данной ссылки). Вы можете использовать такой локатор: finfElement(By.xpath("//iframe[contains(@src,'some unique part of link')]")

krokodilko 23.06.2019 01:36

Вы проверили это

supputuri 23.06.2019 03:07

@krokodilko Я только что попробовал что-то вроде этого... webDriver.switchTo().frame(webDriver.findElement(By.xpath(".‌​//iframe[@src='/ody/‌​serv/Odyssey?FromPag‌​ e=n&amp;ToPage=/jsp/‌​comm/Comm.jsp']"))) и все равно не повезло. Мне любопытно, будет ли попытка сделать это на странице .jsp иметь какое-то отношение к этому?

Austin Duran 26.06.2019 18:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
550
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Братан, поскольку ты ограничился порядковым номером, почему бы тебе не вызвать своей команде разработчиков и не попросить установить имя фрейма по запросу. Мы делали то же самое в подобных случаях

Ответ принят как подходящий

Нашел ответ на свою проблему.

Имейте в виду тот факт, что каждый iframe начинается с индекса 0.

Поэтому, если у вас есть вложенные фреймы без имени или идентификатора - что-то вроде этого

(Кадр C) вложен в (Кадр B), который вложен в (Кадр A)

  • Кадр А
  • ---Кадр Б
  • ------Кадр C

вы бы попробовали что-то вроде этого

    driver.switchTo().frame(0)
    driver.switchTo().frame(0)
    driver.switchTo().frame(0)

для того, чтобы добраться до "кадра C"

Другие вопросы по теме