我在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标签,但它似乎并不重要。
答案 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应该使用驱动程序扩展对象。