get()
和方法有什么区别navigate()
?是否有任何这种或另一种方法等待页面内容加载?我真正需要的是类似 Selenium 1.0 的东西,WaitForPageToLoad
但要使用 via webdriver
。
有什么建议么?
get()
和方法有什么区别navigate()
?是否有任何这种或另一种方法等待页面内容加载?我真正需要的是类似 Selenium 1.0 的东西,WaitForPageToLoad
但要使用 via webdriver
。
有什么建议么?
Navigating
The first thing you’ll want to do with WebDriver is navigate to a page. The normal way to do this is by calling
get
:driver.get("http://www.google.com");
WebDriver will wait until the page has fully loaded (that is, the
onload
event has fired) before returning control to your test or script. It’s worth noting that if your page uses a lot of AJAX on load then WebDriver may not know when it has completely loaded. If you need to ensure such pages are fully loaded then you can usewaits
.Navigation: History and Location
Earlier, we covered navigating to a page using the
get
command (driver.get("http://www.example.com")
) As you’ve seen, WebDriver has a number of smaller, task-focused interfaces, and navigation is a useful task. Because loading a page is such a fundamental requirement, the method to do this lives on the main WebDriver interface, but it’s simply a synonym to:driver.navigate().to("http://www.example.com");
To reiterate:
navigate().to()
andget()
do exactly the same thing. One's just a lot easier to type than the other!The
navigate
interface also exposes the ability to move backwards and forwards in your browser’s history:driver.navigate().forward(); driver.navigate().back();
(Emphasis added)
他们似乎都导航到给定的网页并引用@matt 的答案:
navigate().to()
并get()
做同样的事情。
单页应用程序是一个例外。
这两种方法之间的区别不在于它们的行为,而在于应用程序工作方式的行为以及浏览器如何处理它。
navigate().to()
通过更改 URL 来导航到页面,例如向前/向后导航。
然而,get()
刷新页面以更改 URL。
因此,在应用程序域发生变化的情况下,这两种方法的行为都相似。也就是说,在这两种情况下都会刷新页面。但是,在单页应用程序中,虽然navigate().to()
不刷新页面,get()
但会这样做。
get()
此外,这也是由于刷新应用程序而导致使用浏览器历史记录丢失的原因。
driver.get()
:用于访问特定网站,但不维护浏览器历史记录和cookies,所以不能使用前进和后退按钮,如果点击,页面将无法获取日程
driver.navigate()
:用于访问特定网站,但它维护了浏览器历史记录和cookies,因此我们可以在Testcase编码过程中使用前进和后退按钮在页面之间导航
不确定它是否也适用于此,但在量角器的情况下,使用navigate().to(...)
历史时会保留但使用get()
时会丢失。
我的一个测试失败了,因为我连续使用get()
了 2 次,然后做了一个navigate().back()
. 因为历史丢失了,回去的时候到about页面报错:
Error: Error while waiting for Protractor to sync with the page: {}
对于它的价值,从我的 IE9 测试来看,包含 hashbang(在我的例子中是单页应用程序)的 URL 似乎有所不同:
http://www.example.com#page
该driver.get("http://www.example.com#anotherpage")
方法由浏览器作为片段标识符处理,并且JavaScript 变量从先前的 URL 中保留。
同时,该navigate().to("http://www.example.com#anotherpage")
方法由浏览器作为地址/位置/URL 栏输入处理,并且JavaScript 变量不会从先前的 URL 中保留。
driver.get()
用于导航特定的 URL(网站)并等待页面加载。
driver.navigate()
用于导航到特定的 URL,而不是等待页面加载。它维护浏览器历史记录或 cookie 以向后或向前导航。
根据 get() 的 javadoc,它是 Navigate.to() 的同义词
查看下面的 javadoc 屏幕截图:
get()的 Javadoc说明了一切——
在当前浏览器窗口中加载新网页。这是使用 HTTP GET 操作完成的,该方法将阻塞直到加载完成。这将遵循服务器发出的重定向或作为返回 HTML 中的元重定向。如果元重定向在任何时间段内“休息”,最好等到此超时结束,因为如果底层页面在您的测试执行时发生变化,未来对该接口的调用结果将与新加载的结果相反页。org.openqa.selenium.WebDriver.Navigation.to(String)的同义词 。
navigate().to()
并且get()
在您第一次使用时会起作用。当您多次使用它时,navigate().to()
您可以随时进入上一页,而您也可以使用get()
.
结论:navigate().to()
保存当前窗口的整个历史,get()
只需重新加载页面并保存任何历史。
webdriver.get()
和webdriver.navigate()
方法之间有一些区别。
根据WebDriver接口中的API Docs get()方法扩展了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()是允许WebDriver实例访问浏览器历史以及导航到给定 URL的抽象。方法及用法如下:driver
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();
否则,您可能需要 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.
据我了解,导航允许您使用浏览器历史记录。
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")
方法。
两者执行相同的功能,但 driver.get(); 似乎更受欢迎。
driver.navigate().to();
最好在您已经处于脚本中间并且想要从当前 URL 重定向到新 URL 时使用。为了区分您的代码,您可以driver.get();
在打开浏览器实例后使用启动第一个 URL,尽管两者都可以。
为了更好地理解它,必须查看 Selenium WebDriver 的架构。
只需访问https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
并搜索“导航到新 URL”。文本。您将看到 GET 和 POST 两种方法。
因此得出以下结论:
driver.get()
方法在内部向 Selenium Server Standalone 发送 Get 请求。而driver.navigate()
方法将 Post 请求发送到 Selenium Server Standalone。
driver.get(url)
两者navigate.to(url)
都用于访问特定的网页。主要区别在于
driver.get(url)
:它不维护浏览器历史记录和cookies,并等待页面完全加载。
driver.navigate.to(url)
:它也用于访问特定的网页。它维护浏览器历史记录和cookies,并且不等到页面完全加载并且在页面之间进行导航,前进和刷新。
情况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:
在下面的代码中,我使用了 navigate() 而不是 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();
}
}