web-dev-qa-db-ja.com

Selenium driver.Urlとdriver.Navigate()。GoToUrl()

Urlを開くための推奨される方法は次のとおりです(また、舞台裏で違いがあります)。

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

または

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

また、ドライバーが既に同じページを指している場合、再度Urlを設定するとページが更新されますか?

つまり.

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

FWIW Chrome driver chromedriver.exeを使用していますが、マネージアセンブリではないようです(ILSpyで開いてみましたが、運はありません)。

16
steve cook

Seleniumはオープンソースのフレームワークですので、ソースコードをご覧ください here

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

したがって、基本的にdriver.Navigate().GoToUrl();は内部で_driver.Url_を設定しますが、違いは見当たりません。

ただし、driver.Navigate().GoToUrl()はより柔軟で、stringまたはUriのいずれかをパラメータータイプとして送信できますが、_driver.Url_を介して設定する場合は文字列のみが許可されます。


2番目の質問に対して、ソースコードはdriver.Navigate().Refresh()がブラウザーに更新を要求し、_driver.Url_がブラウザーに移動するように指示することを示しています。したがって、これら2つは根本的に異なります。詳細については、「 ブラウザコントロールの更新機能とナビゲート機能の違い?

ページを更新する場合は、driver.Navigate().Refresh();を使用してください

Refresh()RemoteNavigator.cs で定義されています:

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

_driver.Url_は RemoteWebDriver.cs で定義されています:

_public string Url
{
    ...

    set
    {
        ...

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