2014-09-11 8 views
10

was die bevorzugte Methode ist, eine URL zu öffnen (und gibt es irgendwelche Unterschiede hinter den Kulissen zwischen).Selen driver.Url vs. driver.Navigate() gotoUrl()

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

oder

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

Auch wenn der Treiber bereits auf die gleiche Seite zeigt, führt die zweite Einstellung der Url dazu, dass die Seite aktualisiert wird?

heißt

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

FWIW Ich bin mit dem Chrome-Treiber chromedriver.exe, aber es scheint nicht, eine verwaltete Assembly zu sein (ich versuchte es mit ILSpy Eröffnung aber kein Glück).

Antwort

21

Selen ist ein Open-Source-Framework, bitte sehen Sie sich den Quellcode here an.

GoToUrl() in RemoteNavigator.cs definiert:

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

Also im Grunde driver.Navigate().GoToUrl(); Sets driver.Url unter der Haube, und ich sehe keinen Unterschied gibt.

Jedoch ist driver.Navigate().GoToUrl() flexibler, der entweder string oder Uri als Parametertypen Senden erlaubt, während nur Zeichenkette zulässig ist, wenn sie durch driver.Url Einstellung.


Um Ihre zweite Frage, die Quellcode zeigt, dass driver.Navigate().Refresh() Browser zu aktualisieren, fragt während driver.Url Browser sagt zu navigieren. Diese beiden sind also grundlegend verschieden. Weitere Einzelheiten finden Sie in Difference between Refresh and Navigate function in browser control?

Wenn Sie die Seite aktualisieren möchten, verwenden Sie bitte driver.Navigate().Refresh();

Refresh() definiert in RemoteNavigator.cs:

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

driver.Url in RemoteWebDriver.cs definiert:

public string Url 
{ 
    ... 

    set 
    { 
     ... 

     try 
     { 
      this.Execute(DriverCommand.Get, parameters); 
     } 
     ... 
    } 
} 
+0

Mit Blick auf den Quellcode sieht es wie die Antwort auf meine seco nd Frage ist ja - der Code sagt immer dem Fahrer, die Seite neu zu laden, auch wenn die URL nicht geändert hat. –

+0

@steve: Ja, es hängt davon ab, wie Sie die Worte "reload" und "refresh" definieren. ;) –

Verwandte Themen