查找元素是否确认页面已完全加载
本文关键字:加载 元素 是否 确认 查找 | 更新日期: 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 可能只有在页面完全加载并更改页面后才开始运行。
有关更多信息,请查看此处。