webdriver.get()和webdriver.navigate()之间的区别

get()navigate()方法有什么区别? 这个或者其他方法是否等待页面内容加载? 我真正需要什么是像seleniums 1.0 WaitForPageToLoad, but for using via webdriver` but for using via

有什么build议么?

导航

WebDriver首先要做的是导航到一个页面。 正常的做法是通过调用get

 driver.get("http://www.google.com"); 

WebDriver将等到页面完全加载(也就是说, onload事件已经被触发),然后再把控制权交onload你的testing或脚本。 值得注意的是,如果您的页面使用了大量的AJAX,WebDriver可能不知道它何时完全加载。 如果您需要确保这些页面已完全加载,那么您可以使用waits

导航:历史和位置

之前,我们使用get命令( driver.get("http://www.example.com") )介绍了如何导航到页面。正如您所看到的,WebDriver具有一些较小的,以任务为中心的界面,并且导航是一个有用的任务。 因为加载一个页面是一个基本的要求,所以要做到这一点的方法主要在WebDriver接口上,但它只是一个同义词:

 driver.navigate().to("http://www.example.com"); 

重申: navigate().to()get()完全一样 。 一个比另一个更容易打字!

navigate界面还提供了在浏览器历史logging中前后移动的function:

 driver.navigate().forward(); driver.navigate().back(); 

(强调添加)

他们似乎都导航到给定的网页和引用@matt答案:

navigate().to()get()完成相同的事情。

单页应用程序是一个例外。

这两种方法的区别并不在于它们的行为,而在于应用程序的行为方式以及浏览器如何处理它们。

navigate().to()导航到页面通过更改URL像进行前进/后退导航。

get()刷新页面来改变URL。

所以,在应用程序域更改的情况下,这两个方法的行为相似。 也就是说,页面在两种情况下都被刷新。 但是,在单页面应用程序中,虽然navigate().to()不会刷新页面,但get()可以。

而且,这也是浏览器历史在使用get()时由于应用程序刷新而丢失的原因。

最初回答: https : //stackoverflow.com/a/33868976/3619412

driver.get()它用于访问特定的网站,但它不保留浏览器的历史logging和cookie,所以我们不能使用前进和后退button,如果我们点击它,页面将不会得到时间表

driver.navigate()它用于访问特定的网站,但它维护浏览器的历史logging和cookie,所以我们可以在testing用例的编码期间使用向前和向后button在页面之间导航

不确定它在这里也适用,但在使用navigate().to(...)的量angular器的情况下,历史被保留,但是当使用get()它会丢失。

我的一个testing失败,因为我连续使用get() 2次,然后执行navigate().back() 。 因为历史遗失了,回去的时候就去了关于页面的一个错误:

 Error: Error while waiting for Protractor to sync with the page: {} 

从我的IE9testing来看,它的价值看起来像是包含hashbang的url(在我的情况下是单页面应用程序):

 http://www.example.com#page 

driver.get("http://www.example.com#anotherpage")方法由浏览器作为片段标识符处理, JavaScriptvariables保留在前一个URL中。

navigate().to("http://www.example.com#anotherpage")navigate().to("http://www.example.com#anotherpage")方法作为地址/位置/ URL栏input进行处理, JavaScriptvariables不会保留在前一个URL中。

如果你碰巧有更多的地方asynchronous行为很重要,你可能想看看一个完美的lib windowlicker允许处理它: http : //code.google.com/p/windowlicker/

否则,你可能想要get方法:

 Load a new web page in the current browser window. This is done using an HTTP GET operation, and the method will block until the load is complete. 

据我所知,导航允许您使用浏览器历史logging。

根据get()的javadoc,它是Navigate.to()的同义词。

查看javadoc截图如下:

javadoc截图

get()的 Javadoc说这一切 –

在当前浏览器窗口中加载新的网页。 这是使用HTTP GET操作完成的,并且该方法将阻塞,直到加载完成。 这将遵循由服务器发出的redirect,或者在返回的HTML中作为元redirect。 如果一个元redirect“rest”了一段时间,最好等到这个超时结束,因为如果你的testing正在执行未来对这个接口的调用结果,底层的页面会发生变化,页。 org.openqa.selenium.WebDriver.Navigation.to(String)的同义词。

driver.get()用于导航特定的URL(网站),并等待页面加载。

driver.navigate()用于导航到特定的URL,不等待页面加载。 它维护浏览器历史logging或Cookie以前后导航。

两者执行相同的function,但driver.get(); 似乎更受欢迎。 driver.navigate().to(); 当你已经在一个脚本的中间,并且你想从当前的URLredirect到一个新的时候,最好使用它。 为了区分你的代码,你可以使用driver.get(); 打开浏览器实例后启动第一个URL,尽pipe两者都可以。