硒驱动程序.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打开它,但没有成功)。
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()
更灵活,可以发送string
或Uri
作为参数类型,而通过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,内存将再次承载此重写的字符串值,而不管是否相同。而刷新与显示更新的数据有关。