打开网址的首选方法是什么(背后是否有任何差异):
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打开它但没有运气)。
答案 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()
更灵活,允许发送string
或Uri
作为参数类型,而在设置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.Url
在RemoteWebDriver.cs中定义:
public string Url
{
...
set
{
...
try
{
this.Execute(DriverCommand.Get, parameters);
}
...
}
}
答案 1 :(得分:0)
添加到 Yi Zeng 的回答中,重新加载和刷新之间的区别与有关页面的驱动程序信息有关。如果我们再次重新分配 driver.Url = url,内存将再次承载这个覆盖的字符串值——无论是否相同。而刷新与显示更新的数据有关。