get()
和navigate()
方法之间有什么区别?
是否有任何此方法或其他方法等待加载页面内容?
我真正需要的是像selenium s 1.0
WaitForPageToLoad but for using via
webdriver`。
有什么建议吗?
答案 0 :(得分:93)
Navigating
您要对WebDriver做的第一件事是导航到页面。通常的方法是调用
get
:driver.get("http://www.google.com");
WebDriver将等到页面完全加载(即
onload
事件已触发),然后再将控制权返回给您的测试或脚本。值得注意的是,如果您的页面在加载时使用了大量AJAX,那么WebDriver可能不知道它何时完全加载。如果您需要确保此类页面已完全加载,则可以使用waits
。Navigation: History and Location
之前,我们介绍了使用
get
命令(driver.get("http://www.example.com")
)导航到页面正如您所见,WebDriver有许多较小的,以任务为中心的界面,导航是一项有用的任务。因为加载页面是一个基本要求,所以这样做的方法存在于主WebDriver接口上,但它只是一个同义词:driver.navigate().to("http://www.example.com");
重申:
navigate().to()
和get()
执行完全相同的操作。一个人比另一个人更容易打字!
navigate
界面还提供了在浏览器历史记录中前后移动的功能:driver.navigate().forward(); driver.navigate().back();
(强调添加)
答案 1 :(得分:7)
driver.get()
:它过去常常访问特定网站,但它不会维护浏览器的历史记录和Cookie,所以,我们无法做到使用前进和后退按钮,如果我们点击它,页面将无法获得时间表
driver.navigate()
:它过去曾经去过特定的网站,但它维护着浏览器历史记录和Cookie,因此我们可以使用前进和后退按钮在Testcase编码过程中的页面
答案 2 :(得分:3)
不确定它是否也适用于此,但在使用navigate().to(...)
时,量角器会保留历史记录但使用get()
时会丢失。
我的一项测试失败了,因为我连续两次使用get()
然后执行navigate().back()
。因为历史记录丢失了,当它返回时它转到了about页面并且抛出了一个错误:
Error: Error while waiting for Protractor to sync with the page: {}
答案 3 :(得分:2)
对于它的价值,从我的IE9测试来看,对于包含hashbang(单页应用程序,在我的情况下)的网址来说,似乎有所不同:
http://www.example.com#page
driver.get("http://www.example.com#anotherpage")
方法由浏览器作为片段标识符处理, JavaScript变量保留来自之前的网址。
同时,navigate().to("http://www.example.com#anotherpage")
方法由浏览器处理为地址/位置/网址栏输入, JavaScript变量不会保留来自之前的网址。
答案 4 :(得分:1)
navigate()。to()和get()将一样。当你不止一次使用它时,然后使用navigate()。to()你可以随时来到上一页,而你可以使用get()来做同样的事情。
结论:navigate()。to()包含当前窗口的整个历史记录,get()只是重新加载页面并保存任何历史记录。
答案 5 :(得分:1)
webdriver.get()
和webdriver.navigate()
方法之间存在一些差异。
根据get()界面中的 API文档 WebDriver方法,扩展了SearchContext并定义为:
/**
* Load a new web page in the current browser window. This is done using an HTTP POST operation,
* and the method will block until the load is complete.
* This will follow redirects issued either by the server or as a meta-redirect from within the
* returned HTML.
* Synonym for {@link org.openqa.selenium.WebDriver.Navigation#to(String)}.
*/
void get(String url);
用法:
driver.get("https://www.google.com/");
另一方面,navigate()是abstraction,它允许WebDriver实例(即driver
)访问浏览器的历史记录以及导航到给定的URL 。这些方法及其用法如下:
to(java.lang.String url)
:在当前浏览器窗口中加载新网页。
driver.navigate().to("https://www.google.com/");
to(java.net.URL url)
:to(String)的重载版本,可以轻松地传递URL。
refresh()
:刷新当前页面。
driver.navigate().refresh();
back()
:在浏览器的历史记录中向后移一个“项目”。
driver.navigate().back();
forward()
:在浏览器的历史记录中向前移动一个“项目”。
driver.navigate().forward();
答案 6 :(得分:0)
否则你会想要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.
导航允许您根据我的理解使用浏览器历史记录。
答案 7 :(得分:0)
两者都执行相同的功能但driver.get();似乎更受欢迎。
当您已经处于脚本中间并且想要从当前URL重定向到新URL时,最好使用driver.navigate().to();
。为了区分您的代码,您可以在打开浏览器实例后使用driver.get();
启动第一个URL,尽管两者都可以正常工作。
答案 8 :(得分:0)
根据get()的javadoc,它是Navigate.to()的同义词
查看下面的javadoc屏幕截图:
get()的Javadoc说明了一切 -
在当前浏览器窗口中加载新网页。这是使用完成的 HTTP GET操作,该方法将阻塞,直到加载为止 完成。这将遵循服务器或as发出的重定向 从返回的HTML中进行元重定向。应该是元重定向 “休息”任何持续时间,最好等到这个超时 结束了,因为在测试时基础页面会发生变化 执行针对此接口的未来调用的结果将是 反对新装载的页面。 同义词 org.openqa.selenium.WebDriver.Navigation.to(String) 强>
答案 9 :(得分:0)
driver.get()
用于导航特定的URL(网站)并等到页面加载。
driver.navigate()
用于导航到特定的URL,不等待页面加载。它维护浏览器历史记录或cookie以便向后或向前导航。
答案 10 :(得分:0)
driver.get(url)
和navigate.to(url)
都用于转到特定网页。关键的区别在于
driver.get(url)
:它不维护浏览器历史记录和cookie,并等待页面完全加载。
driver.navigate.to(url)
:它还用于访问特定网页。维护浏览器历史记录和Cookie,不会完全加载页面,并在页面之间进行导航,转发和刷新。
答案 11 :(得分:0)
案例1
在下面的代码中,我导航到3个不同的URL,当执行导航命令时,它导航回 facebook 主页。
public class FirefoxInvoke {
@Test
public static void browserInvoke()
{
System.setProperty("webdriver.gecko.driver", "gecko-driver-path");
WebDriver driver=new FirefoxDriver();
System.out.println("Before"+driver.getTitle());
driver.get("http://www.google.com");
driver.get("http://www.facebook.com");
driver.get("http://www.india.com");
driver.navigate().back();
driver.quit();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
browserInvoke();
}
}
情况2:
在下面的代码中,我使用了Navigation()而不是get(),但是两个代码片段(Case-1和Case-2)的工作方式完全相同,只是case-2的执行时间少于case -1
public class FirefoxInvoke {
@Test
public static void browserInvoke()
{
System.setProperty("webdriver.gecko.driver", "gecko-driver-path");
WebDriver driver=new FirefoxDriver();
System.out.println("Before"+driver.getTitle());
driver.navigate().to("http://www.google.com");
driver.navigate().to("http://www.facebook.com");
driver.navigate().to("http://www.india.com");
driver.navigate().back();
driver.quit();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
browserInvoke();
}
}
答案 12 :(得分:0)
要更好地理解它,必须了解Selenium WebDriver的体系结构。
只需访问https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
并搜索“导航到新URL”。文本。您将同时看到GET和POST方法。
因此得出以下结论:
driver.get()方法在内部将Get请求发送到Selenium Server Standalone。而driver.navigate()方法将Post请求发送到Selenium Server Standalone。
希望有帮助
答案 13 :(得分:0)
driver.get("url")
和 driver.navigate( ).to("url")
都是相同/同义的。
to("url")
内部调用 get("url")
方法。请找到以下图片以供参考。
它们中的任何一个都不存储历史记录 - 这是大多数博客/网站上提供的错误信息。
下面的语句 1、2 和 3、4 将执行相同的操作,即进入给定的 URL。
statemnt 1: driver.get("http://www.google.com");
statemnt 2: driver.navigate( ).to("http://www.amazon.in");
statemnt 3: driver.get("http://www.google.com");
statemnt 4: driver.get("http://www.amazon.in");
只有 navigate()
可以做不同的事情,例如后退、前进等。但不是 to("url")
方法。