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

2022-09-03 01:37:27

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

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

我还尝试等待iFrame中的某些元素存在。它也没有奏效。

任何帮助将不胜感激,谢谢!


答案 1

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

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

或者更确切地说,您可以等待iFrame出现,然后切换到它,然后使用上面的语句!


答案 2

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

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

现在,选择您希望在重新加载后出现在页面上的元素,。请注意,这可能是您预期过时的同一元素。xPathOfElementToLoad

请注意,不能是 a,因为它在页面上尚不存在,因此不能由一个表示。xPathOfElementToLoadWebElement

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