C# 在C中保留一个WebDriver实例#

C# 在C中保留一个WebDriver实例#,c#,selenium,webdriver,nunit,C#,Selenium,Webdriver,Nunit,我正在VB2015中使用最新版本的NUnit 3和Selenium 3。我目前有一个只创建驱动程序的类,一个进行设置和分解的基类,以及一些实际执行测试的类。我希望能够只创建一个驱动程序实例,并将其带到几个不同的类“客户机、发票、估算等”中,同时按功能对测试进行分组。最后,我只需单击以运行webdriver实例,它涵盖了所有内容 但是,对于我运行的每个类(在本例中为2),我都会不断获得webdriver的新实例。下面是我的示例: 我的驱动程序创建者: public class DriverObje

我正在VB2015中使用最新版本的NUnit 3和Selenium 3。我目前有一个只创建驱动程序的类,一个进行设置和分解的基类,以及一些实际执行测试的类。我希望能够只创建一个驱动程序实例,并将其带到几个不同的类“客户机、发票、估算等”中,同时按功能对测试进行分组。最后,我只需单击以运行webdriver实例,它涵盖了所有内容

但是,对于我运行的每个类(在本例中为2),我都会不断获得webdriver的新实例。下面是我的示例:

我的驱动程序创建者:

public class DriverObject
{

    protected static IWebDriver Driver { get; } = new ChromeDriver(options());

    public static ChromeOptions options()
    {
        ChromeOptions info = new ChromeOptions();
        info.AddArgument("--start-maximized");
        return info;
    }
}
收集驱动程序的我的安装类:

[TestFixture]
public class SetupTestC : Release.DriverObject
{

    [OneTimeSetUp]
    public void SetupTest()
    {
        Driver.Navigate().GoToUrl("https://www.yahoo.com");
    }

    [OneTimeTearDown]
    public void TearDown()
    {
        Driver.Quit();
    }
}
测试类别之一:

public partial class Client : TestStructure.SetupTestC
{

    [Test]
    public void test1()
    {
        By searchBtn = By.Id("uh-search-box");
        Driver.FindElement(searchBtn).Click();
        Driver.FindElement(searchBtn).SendKeys("This is a test search");
        Thread.Sleep(2000);

    }
}
我的另一个测试类:

class Invoices : TestStructure.SetupTestC
{
    [Test]
    public void test2()
    {
        Assert.True(false);
    }
}

我尝试使用NUnit 3的Category标记,但这似乎无关紧要。

NUnit在一个单独的Appdomain中运行一个组件的所有测试。如果从两个程序集运行两个测试,您的静态成员也将被初始化两次。

使您的测试类扩展一个公共类,该类包含WebDriver I的getter默认情况下或通过方法实现初始化

public类xyzetest:Main{
//您可以访问单实例共享WebDriver对象。
}

公共类主{
public WebDriver driver=yourConnectionMethod();
//如果你需要的话,可以用更普通的东西。
}


我认为这比将对象传递给方法更干净,而不是此类扩展main中的方法应该使用驱动程序扩展对象。

在我看来,您需要将
driver
对象传递给测试类以保持相同的实例。下面是一篇很好的文章,这将帮助您实现所需:这是相反的在TestNG和Java中,您可以简单地使用@BeforeSuite,它封装了整个测试框架。不幸的是,这正是我尝试的方向。