查找元素是否确认页面已完全加载

本文关键字:加载 元素 是否 确认 查找 | 更新日期: 2023-09-27 18:32:13

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

是否等待随机页面元素被找到

_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));

真的确认页面已经完全加载了吗

满载时,我假设:

  • 现在显示所有必需和设计的元素
  • 浏览器未下载该页面的更多数据

查找元素是否确认页面已完全加载

不,这并不一定意味着页面已"完全加载"。对findElement的成功调用告诉您的是元素已加载到 DOM 中。如果正确选择元素,则可能意味着页面已按照您的条件定义完全加载,但这完全取决于页面结构。例如,我可以设想一个页面在JavaScript中触发一个XmlHttpRequest,该请求通过setTimeout执行。findElement调用可能会成功,但页面仍可能通过该机制下载资源。这就是为什么在当今的网络中没有"页面已满载"的通用定义的原因之一。这取决于有问题的页面。

选项 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"));

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

由于延迟加载组件,不可能为所有 Web 应用程序定义通用的满载状态。我使用几种做法来定义加载状态。1. 重复计算页面上的 Web 元素,直到数量稳定。 2. 等待页面上最慢的组件。

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

然而,这并不意味着元素是可见的,只存在。为了确保它们显示,您应该在预期条件下使用显式等待。例如

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

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

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

有关更多信息,请查看此处。