Monday, November 4, 2013

UI testing using Selenium: The IEDriverServer.exe file does not exist in the current directory or in a directory on the PATH environment variable

In my continuing conquest to find the best tool for UI testing, I also had a look at Selenium, one of the oldest and most well known browser automation frameworks.

I started simple by creating a new Test project, adding references to Selenium through NuGet, and writing a small test(based on a sample on their website):

Unfortunately when I ran the test, it failed with the following error message:

  Initialization method OLASeleniumTestProject.UnitTest1.Setup threw exception. OpenQA.Selenium.DriverServiceNotFoundException: OpenQA.Selenium.DriverServiceNotFoundException: The IEDriverServer.exe file does not exist in the current directory or in a directory on the PATH environment variable. The driver can be downloaded at http://code.google.com/p/selenium/downloads/list..

Result StackTrace:         

at OpenQA.Selenium.DriverService.FindDriverServiceExecutable(String executableName, Uri downloadUrl)

   at OpenQA.Selenium.IE.InternetExplorerDriverService.CreateDefaultService()

   at OpenQA.Selenium.IE.InternetExplorerDriver..ctor()

   at SeleniumTestProject.UnitTest1.Setup() in c:\Projects\Test\SeleniumTestProject\SeleniumTestProject\UnitTest1.cs:line 18

It seems like that just installing the NuGet packages isn’t enough. Behind the scenes Selenium is using a driver executable depending on the browser you want to test on.

To solve the issue, I had to execute 2 steps:

  • Step 1: Download and unpack the correct driver on your system. I am using a 32bit Internet Explorer so I downloaded the related driver. I  unpacked it in the same folders as my tests.
  • Step 2: I changed my code to tell Selenium where it can find the correct driver:

That’s it!

4 comments:

Damon said...

There are now unofficial NuGet packages for the Selenium IE and Chrome WebDrivers; it's the executable wrapped up in NuGet. The benefit is adding through NuGet, it places the exes in your packages directory, adds links to your test project to the exes, and sets them to "copy if newer". You'll need to use the overloaded constructor passing "." for the path, such as
ScenarioContext.Current["browser"] = new ChromeDriver(".");

But that's a lot better than having to add the exes to the SCM or requiring developers & CI machines to put them in the same location.

Anonymous said...

I had been using the following and it has been working just fine. All of a sudden today it is not working and I get the error "...threw exception: OpenQA.Selenium.DriverServiceNotFoundException: The IEDriverServer.exe file does not exist in the current directory or in a directory on the PATH environment variable."

var ieDriverService = InternetExplorerDriverService.CreateDefaultService();
ieDriverService.HideCommandPromptWindow = true;
using (IWebDriver driver = new InternetExplorerDriver(ieDriverService))

Now in order to get it to work, I have to comment those out and use a hardcoded path which is not what I prefer to do.
string IE_Driver_PATH = @"C:\source\repos\Source\FinancialInclusion\MyMetaBank\MPS.Testing.FinancialInclusion.MMB\MPS.Testing.FinancialInclusion.MMB";

driver = new InternetExplorerDriver(IE_Driver_PATH);

Any ideas on why this would all of a sudden stop working?? Both IE and Chrome stopped at the same time. I don't want to have to change all my tests or hardcode a path that could change in the future. Has to be something in the environment but have no idea what could have changed.

Anonymous said...

I found the issue. For some reason the project lost its path to the .testsettings file and was not copying the webdrivers to the bin directory. Had to go to Test ==> Test Settings and reselect the file and then things started working again.
It seems to me that putting a path into each of your tests is a bad idea as that path could change over time and you would have to change every test. If you have it set up correctly, this should work without having to code a path.
Hopefully this helps someone.

var ieDriverService = InternetExplorerDriverService.CreateDefaultService();
ieDriverService.HideCommandPromptWindow = true;
using (IWebDriver driver = new InternetExplorerDriver(ieDriverService))

Shruti Ramalingam said...
This comment has been removed by a blog administrator.