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截图如下:
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两者都可以。