Привет, я должен был сделать кое-что в прошлом, что касается ифреймов, и это меня очень смущало,
Итак, самое первое, что вам нужно понять, это то, что iframe на самом деле является веб-страницей «внутри другой веб-страницы», поэтому вам потребуется switchTo().frame(...stuff..)
, чтобы иметь возможность что-то делать
чем когда вы закончите, вам нужно получить начальный кадр driver.switchTo().defaultContent();
, чтобы вы король переходил с одной страницы на другую
Относительно найти элемент, который вы ищете в iframe, я предлагаю вам найти любой элемент, который всегда будет присутствовать, и оберните его с помощью попытки
Я также предлагаю вам создать класс, который будет хранить ваш код и ждать JS, Angular, Jquery ...
пример из моего кода:
try {
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[id^='xdm_default']")));//change focus to iframe
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.tagName("html"))));//wait for html in the iframe
WebElement divCardsGrid = wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("div[class^='CardsGrid']"))));
if (!divCardsGrid.findElements(By.tagName("a")).isEmpty()) {//check for external links
} catch (WebDriverException e) {
log.error(e.getMessage());
}
//change the focus to the initial frame
driver.switchTo().defaultContent();
Надеюсь, это поможет