Как ждать загрузки содержимого iframe с помощью Selenium WebDriver или JS? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь дождаться загрузки содержимого iFrame, но я не могу сделать это без использования Thread.sleep ().

У вас, ребята, есть идея, как это сделать?

Вот мой код Java:

   driver.switchTo().frame(driver.findElement(By.cssSelector("iframe.f-iframe")));
//Thread.sleep(3000);

    WebDriverWait wait = new WebDriverWait(driver, 5);
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.f-iframe")));

    String source = driver.getPageSource();
    System.out.println(source); //prints an empty iframe at this point

    waitForElementVisibility(driver, link, 5); //waits using fluent wait for the element
    link.click();
    driver.switchTo().defaultContent();

Если я раскомментирую Thread.sleep () и закомментирую все ожидания, все работает нормально.

Код веб-страницы:

<html><body><iframe class="f-iframe x-item"><html><body>...</body></html></iframe</body></html>

1 Ответ

0 голосов
/ 11 февраля 2019

Можете ли вы попробовать этот код и посмотреть, работает ли он для вас?

string iFrameLocator = "iframe.f-iframe"
string linkLocator = "//a[contains(text(),'Link Text')]"

driver.switchTo().frame(driver.findElement(By.cssSelector(iFrameLocator)));

WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(linkLocator)));

String source = driver.getPageSource();
System.out.println(source);

WebElement link = driver.findElement(By.xpath(linkLocator))
link.click();

driver.switchTo().defaultContent();
...