我想开始新的浏览器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进程后,我将转到以下网址:
browser.GoToUrl(link);
所以,我知道它有效还是无效。
首先,使用ChromeDriver
的案例仍会打开2个Chrome进程,但它只与第二个进程一起工作,第一个进程无效。
第二种情况,使用var
关键字的情况下,它会打开2个Chrome进程,并且它还可以使用两个进程。
答案 0 :(得分:3)
我不是100%清楚你要做什么,但我可以回答问题:
var
只是语法糖,以节省必须写的类型的全名。从错误中可以看出,它只能与局部变量一起使用。
这意味着以下两行是等效的:
ChromeDriver browser = new ChromeDriver(Browsers.Chrome);
var browser = new ChromeDriver(Browsers.Chrome);
编译时,编译器会看到浏览器被设置为ChromeDriver类型的对象,因此就像它被声明为ChromeDriver一样。
这样做的主要优点是使用丑陋的长变量名(通常使用泛型),例如:
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
的类型(这很明显地看着那行代码!)。
答案 1 :(得分:1)
var
是一个只能在方法范围内使用的关键字。在类的范围内使用它会引发错误。
如果您可以在方法之外使用它,结果将与您的第一个示例相同,因为它所做的只是推断类型,这意味着它与将其声明为ChromeDriver相同。
答案 2 :(得分:1)
如何从方法返回引用?
private ChromeDriver OpenBrowser()
{
return new ChromeDriver(Browsers.Chrome);
}
另外,根据example ChromeDriver
类实现IWebDriver
接口,所以最好像这样编写:
private IWebDriver OpenChromeBrowser()
{
return new ChromeDriver(Browsers.Chrome);
}
在你的另一种方法中(在同一个班级中,你的方法是private
)你可以像这样使用它:
var driver = OpenChromeBrowser();
答案 3 :(得分:1)
当您声明 var 变量时,.net需要知道您要声明的 var 类型,因此您可以使用 var 另一方面你要声明的 var 的类型。
var cool = new MySuperBrowserClass();
var lol = 69;
在这两种情况下.net知道另一方面有一类MySuperBrowserClass类或只是一个int。
换句话说:如果要声明var,无论上下文如何,都必须澄清其类型。
也许(因为其他原因可能不是这样!)你可以改变你的第一个代码示例:
ChromeBrowser browser;
做类似的事情:
var browser = new ChromeDriver(Browsers.Chrome);