2016-04-19 31 views
0

我是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); 
    } 

请不要介意问题的长度。我详细解释了我的问题。任何帮助,可以赞赏。提前致谢。

回答

0

的TestContext由MSTEST框架,但只有在与[TestClass中],当它执行从这个类的测试归因类自动设置。

在您的情况下,只需将TestContext作为ExcelTest类的TestUsingCSV方法中的参数传递即可。

+0

非常感谢@Sergey L.解决了这个问题。但是有没有办法让属性STATIC并访问“ExcelTest”类中​​的属性?为什么我们使用与“TestContext”相同的属性名称? –

+0

MSTEST在测试类([TestClass])中按名称查找属性,如果找到它,则会为其分配上下文。如果它不在课堂上,则不分配。它不能是静态的 - 这是MSTEST的工作原理。 –

+0

非常感谢@Sergey L. –