Я работаю над проектом автоматизации с использованием селена и Java.Проект должен работать на любом приложении / сайте.Итак, моя проблема сейчас, поскольку каждая веб-страница может содержать бесконечное число фреймов, мне нужно разработать функцию, способную искать и перебирать все фреймы, пока не найдет искомый элемент.Пример: я ищу кнопку с id = "xx", чтобы щелкнуть:
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe> <button id="xx" />
Я попробовал рекурсивный подход, но мне трудно:
public static void searchFrame2(String buttonid) {
List<WebElement> frames = driver.findElements(By.tagName("iframe"));
boolean continuSearch = true;
if (!frames.isEmpty()) {
for (WebElement elem : frames) {
if (continuSearch) {
driver.switchTo().defaultContent();
driver.switchTo().frame(elem);
try {
driver.findElement(By.id(searchByValue)).click();
continuSearch = false;
} catch (Exception e) {
List<WebElement> childFrames = driver.findElements(By.tagName("iframe"));
if (childFrames.isEmpty()) {
continue;
} else {
for (WebElement element : childFrames) {
continuSearch = recursiveSearch(buttonid, element);
if (!continuSearch) {
break;
}
}
}
}
}
}
}
}
public static boolean recursiveSearch(String buttonid, WebElement currFrame) {
boolean continuSearch = true;
while (continuSearch) {
try {
driver.switchTo().frame(currFrame);
driver.findElement(By.id(buttonid)).click();
continuSearch = false;
} catch (Exception e) {// elem not found
List<WebElement> childFrames = driver.findElements(By.tagName("iframe"));
if (childFrames.isEmpty()) {
driver.switchTo().parentFrame();
return continuSearch;
} else {
for (WebElement element : childFrames) {
continuSearch = recursiveSearch(buttonid, element);
}
}
}
}
return continuSearch;
}
Пожалуйста, кто-нибудь, помогите мневот, я застрял на этом с 3 недель, я не мог понять это.