如何在C#

时间:2016-08-04 08:46:38

标签: c# selenium

我想开始新的浏览器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进程,并且它还可以使用两个进程。

4 个答案:

答案 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);