哪种方法是打开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?
...我正在使用Chrome驱动程序chromedriver.exe,但它似乎不是一个托管程序集(我尝试用ILSpy打开它,但没有成功)。
发布于 2014-09-11 16:04:20
Selenium是一个开源的框架,所以请看一下源代码here。
在RemoteNavigator.cs中定义了GoToUrl()
/// <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();
在RemoteNavigator.cs中定义了Refresh()
/// <summary>
/// Refresh the browser
/// </summary>
public void Refresh()
{
// driver.SwitchTo().DefaultContent();
this.driver.InternalExecute(DriverCommand.Refresh, null);
}在RemoteWebDriver.cs中定义了driver.Url
public string Url
{
...
set
{
...
try
{
this.Execute(DriverCommand.Get, parameters);
}
...
}
}发布于 2021-07-16 23:30:36
除了易增的回答外,重新加载和刷新之间的差异与页面的驱动程序信息有关。如果我们再次重新分配driver.Url = url,内存将再次托管这个被覆盖的字符串值-regardless。而刷新则与显示更新的数据有关。
https://stackoverflow.com/questions/25778228
复制相似问题