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

||
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\");
     重申一下:
navigate().to()
get()
做完全相同的事情。一个比另一个更容易键入!      
navigate
界面还提供了在浏览器历史记录中来回移动的功能:
driver.navigate().forward();
driver.navigate().back();
(添加了强调)     
他们俩似乎都导航到给定的网页并引用@matt答案:   
navigate().to()
get()
做的完全相同。 单页应用程序是一个例外。 这两种方法之间的区别不在于其行为,而在于应用程序工作方式以及浏览器如何处理的行为。
navigate().to()
像进行前进/后退导航一样通过更改URL导航到页面。 而“ 0”刷新页面以更改URL。 因此,在应用程序域发生更改的情况下,两种方法的行为都相似。也就是说,在两种情况下页面都会刷新。但是,在单页应用程序中,尽管
navigate().to()
不会刷新页面,而
get()
会刷新页面。 此外,这是由于刷新应用程序而使用
get()
时浏览器历史记录丢失的原因。 最初回答:https://stackoverflow.com/a/33868976/3619412     
driver.get()
:它曾经去过特定的网站,但是它不维护浏览器的历史记录和cookie,因此,我们不能使用前进和后退按钮,如果单击该按钮,则页面将无法获得时间表
driver.navigate()
:它曾经用于访问特定的网站,但它保留了浏览器的历史记录和cookie,因此我们在测试用例的编码过程中可以使用前进和后退按钮在页面之间导航     
不确定它是否也适用于此,但是对于使用量角器的情况,使用
navigate().to(...)
时,将保留历史记录,但是使用
get()
时将丢失历史记录。 我的测试之一失败了,因为我连续两次使用
get()
,然后再进行
navigate().back()
。由于历史记录已丢失,因此当返回时,它会转到“关于”页面,并引发错误:
Error: Error while waiting for Protractor to sync with the page: {}
    
从我的IE9测试来看,它的价值似乎与包含hashbang(在我的情况下为单页应用)的URL有所不同:
http://www.example.com#page
浏览器将“ 30”方法作为片段标识符处理,并且从先前的URL中保留了JavaScript变量。 同时,浏览器将使用“ 31”方法作为地址/位置/ URL栏输入,并且不会从先前的URL中保留JavaScript变量。     
首次使用时,navigate()。to()和get()的工作原理相同。如果不止一次使用它,则可以使用Navigation()。to()随时进入上一页,而使用get()可以进行相同操作。 结论:navigation()。to()保留当前窗口的全部历史记录,而get()只是重新加载页面并保留任何历史记录。     
根据get()的javadoc,它是Navigate.to()的同义词 查看下面的javadoc屏幕截图: Javadoc for get()可以说明一切-   在当前浏览器窗口中加载新网页。这是使用完成的   HTTP GET操作,该方法将阻塞,直到加载   完成。这将遵循服务器或服务器发出的重定向   返回的HTML中的元重定向。应该进行元重定向   在任何时间段内“休息”,最好等到此超时   已经结束,因为在测试期间基础页面是否应该更改   在此接口上执行将来调用的结果将是   针对新加载的页面。的同义词   org.openqa.selenium.WebDriver.Navigation.to(String)。     
driver.get()
用于导航特定的URL(网站)并等待页面加载。
driver.navigate()
用于导航到特定的URL,而无需等待页面加载。它维护浏览器历史记录或cookie,以向后或向前导航。     
两者执行相同的功能,但driver.get();似乎更受欢迎。 如果您已经在脚本中间,并且想要从当前URL重定向到新的URL,最好使用
driver.navigate().to();
。为了区分代码,您可以在打开浏览器实例后使用ѭ35来启动第一个URL,尽管两者都可以使用。     
driver.get(url)
navigate.to(url)
都用于转到特定的网页。关键区别在于
driver.get(url)
:它不保留浏览器历史记录和cookie,并且要等到页面完全加载为止。
driver.navigate.to(url)
:也用于转到特定网页。它维护浏览器历史记录和cookie,并且不会完全加载页面,并且在页面之间进行导航,后退,前进和刷新。     
情况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()。 navigation()比get()更快,因为Navigation()不等待 页面完全或完全加载。     
否则,您可能需要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.
据我所知,导航允许您使用浏览器历史记录。     
为了更好地理解它,必须了解Selenium WebDriver的体系结构。 只需访问https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol 并搜索\“导航到新URL。\”文本。您将同时看到GET和POST方法。 因此得出以下结论: driver.get()方法在内部将Get请求发送到Selenium Server Standalone。而driver.navigate()方法将发布请求发送到Selenium Server Standalone。 希望能帮助到你     

要回复问题请先登录注册