web-dev-qa-db-fra.com

Sélénium driver.Url vs driver.Navigate (). GoToUrl ()

Quelle est la méthode préférée pour ouvrir une URL (et y a-t-il des différences entre les scènes):

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

ou

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

De plus, si le pilote pointe déjà vers la même page, la définition de l'URL une deuxième fois entraînera-t-elle l'actualisation de la page?

c'est à dire.

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

FWIW J'utilise le pilote Chrome chromedriver.exe, mais il ne semble pas être un assembly géré (j'ai essayé de l'ouvrir avec ILSpy mais pas de chance).

16
steve cook

Selenium est un framework open source, veuillez donc consulter le code source ici .

GoToUrl() est définie dans 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();
}

Donc, fondamentalement, driver.Navigate().GoToUrl(); place driver.Url Sous le capot et je n'y vois aucune différence.

Cependant, driver.Navigate().GoToUrl() est plus flexible, ce qui permet d'envoyer string ou Uri comme types de paramètres, tandis que seule la chaîne est autorisée lors de la définition via driver.Url.


À votre deuxième question, le code source montre que driver.Navigate().Refresh() demande aux navigateurs de se rafraîchir, tandis que driver.Url Dit aux navigateurs de naviguer. Ces deux éléments sont donc fondamentalement différents. Pour plus de détails, veuillez consulter Différence entre la fonction Actualiser et Naviguer dans le contrôle du navigateur?

Si vous souhaitez rafraîchir la page, veuillez utiliser driver.Navigate().Refresh();

Refresh() est définie dans RemoteNavigator.cs :

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

driver.Url Est défini dans RemoteWebDriver.cs :

public string Url
{
    ...

    set
    {
        ...

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