在C#中保留一个WebDriver实例

时间:2017-04-04 17:21:33

标签: c# selenium webdriver nunit

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

但是我继续为我运行的每个类获取一个webdriver的新实例(在本例中为2)。以下是我的示例:

我的驱动程序创建者:

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标签,但它似乎并不重要。

2 个答案:

答案 0 :(得分:0)

Nunit默认情况下在一个单独的Appdomain中运行所有测试。如果从两个程序集中运行两个测试,则静态成员也将初始化两次。

答案 1 :(得分:0)

使您的测试类扩展包含默认初始化的WebDriver或方法实现的getter的公共类。

public class XYXYtest : Main { // your stuff here with access to single-instance shared WebDriver object. }

public class Main { public WebDriver driver = yourConnectionMethod(); // more common stuff if you need to. }

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