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