2014-09-11 10 views
10

Qual è il metodo preferito per aprire un URL (e non ci sono differenze tra i dietro le quinte):.Selenio driver.Url vs. driver.Navigate() GoToUrl()

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

o

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

Inoltre, se il driver sta già puntando verso la stessa pagina, l'Url verrà impostato una seconda volta perché la pagina si aggiorni?

cioè

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

FWIW sto usando il driver chromedriver.exe Chrome, ma non sembra essere un assembly gestito (ho provato ad aprirla con ILSpy ma senza fortuna).

risposta

21

Il selenio è un framework open source, quindi si prega di dare un'occhiata al codice sorgente here.

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

Quindi, in pratica driver.Navigate().GoToUrl(); set driver.Url sotto il cofano e non vedo una differenza c'è.

Tuttavia, driver.Navigate().GoToUrl() è più flessibile, che permette l'invio sia string o Uri come tipi di parametri, mentre solo stringa viene consentita quando si imposta attraverso driver.Url.


Per la seconda domanda, il codice sorgente mostra che driver.Navigate().Refresh() chiede browser per aggiornare, mentre driver.Url dice browser per navigare. Quindi questi due sono fondamentalmente diversi. Per maggiori dettagli, vedere Difference between Refresh and Navigate function in browser control?

Se si desidera aggiornare la pagina, si prega di utilizzare driver.Navigate().Refresh();

Refresh() è definito in RemoteNavigator.cs:

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

driver.Url è definito in RemoteWebDriver.cs:

public string Url 
{ 
    ... 

    set 
    { 
     ... 

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

Guardando il codice sorgente che hai fornito sembra la risposta al mio seco La domanda è sì - il codice dice sempre al driver di ricaricare la pagina, anche se l'Url non è cambiato. –

+0

@steve: Sì, dipende da come si definiscono le parole "ricaricare" e "aggiornare". ;) –

Problemi correlati