Java webdriver.get()和webdriver.navigate()之间的差异

Java webdriver.get()和webdriver.navigate()之间的差异,java,webdriver,selenium-webdriver,time-wait,Java,Webdriver,Selenium Webdriver,Time Wait,get()和navigate()方法之间有什么区别? 是否有此方法或其他方法等待页面内容加载? 我真正需要的是类似Selenium 1.0的WaitForPageToLoad,但用于通过webdriver使用 有什么建议吗 使用WebDriver要做的第一件事是导航到页面。通常的方法是调用get: driver.get("http://www.google.com"); WebDriver将等待页面完全加载(即触发onload事件),然后再将控件返回到测试或脚本。值得注意的

get()
navigate()
方法之间有什么区别? 是否有此方法或其他方法等待页面内容加载? 我真正需要的是类似Selenium 1.0的
WaitForPageToLoad
,但用于通过
webdriver
使用

有什么建议吗

使用WebDriver要做的第一件事是导航到页面。通常的方法是调用
get

driver.get("http://www.google.com");
WebDriver将等待页面完全加载(即触发
onload
事件),然后再将控件返回到测试或脚本。值得注意的是,如果您的页面在加载时使用了大量AJAX,那么WebDriver可能不知道它何时已完全加载。如果需要确保这些页面已完全加载,则可以使用
waits

前面,我们介绍了使用
get
命令(
driver.get(“http://www.example.com正如您所看到的,WebDriver有许多更小的、以任务为中心的界面,导航是一项有用的任务。由于加载页面是一项基本要求,因此执行此操作的方法存在于主WebDriver界面上,但它只是以下内容的同义词:

driver.navigate().to("http://www.example.com");
重申:
导航()。到()
获取()
做完全相同的事情。一个比另一个更容易打字

导航
界面还提供了在浏览器历史记录中前后移动的功能:

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

(添加了强调)

否则您可能需要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.

据我所知,Navigate允许您使用浏览器历史记录。

不确定它是否也适用于此处,但在使用
Navigate()时适用于量角器。to(…)
将保留历史记录,但在使用
get()
时,历史记录将丢失

我的一个测试失败了,因为我连续使用了两次
get()
,然后执行了
navigate().back()
。由于历史记录丢失,返回时会转到“关于”页面并引发错误:

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

值得一提的是,从我的IE9测试来看,包含hashbang(在我的例子中是一个单页应用程序)的URL似乎有区别:

driver.get(“http://www.example.com#anotherpage“”
方法由浏览器作为片段标识符处理,并且JavaScript变量保留在上一个URL中


同时,
导航()到(“http://www.example.com#anotherpage“
方法由浏览器作为地址/位置/URL栏输入进行处理,JavaScript变量不会从以前的URL中保留。

它们似乎都导航到给定的网页并引用@matt answer:

navigate()。to()
get()
执行完全相同的操作

单页应用程序属于例外

这两种方法之间的区别不是来自它们的行为,而是来自应用程序工作方式的行为以及浏览器如何处理它

navigate().to()
通过更改URL来导航页面,就像进行向前/向后导航一样

然而,
get()
刷新页面以更改URL

因此,在应用程序域发生更改的情况下,这两种方法的行为相似。也就是说,在这两种情况下都会刷新页面。但是,在单页应用程序中,当
navigate().to()
不刷新页面时,
get()
do

此外,这也是由于应用程序被刷新而使用
get()
时浏览器历史记录丢失的原因


最初的回答是:

两者执行相同的函数,但driver.get()除外;似乎更受欢迎。
driver.navigate().to()。为了区分代码,可以使用
driver.get()
在打开浏览器实例后启动第一个URL,尽管两种方式都可以。

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

查看下面的javadoc屏幕截图:

Javadoc forget()说明了一切-

在当前浏览器窗口中加载新网页。这是通过使用 HTTP GET操作,该方法将阻塞,直到加载完成 完成这将遵循服务器或as发出的重定向 返回的HTML中的元重定向。元数据是否应该重定向 “rest”对于任何持续时间,最好等到这个超时 已结束,因为在测试结束时基础页面是否应该更改 对该接口执行未来调用的结果将是 在新加载的页面上的同义词 .

driver.get()
它用于访问特定的网站,但它不维护浏览器历史记录和cookies,因此,我们不能使用“前进”和“后退”按钮,如果我们单击该按钮,页面将无法获得时间表

driver.navigate()
它用于转到特定的网站,但它维护浏览器历史记录和cookies,因此我们可以在编写测试用例的过程中使用向前和向后按钮在页面之间导航。
driver.get()
用于导航特定的URL(网站)然后等待页面加载

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

navigate()。首次使用时,to()和get()的工作方式相同。如果您多次使用它,然后使用navigate().to()可以随时转到上一页,而使用get()也可以转到上一页

结论:navigate().to()保存当前窗口的整个历史记录
http://www.example.com#page
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();
                }

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

            }
/**
 * 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/");
driver.navigate().to("https://www.google.com/");
driver.navigate().refresh();
driver.navigate().back();
driver.navigate().forward();