2017-04-04 52 views
1

我在VB2015中使用最新版本的NUnit 3和Selenium 3。我目前有一个只创建驱动程序的类,一个设置和拆卸的基类,以及一些实际执行测试的类。我希望只能创建一个驱动程序实例,并通过几个不同的类“客户端,开发票,估算值等等,将它们的功能分组为我的测试。最后,我只需点击以运行一个实例webdriver的,它涵盖了在C#中保留一个WebDriver实例

不过,我不断收到一个webdriver的新情况下,每个I运行类(在本例中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,但它似乎并不重要。

+0

它在我看来像你需要传递你的驱动程序对象到你的测试类来保持相同的实例。 – Brian

+0

这是一个很好的阅读,这将帮助你实现你所需要的东西:https://msdn.microsoft.com/en-us/library/ff650316.aspx –

回答

0

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

+0

这与TestNG和Java相反,你可以简单地使用@ BeforeSuite和它封装了整个测试框架。这是我不幸遇到的方向。 –

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. }

我觉得它比传递对象的方法,而不是在这个类延伸的主应该使用驱动程序扩展对象的方法清洁。