driver.get()究竟做了什么?

时间:2015-03-17 19:50:27

标签: java selenium selenium-webdriver webdriver

WebDriver documentation声明driver.get()操作的以下内容:

  

取决于几个因素,包括OS /浏览器组合,   WebDriver可能会也可能不会等待页面加载。在一些   在某些情况下,WebDriver可能会在页面出现之前返回控件   完成,甚至开始,加载

任何人都可以解释在什么情况下WebDriver在页面完成之前返回控件,甚至开始加载?

2 个答案:

答案 0 :(得分:0)

这取决于您使用的WebDriver。

在几乎每个WebDriver中,在加载文档后都会给出控制权。这意味着onDocumentReady JavaScript回调可能尚未完成。

为避免这种情况,您可以使用具有合适谓词的WebDriverWait或FluentWait。

Thread.sleep()也是可能的,但是方式很脏!

答案 1 :(得分:0)

以简单的形式,.get()会将您导航到网址。

  

任何人都可以解释WebDriver在什么情况下返回控制权   在页面完成之前,甚至开始加载?

现在这种情况很常见 - 有越来越多的网页异步加载。 Selenium不会等待对未完成的AJAX请求或当前运行脚本的响应,这些脚本在尝试访问DOM中不存在或尚未显示或尚未具有所需数据的元素时会导致不同的错误。

顺便说一句,这是protractor package专门为AngularJS应用程序测试而存在的原因之一 - 它会监听一个有角度的信号"好吧,我完成了这个页面"。

等待网页加载的方法有多种:

这是一个perfect answer,应该有助于清理。

另请参阅相关主题以及对该问题的一些重要解释: