Я создал рекурсивную функцию. Цель этой функции - просмотреть все фреймы, чтобы найти элемент. Но это очень медленно.
Ниже вы найдете функцию:
private WebElement browseFramesToFindElement(By locator) {
WebElement element = null;
if (isElementPresent(locator, 1))
element = this.driver.findElement(locator);
if (element == null) {
List<WebElement> frames = this.driver.findElements(By.xpath("//frame"));
int i = 0;
while (i < frames.size() && element == null) {
this.driver.switchTo().frame(this.driver.findElement(By.xpath("//frame[@id = '" + frames.get(i).getAttribute("id") + "']")));
element = browseFramesToFindElement(locator);
if (element == null)
driver.switchTo().parentFrame();
i++;
}
}
return element;
}
private boolean isElementPresent(By by, int secToWait) {
this.driver.manage().timeouts().implicitlyWait(secToWait, TimeUnit.SECONDS);
try {
this.driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
Не могли бы вы сказать, возможно ли улучшить производительность? И как? Заранее спасибо.