我想启动新的浏览器Chrome进程。
在类ChromeDriver
中,有一个方法可以做到这一点。
并尝试像这样初始化ChromeDriver
:
ChromeDriver browser;
private void OpenBrowser()
{
browser = new ChromeDriver(Browsers.Chrome);
}
问题是:
我启动了n进程浏览器Chrome,它只运行一个浏览器,另一个进程不运行我的代码(尽管它已初始化)。
所以,我尝试更改代码:
private void OpenBrowser()
{
var browser = new ChromeDriver(Browsers.Chrome);
}
它起作用了,但另一种方法是使用浏览器。但是我不能从方法中声明var browser
。
它将返回错误,如:
上下文关键字"var"只能出现在本地变量声明或脚本代码中
更新:
我看到了所有的答案,知道在我的情况下var
就是ChromeDriver
。
但什么时候运行它,就有问题了。
我将描述更多信息。
假设,我需要启动2 Chrome进程。在初始化两个Chrome进程后,我将使用转到URL
browser.GoToUrl(link);
所以,我会知道它是否有效。
起初,在使用ChromeDriver
的情况下,它仍然打开2个Chrome进程,但它只与第二个进程一起工作,第一个进程不工作。
其次,在使用var
关键字的情况下,它打开了2个Chrome进程,并且还使用了两个进程。
我不是100%清楚你想做什么,但我可以按要求回答问题:
var
只是语法糖,可以省去编写类型全名的麻烦。正如您从错误中看到的,它只能与局部变量一起使用。
这意味着以下两条线是等效的:
ChromeDriver browser = new ChromeDriver(Browsers.Chrome);
var browser = new ChromeDriver(Browsers.Chrome);
编译时,编译器将看到浏览器被设置为ChromeDriver类型的对象,因此就好像它被声明为ChromeDrive一样。
这样做的主要优点是在处理丑陋的长变量名(通常使用泛型)时,例如:
Dictionary<string, Dictionary<int, List<double>> myObject = new Dictionary<string, Dictionary<int, List<double>>();
这可以写得更易读:
var myObject = new Dictionary<string, Dictionary<int, List<double>>();
作为一个额外的注意事项,它可能隐含在我所说的内容中,但要明确,您需要有一个使用var
的任务。例如,你不能做:
var myObject;
因为编译器会抱怨它无法计算出myObject
的类型(从那行代码中可以明显看出!)。
如何从方法返回引用?
private ChromeDriver OpenBrowser()
{
return new ChromeDriver(Browsers.Chrome);
}
此外,根据示例ChromeDriver
类实现了IWebDriver
接口,因此最好这样写:
private IWebDriver OpenChromeBrowser()
{
return new ChromeDriver(Browsers.Chrome);
}
在您的另一个方法中(在同一类中,因为您的方法是private
),您可以这样使用它:
var driver = OpenChromeBrowser();
当您声明一个var变量时,net需要知道您声明的是什么类型的var,所以当您在另一边有您声明的vartype时,您可以使用var。
var cool = new MySuperBrowserClass();
var lol = 69;
在这两种情况下,.net都知道在另一边有一个MySuperBrowserClass类型的类,或者只是一个int.
换句话说:如果你想声明一个var,无论上下文如何,你都必须澄清它的类型。
也许(也许因为其他原因而不是这样!)你可以在你的第一个代码样本中更改:
ChromeBrowser browser;
做一些类似的事情:
var browser = new ChromeDriver(Browsers.Chrome);
var
是一个只能在方法范围内使用的关键字。在类的范围内使用它将引发错误。
如果你可以在方法之外使用它,结果将与你的第一个例子相同,因为它所做的只是推断类型,这意味着它将与声明它为ChromeDriver相同。