如何在类之间传递对活动驱动程序的引用

时间:2017-07-04 13:11:34

标签: c# google-chrome selenium-webdriver nunit

我的问题是,当假设由FetchName方法中的驱动程序设置firstname时,我收到一条错误消息,指出驱动程序为null。我可以以某种方式传递活动的驱动程序实例,以便继续获取数据吗?

[TestFixture]
public class TestBase
{
    protected IWebDriver driverChrome;

    [SetUp]
    public void Setup()
    {
        driverChrome = new ChromeDriver();
    }


    [TearDown]
    public void CleanSite()
    {
        driverChrome.Quit();
    }

}

我创建所有[test]方法的类“Tests”。

public void tests: Testbase
{
        [Test]
        public void testmethods()
        {
            string blabla = driverChrome.FindElement(By.id("dsd")).Text;
            Reuse.FetchName(out string firstname, out string lastname);
            Assert.isTrue(firstname.equals(lastname));
        } 
}

一个类“重用”,其中我有[test]方法将多次使用的方法。

public class Reuse: Testbase
{
    [Test]
    public void FetchName(out string firstname, out string lastname)
    {
            firstname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text;
            lastname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text; 
    }
}

1 个答案:

答案 0 :(得分:0)

  1. Reuse类不是测试用例。将属性[Test]添加到方法时,该方法应包含一个断言。因此Reuse不应继承Testbase
  2. 如果你想拥有一个包含多个动作的类,它应该是静态类。
  3. WebDriver是一个独立的过程。您可以使用多个类或多个进程来访问它。他们都会得到相同的WebDriver。
  4. 下面的示例显示了如何更改Reuse类以及如何使用它。

    public static class Reuse
    {
        public static IWebDriver driverChrome;
        public static void FetchName(out string firstname, out string lastname)
        {
                firstname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text;
                lastname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text; 
        }
    }
    

    你可以这样称呼它。

    public void tests: Testbase
    {
        [Test]
        public void testmethods()
        {
            string blabla = driverChrome.FindElement(By.id("dsd")).Text;
            Reuse.driverChrome = driverChrome;
            Reuse.FetchName(out string firstname, out string lastname);
            Assert.isTrue(firstname.equals(lastname));
        } 
    

    }