WebDriver文档指出driver.get()操作的以下内容:
Dependent on several factors, including the OS/Browser combination,
WebDriver may or may not wait for the page to load. In some
circumstances, WebDriver may return control before the page has
finished, or even started, loading
任何人都可以解释在页面加载完成甚至开始加载之前,WebDriver在什么情况下会返回控制权吗?
顺便说一句,我喜欢你的名字:)
嗨@Saifur。 让我们通过我的个人资料中提供的表格进行联系。
.get()以简单的形式将您导航到URL。
Can anyone explain under what circumstances WebDriver returns control
before the page has finished, or even started, loading?
如今,这种情况非常普遍-异步加载的页面越来越多。 Selenium不会等待对未完成的AJAX请求或当前正在运行的脚本的响应,而这些脚本可能会在尝试访问DOM中不存在,尚不可见或尚不具有所需数据的元素时导致不同的错误。
顺便说一下,这就是protractor包专门用于AngularJS应用程序测试的原因之一-它侦听一个角度以表示"好,我已经完成了此页面"。
等待页面加载有多种方法:
增加"页面加载超时"(不太可靠)
等待DOM readyState完成
明确地等待特定元素出现在DOM中或可见-这种方法是最常见和最可靠的
这是一个完美的答案,应该有助于清理问题。
另请参阅相关主题,并对问题进行一些很好的解释:
等待硒中的页面加载
如何检查网页驱动程序中是否完全加载了页面?
Selenium WebDriver:等待带有JavaScript(JS)的复杂页面加载
这取决于您使用的WebDriver。
在几乎每个WebDriver中,在加载文档后都可以进行控制。这意味着onDocumentReady JavaScript回调可能尚未完成。
为了避免这种情况,可以使用带有适当谓词的WebDriverWait或FluentWait。
也可以使用Thread.sleep(),但这是一种相当肮脏的方式!
当您说"在文档加载后给出控制权"时,WebDriver如何定义"文档加载"?
取决于驱动程序。 您可以为此查看GrepCode。 这是HtmlUnitDriver的示例:grepcode.com/search/