参考答案:https://stackoverflow.com/a/7811812/3146582
等待
找到随机页面元素_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));
确实确认页面已经满载?
满载时我假设:
答案 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。