I’ve just started using Selenium – currently I’m only interested in IE as it’s an intranet site and not for public consumption. I’m using IEDriverServer.exe to set my browser sessions up, but I’m unsure as to whether I need to recreate it for each test, or if it will maintain atomicity of the browser sessions/tests automatically. I’ve not been able to find any information on this as most of the examples are for a single test rather than a batch of unit tests.
So currently I have
[TestInitialize]
public void SetUp()
{
_driver = new InternetExplorerDriver();
}
and
[TestCleanup]
public void TearDown()
{
_driver.Close();
_driver.Quit();
}
Is this correct or am I doing extra unnecessary work for each test? Should I just initialise it when it’s declared? If so, how do I manage its lifecycle? I presume I can call .Close() for each test to kill the browser window, but what about .Quit()?
I use Selenium with NUnit, but you don’t need to recreate it every time. Since you are using MSTest, I would do something like this:
ClassInitializewill call code once per test class initialisation, andClassCleanupwill call code once per test class teardown / dispose.Although this is still not guaranteed because the test runner may make several threads of the test:
http://blogs.msdn.com/b/nnaderi/archive/2007/02/17/explaining-execution-order.aspx
You must also think about what kind of state you want to tests to start at each time. The most common reason for shutting down and starting a new browser session each time is then you can have a clean slate to work with.
Sometimes this is unnecessary work, as you’ve pointed out, but what is your tests starting point?
For me, I have one browser per test class, with a method to sign out of my web application and keep at the login page at the end of each test.