title: How to Run c# Multiple Selenium Unit Test with one driver instance?
body: <p><strong>i have a problem running Multiple C# Selenium Unit Test tests with one driver instance.</strong></p>
  
  <p>Please find my class as below.</p>
  
  <p><strong>Folder : Com.Main.Web.Selenium</strong></p>
  
  <p>SeleniumTestInitialize.cs is the main class which contains the driver.</p>
  
  <pre><code>[DeploymentItem(@"Resources\IEDriverServer.exe")]
  public class SeleniumTestInitialize
  {
      public TestContext TestContext
      {
          get { return testContextInstance; }
          set { testContextInstance = value; }
      }
      private TestContext testContextInstance;
  
      public bool SeleniumExecutionTerminateFlag=false;
  
      public SeleniumTestInitialize seleniumTestInitalize;
      public FindWebDriverElement findWebDriverElement;
      public JavaScriptCalls javaScriptCalls;
      public OperateOnWebDriverElement operateOnWebDriverElement;
     **public RemoteWebDriver driver;** 
     // how to use this driver object across multiple unit test classes
  
      public string baseURL;
  
      public void SeleniumSetup()
      {
          try
          {
              Console.WriteLine("Starting Driver...........");
              seleniumTestInitalize = new SeleniumTestInitialize();
              var options = new InternetExplorerOptions
              {
                  IntroduceInstabilityByIgnoringProtectedModeSettings = true,
                  //ForceCreateProcessApi=true
                  EnableNativeEvents = false,
                  RequireWindowFocus = false,
                  IgnoreZoomLevel = true
              };
              driver = new InternetExplorerDriver(TestContext.DeploymentDirectory, options);
              javaScriptCalls = new JavaScriptCalls(driver);
              findWebDriverElement = new FindWebDriverElement(javaScriptCalls);
              operateOnWebDriverElement = new OperateOnWebDriverElement(findWebDriverElement);
              GoToSite(ConfigParameters.WEB_APPLICATION_URL);
              driver.Manage().Window.Maximize();
          }
          catch (Exception e)
          {
              log.Debug("Error Starting Web Driver...........");
              Console.WriteLine(e.StackTrace);
          }
  
      }
  
      public bool SeleniumInitalizeCheck()
      {
          if (seleniumTestInitalize != null)
              return true;
          else
              return false;
      }
  
      public void SeleniumQuit()
      {
          Console.WriteLine("Quitting Driver...........");
          try
          {
              if (driver != null)
              {
                  driver.Quit();
              }
  
              log.Info("Closing Web Driver...........");
              ProcessMgn.killProcessByNames("IEDriverServer");//Make sure the process is killed
          }
          catch (Exception e)
          {
              Console.WriteLine(e.StackTrace);
          }
      }
  
      public void GoToSite(string urlToOpen)
      {
          driver.Navigate().GoToUrl(urlToOpen);
      }
  }
  </code></pre>
  
  <p><strong>Folder com.main.tests</strong></p>
  
  <p><strong>Test01.cs</strong></p>
  
  <pre><code>[TestClass]
  public class Test01 : SeleniumTestInitialize
  {
  
      [TestInitialize]
      public void Setup()
      {
          SeleniumExecutionTerminateFlag = false;
  
          if (!SeleniumInitalizeCheck())
          {
              SeleniumSetup();
          }
      }
  
      [TestCleanup]
      public void TearDown()
      {
          if (SeleniumExecutionTerminateFlag)
          {
              SeleniumQuit();
          }  
      }
  
      [TestMethod]
      [DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", "http://tfsserver:8080/tfs/PoL;project", "1320", DataAccessMethod.Sequential)]
      public void UCP002_M1()
      {
          var userName = this.TestContext.DataRow["UserName"].ToString();
          var passWord = this.TestContext.DataRow["PassWord"].ToString();
          //use the local host adress for your project here-&gt;
          baseURL = this.TestContext.DataRow["URL"].ToString();
  
  
  
          driver.Navigate().GoToUrl(baseURL);
  
          //driver.FindElement(By.XPath("//html/body/div[2]/div/a/p/desc")).Click();
          //driver.FindElement(By.Id("registerLink")).Click();
          driver.FindElement(By.Id("ctl00_LoginTextBox")).Clear();
          driver.FindElement(By.Id("ctl00_LoginTextBox")).SendKeys(userName);
          driver.FindElement(By.Id("ctl00_PasswordTextbox")).Clear();
          driver.FindElement(By.Id("ctl00_PasswordTextbox")).SendKeys(passWord);
          driver.FindElement(By.Id("ctl00_LogInButton")).Click();
      }
  
  
  }
  </code></pre>
  
  <p><strong>Test02.cs</strong></p>
  
  <pre><code>[TestClass]
  public class Test02 : SeleniumTestInitialize
  {
  
      [TestInitialize]
      public void Setup()
      {
          SeleniumExecutionTerminateFlag = false;
  
          if (!SeleniumInitalizeCheck())
          {
              SeleniumSetup();
          }
      }
  
      [TestCleanup]
      public void TearDown()
      {
          if (SeleniumExecutionTerminateFlag)
          {
              SeleniumQuit();
          }  
      }
  
      [TestMethod]
      [DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", "http://tfsserver:8080/tfs/PoL;project", "1320", DataAccessMethod.Sequential)]
      public void Test02()
      {
         //some test script
      }
  
  
  }
  </code></pre>
  
  <p>I have created an <strong>ordered test</strong> and prioritized the tests in the order of execution . But it is invoking two instances of the driver that means two times the browser. </p>
  
  <p>My question is to How to share a single driver object across all selenium unit tests ?? create at the start and close the driver at the end.
  Thanks.</p>