webentwicklung-frage-antwort-db.com.de

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

Welches ist die bevorzugte Methode zum Öffnen einer URL (und gibt es Unterschiede hinter den Kulissen zwischen):

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

oder

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

Wenn der Treiber bereits auf dieselbe Seite zeigt, wird durch erneutes Einstellen der URL die Seite aktualisiert?

d.h.

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

FWIW Ich verwende den Chrome driver chromedriver.exe, aber es scheint keine verwaltete Assembly zu sein (ich habe versucht, sie mit ILSpy zu öffnen, aber kein Glück).

16
steve cook

Selenium ist ein Open-Source-Framework, schauen Sie sich also bitte den Quellcode an hier .

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

Also legt driver.Navigate().GoToUrl(); im Grunde driver.Url unter die Haube und ich sehe dort keinen Unterschied.

Allerdings ist driver.Navigate().GoToUrl() flexibler, wodurch entweder string oder Uri als Parametertypen gesendet werden können, während bei der Einstellung durch driver.Url nur Zeichenfolgen zulässig sind.


Zu Ihrer zweiten Frage zeigt der Quellcode, dass driver.Navigate().Refresh() Browser zum Aktualisieren auffordert, während driver.Url Browser zum Navigieren auffordert. Diese beiden unterscheiden sich also grundlegend. Weitere Informationen finden Sie unter nterschied zwischen Aktualisieren und Navigieren in der Browsersteuerung?

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

Refresh() ist definiert in RemoteNavigator.cs :

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

driver.Url ist definiert in RemoteWebDriver.cs :

public string Url
{
    ...

    set
    {
        ...

        try
        {
            this.Execute(DriverCommand.Get, parameters);
        }
        ...
    }
}
29
Yi Zeng