Selenium WebDriver: How to wait for iFrames to load completely?

送分小仙女□ 提交于 2019-12-19 05:14:52

问题


I'm testing a page with an iFrame whose contents are generated by JavaScript dynamically. I have to wait for the iFrame loaded completely to make sure that all the elements are present. I tried the following code, it didn't work.

WebDriver frame = wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frmMain"));

I also tried to wait for some element in the iFrame to be present. It didn't work, neither.

Any help would be greatly appreciated, thanks!


回答1:


Select any element on IFrame which takes maximum time to load e.g. any button or image and the wait using the following code.

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated((By
                .name("element"))));

Or rather you can wait for for iFrame to appear and then switch to it and then use the above statement !




回答2:


The most robust way to verify a page reload is to verify that an element went stale and then to verify that a new element has loaded.

Choose an element, elementToBeStale, which exists on the "old" page. This is the element you expect to go stale when the page reloads.

Now choose an element you expect to appear on the page once it has reloaded, xPathOfElementToLoad. Note that this can be the same element you expected to go stale.

Note that xPathOfElementToLoad can't be a WebElement because the it doesn't yet exist on the page so it can't be represented by one.

WebDriverWait wait = new WebDriverWait(driver, WAIT_TIME, POLL_INTERVAL);

ExpectedCondition<Boolean> cond1 = ExpectedConditions.stalenessOf(elementToBeStale);
ExpectedCondition<WebElement> cond2 = ExpectedConditions.presenceOfElementLocated(By.xpath(xPathOfElementToLoad));
ExpectedCondition<Boolean> cond = ExpectedConditions.and(cond1, cond2);

wait.until(cond);

This is useful for page reloads because on a page reload waiting for a WebElement to go stale guarantees the element no longer exists and then waiting for a new element to exist guarantees the new page has loaded



来源:https://stackoverflow.com/questions/18486511/selenium-webdriver-how-to-wait-for-iframes-to-load-completely

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!