Xunit为每个新测试创建Test类的新实例(使用WebDriver和C#)

有没有办法在使用Xunit的Webdriver(Selenium)在同一浏览器中运行多个测试,目前xunit为每个新测试启动新浏览器,下面是示例代码

public class Class1 { private FirefoxDriver driver; public Class1() { driver = new FirefoxDriver(); } [Fact] public void Test() { driver.Navigate().GoToUrl("http://google.com"); driver.FindElementById("gbqfq").SendKeys("Testing"); } [Fact] public void Test2() { driver.Navigate().GoToUrl("http://google.com"); driver.FindElementById("gbqfq").SendKeys("Testing again"); } } 

虽然我不知道Selenium,但我知道xUnit.net为每个测试方法创建了一个测试类的新实例,这可能解释了为什么你会看到你报告的行为: driver字段重新初始化每个测试方法,因为每次调用构造函数。

为了重用单个FirefoxDriver实例,您可以使用xUnit.net的IUseFixture接口:

 public class Class1 : IUseFixture { private FirefoxDriver driver; public void SetFixture(FirefoxDriver data) { driver = data; } [Fact] public void Test() { driver.Navigate().GoToUrl("http://google.com"); driver.FindElementById("gbqfq").SendKeys("Testing"); } [Fact] public void Test2() { driver.Navigate().GoToUrl("http://google.com"); driver.FindElementById("gbqfq").SendKeys("Testing again"); } } 

经过一番调查后能够找到解决方案,并将FirefoxDriver更新为IWebDriver ::

  public class SampleFixture : IDisposable { private IWebDriver driver; public SampleFixture() { driver = new FirefoxDriver(); Console.WriteLine("SampleFixture constructor called"); } public IWebDriver InitiateDriver() { return driver; } public void Dispose() { // driver.Close(); driver.Quit(); Console.WriteLine("Disposing Fixture"); } } public class Class1 : IUseFixture { private IWebDriver driver; public void SetFixture(SampleFixture data) { driver = data.InitiateDriver(); } [Fact] public void Test() { driver.Navigate().GoToUrl("http://google.com"); driver.FindElement(By.Id("gbqfq")).SendKeys("Testing"); } [Fact] public void Test2() { driver.Navigate().GoToUrl("http://google.com"); driver.FindElement(By.Id("gbqfq")).SendKeys("Testing again"); } }