如何将TestFixture参数值作为字符串并传递给Switch语句?我试过但无法解决问题"会员' ClassLibrary1.Browsers.browser1'无法使用实例引用访问;使用类型名称来限定它"。 Init方法应该是静态的,因为我在另一个类中使用它。
代码在这里:
[TestFixture("Chrome")]
public class Browsers
{
public static IWebDriver webDriver;
private static string baseURL = "https://www.google.com";
private static string browser;
private static string browser1;
public Browsers(string browser1)
{
this.browser1 = browser1;
}
public static void Init()
{
switch (browser1)
{
case "Chrome":
webDriver = new ChromeDriver();
break;
case "IE":
webDriver = new InternetExplorerDriver();
break;
case "Firefox":
webDriver = new FirefoxDriver();
break;
}
webDriver.Manage().Window.Maximize();
Goto(baseURL);
}
public static string Title
{
get { return webDriver.Title; }
}
public static IWebDriver getDriver
{
get { return webDriver; }
}
public static void Goto(string url)
{
webDriver.Navigate().GoToUrl(url);
}
public static void Close()
{
webDriver.Quit();
}
}
答案 0 :(得分:0)
问题是您正在尝试分配类的构造函数内的静态字段。在创建类的实例时会执行构造函数。所以你做不到:
//This doesn't compile:
public class Browsers
{
//snip
private static string browser1;
public Browsers(string browser1)
{
this.browser1 = browser1;
}
//snip
}
因为没有this.browser1
字段 - browser1
被声明为static
所以在实例上不存在。
我认为你的目标是这样的事情:
[TestFixture("My String")]
public class When_Working_Up_A_Storm
{
public When_Working_Up_A_Storm(string myString)
{
_myString = myString;
}
private string _myString;
[Test]
public void Magic_Happens()
{
Assert.AreEqual("My String", _myString);
}
}
答案 1 :(得分:0)
正如C#告诉你的那样,你无法从静态方法访问实例成员。在您的情况下出现问题的原因似乎是Browsers
实际上不是您的测试夹具,即使您在其上放置了属性。它看起来像一个包含各种实用方法的静态类。是吗?
正确的用法是将TestFixtureAttribute
放在TestFixture
上,即包含测试的类。在该类的构造函数中,它可以像您一样保存参数的值。然后,它可以直接或使用实用程序类中的方法启动正确的浏览器实例。
您还没有通过在另一个班级中使用静态Init
方法来解释您的意思,所以我没有进入,但如果您解释,我会添加到此答案中它