У меня есть страница .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 не имеют имени и не имеют идентификатора элемента. Но именно поэтому я здесь.
Вы проверили это
@krokodilko Я только что попробовал что-то вроде этого... webDriver.switchTo().frame(webDriver.findElement(By.xpath(".//iframe[@src='/ody/serv/Odyssey?FromPag e=n&ToPage=/jsp/comm/Comm.jsp']"))) и все равно не повезло. Мне любопытно, будет ли попытка сделать это на странице .jsp иметь какое-то отношение к этому?
Братан, поскольку ты ограничился порядковым номером, почему бы тебе не вызвать своей команде разработчиков и не попросить установить имя фрейма по запросу. Мы делали то же самое в подобных случаях
Нашел ответ на свою проблему.
Имейте в виду тот факт, что каждый iframe начинается с индекса 0.
Поэтому, если у вас есть вложенные фреймы без имени или идентификатора - что-то вроде этого
(Кадр C) вложен в (Кадр B), который вложен в (Кадр A)
вы бы попробовали что-то вроде этого
driver.switchTo().frame(0)
driver.switchTo().frame(0)
driver.switchTo().frame(0)
для того, чтобы добраться до "кадра C"
Скорее всего, эти iframe имеют разные ссылки в атрибуте
src = "..."
, поэтому вы можете идентифицировать их по этой ссылке (или ее части, уникальной для данной ссылки). Вы можете использовать такой локатор:finfElement(By.xpath("//iframe[contains(@src,'some unique part of link')]")