Вы можете указать запуск и закрытие браузера в [TestFixtureSetUp] и [TestFixtureTearDown] и удалить его из [SetUp] и [TearDown].Все тесты в [TestFixture] будут выполняться в одном браузере.Так, если у вас есть, например, 10 классов, и каждый из них содержит 5 тестов, вместо 50 открытий и закрытий браузера будет только 10.
public IWebDriver driver { get; private set; };
[TestFixtureSetUp]
public void TestFixtureSetup()
{
driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.google.com/");
}
[TestFixtureTearDown]
public void TestFixtureTearDown()
{
driver.Quit();
}
Если вы хотите открыть и закрыть браузер один раз, выможет наследовать методы [TestFixtureSetUp] и [TestFixtureTearDown] от базового класса, и если у вас есть один тестовый класс, который выполняется перед другими (A_test), и один, который выполняется последним (Z_test), вы можете установить и снять некоторые флаги, которые сообщат, следует лизапускать браузер или нет:
namespace Tests
{
[TestFixture]
public abstract class Test
{
private static bool _flagSetUp;
private static bool _flagTearDown;
public IWebDriver driver { get; private set; };
protected Test()
{
}
public static void SetFlag(bool flagSetUp, bool flagTearDown)
{
_flagSetUp = flagSetUp;
_flagTearDown = flagTearDown;
}
[TestFixtureSetUp]
public void TestFixtureSetup()
{
if(_flagSetUp)
{
driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.google.com/");
_flagSetUp = false;
}
}
[TestFixtureTearDown]
public void TestFixtureTearDown()
{
if(_flagTearDown)
{
driver.Quit();
}
}
}
namespace Tests
{
[TestFixture(new object[] { true, false })]
public class A_Test : Test
{
public A_Test(bool flagSetUp, bool flagTearDown)
{
SetFlag(flagSetUp, flagTearDown);
}
[Test]
public void Test1()
{
...
}
}
namespace Tests
{
[TestFixture(new object[] { false, true })]
public class Z_Test : Test
{
public A_Test(bool flagSetUp, bool flagTearDown)
{
SetFlag(flagSetUp, flagTearDown);
}
[Test]
public void Test2()
{
...
}
}
Последний обходной путь выглядит не очень хорошим решением.Althouth первый обходной путь также не гарантирует 100% изоляцию тестов (кстати, не забудьте написать driver.Navigate().GoToUrl("http://www.google.com/");
в качестве первого шага для каждого теста).Поэтому, вероятно, лучшим решением будет параллельное выполнение и установка, методы Teardown для каждого теста.