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

时间:2011-04-14 14:30:44

标签: java webdriver selenium-webdriver time-wait

get()navigate()方法之间有什么区别? 是否有任何此方法或其他方法等待加载页面内容? 我真正需要的是像selenium s 1.0 WaitForPageToLoad but for using via webdriver`。

有什么建议吗?

14 个答案:

答案 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()

根据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()

另一方面,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屏幕截图:

javadoc screenshot

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();
                }

            }
  • 所以get()和Navigation()之间的主要区别是,两者都是 执行相同的任务,但是通过使用navigation(),您可以移动 会话历史记录中的back()或forward()。
  • navigate()比get()更快,因为Navigation()不等待 页面完全或完全加载。

答案 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)

  1. driver.get("url")driver.navigate( ).to("url") 都是相同/同义的。

  2. to("url") 内部调用 get("url") 方法。请找到以下图片以供参考。

  3. 它们中的任何一个都不存储历史记录 - 这是大多数博客/网站上提供的错误信息。

  4. 下面的语句 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");
    
  5. 只有 navigate() 可以做不同的事情,例如后退、前进等。但不是 to("url") 方法。

hoover on get() method