查找元素确认页面是否已满载?

时间:2016-01-28 12:53:27

标签: c# selenium selenium-webdriver

参考答案:https://stackoverflow.com/a/7811812/3146582

等待

找到随机页面元素
_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));

确实确认页面已经满载

满载时我假设:

  • 现在显示所有必需和设计的元素
  • 浏览器不再下载该页面的任何数据

5 个答案:

答案 0 :(得分:2)

不,这并不一定意味着该页面已满载。"对findElement的所有成功调用都告诉您,元素已加载到DOM中。如果您正确选择元素,可能暗示页面已按照您的条件定义完全加载,但这完全取决于页面结构。例如,我可以想象一个页面触发JavaScript中的XmlHttpRequest,它通过setTimeout执行。 findElement调用可能会成功,但页面仍然可以通过该机制下载资源。这就是为什么没有一个适合所有人的定义"页面完全加载"在今天的网站上。这取决于相关页面。

答案 1 :(得分:1)

选项1:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(120));

选项2:

WebDriverWait wait;
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

答案 2 :(得分:0)

使用pageLoadTimeout确定页面是否已完全下载。根据您的规范确定页面加载预期延迟的内容,并在使用此方法时将该时间用作超时。

答案 3 :(得分:0)

由于延迟加载组件,很难为所有Web应用程序定义通用的完全加载状态。我使用了一些实践来定义加载状态。 1.重复计算页面上的Web元素,直到数字稳定。 2.等待页面上最慢的组件。

答案 4 :(得分:0)

Selenium会阻止代码,直到它收到来自DOM的页面加载通知。您可以使用pageLoadTimeout

来限制时间

然而并不意味着元素是可见的,只存在。要确保显示它们,您应该使用expected conditions显式等待。例如

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("id")));

这将等待您的元素可见,即元素显示且高度和宽度大于0.

这也不意味着页面不能再改变。只有在页面完全加载并更改页面后,JavaScript才可能开始运行。

有关详细信息,请查看here