我是Selenium的新手,我试图通过CSV文件执行数据驱动的测试。为此,我在包含测试属性的类中定义DataSource属性。我正在使用MStest框架。如何在另一个类中初始化TestContext属性?
[TestClass]
public class UnitTest1:BaseDriver
{
ExcelTest sd;
private TestContext instance;
public TestContext TestContext
{
set { instance = value; }
get { return instance; }
}
public UnitTest1()
{
sd = new ExcelTest(_driver);
}
[TestInitialize]
public void Testinitialize()
{
}
[TestMethod]
[DeploymentItem("TestData.csv")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"C:\Users\nidumukv\Documents\Visual Studio 2012\Projects\BMICalculator\BMICalculator\DataFiles\TestData.csv", "TestData#csv", DataAccessMethod.Sequential)]
public void DDtest_usingCSV()
{
string feet = TestContext.DataRow["feet"].ToString();
string inches = TestContext.DataRow["inches"].ToString();
string weight = TestContext.DataRow["weight in pounds"].ToString();
string BMI = TestContext.DataRow["BMI"].ToString();
sd.TestUsingCSV(feet,inches,weight,BMI);
}
[TestCleanup]
public void cleanup()
{ _driver.Quit(); }
}
BaseDriver是我用来存储实际webdriver的类。 PageElements是一个我已经声明了所有Web元素的类。
我试图定义在“DDtest_usingCSV的方法在一个单独的类变量,这样的测试不变得笨拙。但是,无论何时我在另一个类中定义另一个testcontext,我都会遇到NullReferenceException。我试过在类之间传递属性。但我做不到(我仍在学习)。
下面是我想初始化的TestContext
public class ExcelTest:PageElements
{
public IWebDriver _driver;
public ExcelTest(IWebDriver driver):base(driver)
{
_driver = driver;
}
public void TestUsingCSV(string _feet,string _inches,string _weight,string _BMI)
{
feet.SendKeys(_feet);
inches.SendKeys(_inches);
weight.SendKeys(_weight);
compute_btn.Click();
}
}
,因为我无法初始化的财产,我在参数化测试类的文件,方法的类。
虽然声明如下提到的TestContext财产,为什么我们使用“的TestContext”为属性名称,而不是实例?
private TestContext instance;
public TestContext TestContext
{
set { instance = value; }
get { return instance; }
}
在读值从Excel的时候,我们正在采取“的TestContext”访问,而不是“实例”的DataRow。这个问题每当我看到它时都会让我烦恼。
public void DDtest_usingCSV()
{
string feet = TestContext.DataRow["feet"].ToString();
string inches = TestContext.DataRow["inches"].ToString();
string weight = TestContext.DataRow["weight in pounds"].ToString();
string BMI = TestContext.DataRow["BMI"].ToString();
sd.TestUsingCSV(feet,inches,weight,BMI);
}
请不要介意问题的长度。我详细解释了我的问题。任何帮助,可以赞赏。提前致谢。
非常感谢@Sergey L.解决了这个问题。但是有没有办法让属性STATIC并访问“ExcelTest”类中的属性?为什么我们使用与“TestContext”相同的属性名称? –
MSTEST在测试类([TestClass])中按名称查找属性,如果找到它,则会为其分配上下文。如果它不在课堂上,则不分配。它不能是静态的 - 这是MSTEST的工作原理。 –
非常感谢@Sergey L. –