首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium driver.Url与driver.Navigate().GoToUrl()

Selenium driver.Url与driver.Navigate().GoToUrl()
EN

Stack Overflow用户
提问于 2014-09-11 10:41:52
回答 2查看 91K关注 0票数 22

哪种方法是打开Url的首选方法(这两种方法在幕后有什么区别):

代码语言:javascript
复制
driver.Url = "http://example.com";

代码语言:javascript
复制
driver.Navigate().GoToUrl("http://example.com");

另外,如果驱动程序已经指向同一页面,第二次设置Url是否会导致页面刷新?

代码语言:javascript
复制
...
driver.Url = "http://example.com";
driver.Url = "http://example.com"; //does this reload the page?
...

我正在使用Chrome驱动程序chromedriver.exe,但它似乎不是一个托管程序集(我尝试用ILSpy打开它,但没有成功)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 16:04:20

Selenium是一个开源的框架,所以请看一下源代码here

RemoteNavigator.cs中定义了GoToUrl()

代码语言:javascript
复制
/// <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();

RemoteNavigator.cs中定义了Refresh()

代码语言:javascript
复制
/// <summary>
/// Refresh the browser
/// </summary>
public void Refresh()
{
    // driver.SwitchTo().DefaultContent();
    this.driver.InternalExecute(DriverCommand.Refresh, null);
}

RemoteWebDriver.cs中定义了driver.Url

代码语言:javascript
复制
public string Url
{
    ...

    set
    {
        ...

        try
        {
            this.Execute(DriverCommand.Get, parameters);
        }
        ...
    }
}
票数 35
EN

Stack Overflow用户

发布于 2021-07-16 23:30:36

除了易增的回答外,重新加载和刷新之间的差异与页面的驱动程序信息有关。如果我们再次重新分配driver.Url = url,内存将再次托管这个被覆盖的字符串值-regardless。而刷新则与显示更新的数据有关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25778228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档