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

时间:2014-09-11 02:41:52

标签: c# selenium selenium-webdriver webdriver

打开网址的首选方法是什么(背后是否有任何差异):

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驱动程序chromedriver.exe,但它似乎不是一个托管程序集(我试过用ILSpy打开它但没有运气)。

2 个答案:

答案 0 :(得分:29)

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()更灵活,允许发送stringUri作为参数类型,而在设置driver.Url时只允许使用字符串。


关于第二个问题,源代码显示driver.Navigate().Refresh()要求浏览器刷新,而driver.Url则告诉浏览器导航。所以这两者根本不同。有关详细信息,请参阅Difference between Refresh and Navigate function in browser control?

如果您想刷新页面,请使用driver.Navigate().Refresh();

Refresh()RemoteNavigator.cs中定义:

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

driver.UrlRemoteWebDriver.cs中定义:

public string Url
{
    ...

    set
    {
        ...

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

答案 1 :(得分:0)

添加到 Yi Zeng 的回答中,重新加载和刷新之间的区别与有关页面的驱动程序信息有关。如果我们再次重新分配 driver.Url = url,内存将再次承载这个覆盖的字符串值——无论是否相同。而刷新与显示更新的数据有关。