Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium driver.Url vs. driver.Navigate().GoToUrl()

Tags:

Which is the preferred method to open a Url (and are there any differences behind the scenes between):

driver.Url = "http://example.com"; 

or

driver.Navigate().GoToUrl("http://example.com"); 

Also, if the driver is already pointing at the same page, will setting the Url a second time cause the page to refresh?

i.e.

... driver.Url = "http://example.com"; driver.Url = "http://example.com"; //does this reload the page? ... 

FWIW I'm using the Chrome driver chromedriver.exe, but it doesn't appear to be a managed assembly (I tried opening it with ILSpy but no luck).

like image 380
steve cook Avatar asked Sep 11 '14 02:09

steve cook


People also ask

What is the difference between driver get () and driver navigate to URL?

get() is used to navigate particular URL(website) and wait till page load. driver. navigate() is used to navigate to particular URL and does not wait to page load. It maintains browser history or cookies to navigate back or forward.

What is difference between get () and navigate () to () in Selenium?

get("http://www.google.com"); While driver.navigate.to() method navigates to an URL and It will not wait till the whole page gets loaded. It maintains the browser history and cookies, so we can use forward and backward button to navigate between the pages during the coding of Testcase.


1 Answers

Selenium is an open source framework, so please have a look at the source code here.

GoToUrl() is defined in RemoteNavigator.cs:

/// <summary> /// Navigate to a url for your test /// </summary> /// <param name="url">String of where you want the browser to go to</param> public void GoToUrl(string url) {     this.driver.Url = url; }  /// <summary> /// Navigate to a url for your test /// </summary> /// <param name="url">Uri object of where you want the browser to go to</param> public void GoToUrl(Uri url) {     if (url == null)     {         throw new ArgumentNullException("url", "URL cannot be null.");     }      this.driver.Url = url.ToString(); } 

So basically driver.Navigate().GoToUrl(); sets driver.Url under the hood and I don't see a difference there.

However, driver.Navigate().GoToUrl() is more flexible, which allows sending either string or Uri as parameter types, while only string is allowed when setting through driver.Url.


To your second question, the source code shows that driver.Navigate().Refresh() asks browsers to refresh, while driver.Url tells browsers to navigate. So these two are fundamentally different. For more details, please see Difference between Refresh and Navigate function in browser control?

If you want to refresh the page, please use driver.Navigate().Refresh();

Refresh() is defined in RemoteNavigator.cs:

/// <summary> /// Refresh the browser /// </summary> public void Refresh() {     // driver.SwitchTo().DefaultContent();     this.driver.InternalExecute(DriverCommand.Refresh, null); } 

driver.Url is defined in RemoteWebDriver.cs:

public string Url {     ...      set     {         ...          try         {             this.Execute(DriverCommand.Get, parameters);         }         ...     } } 
like image 90
Yi Zeng Avatar answered Sep 29 '22 16:09

Yi Zeng