Selenium WebDriver:如何等待iFrames完全加载?

时间:2013-08-28 11:23:54

标签: java selenium iframe selenium-webdriver

我正在测试一个包含iFrame的页面,其内容由JavaScript动态生成。我必须等待完全加载iFrame以确保所有元素都存在。我尝试了下面的代码,它没有用。

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

我还试图等待iFrame中的某些元素出现。它没有用,也没用。

非常感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:11)

选择IFrame上任何需要最长时间加载的元素,例如任何按钮或图像以及等待使用以下代码。

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

或者你可以等待iFrame出现然后切换到它然后使用上面的语句!

答案 1 :(得分:1)

验证页面重新加载的最可靠的方法是验证元素已过时,然后验证是否已加载新元素。

选择元素“ elementToBeStale”,该元素存在于“旧”页面上。这是您希望页面重新加载时过时的元素。

现在,选择一个您希望重新加载后会显示在页面上的元素xPathOfElementToLoad。请注意,这可能是您希望过时的元素。

请注意,xPathOfElementToLoad不能是WebElement,因为它在页面上尚不存在,因此不能用一个来表示。

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);

这对于页面重新加载很有用,因为在页面重新加载时,等待WebElement失效会保证元素不再存在,然后等待新元素存在,从而确保新页面已加载

答案 2 :(得分:-5)

你可能只需要添加一个等待语句 - 持续一定的秒数......