硒驱动程序.Url与驱动程序.导航().转到URL()

本文关键字:驱动程序 URL 转到 导航 Url | 更新日期: 2023-09-27 18:21:31

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

硒驱动程序.Url与驱动程序.导航().转到URL()

Selenium是一个开源框架,因此请查看此处的源代码。

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告诉浏览器导航。所以这两者有根本的不同。有关更多详细信息,请参阅浏览器控件中刷新和导航功能的区别?

如果您想刷新页面,请使用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);
        }
        ...
    }
}

除了易曾的回答之外,重新加载和刷新之间的区别与页面的驱动程序信息有关。如果我们再次重新分配driver.Url,内存将再次承载此重写的字符串值,而不管是否相同。而刷新与显示更新的数据有关。