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):
[TestClass] | |
public class UnitTest1 | |
{ | |
IWebDriver driver; | |
[TestInitialize] | |
public void Setup() | |
{ | |
// Create a new instance of the IE driver | |
driver = new InternetExplorerDriver(); | |
} | |
[TestCleanup] | |
public void Teardown() | |
{ | |
driver.Quit(); | |
} | |
[TestMethod] | |
public void GoogleSearch() | |
{ | |
//Navigate to the site | |
driver.Navigate().GoToUrl("http://www.google.com"); | |
// Find the text input element by its name | |
IWebElement query = driver.FindElement(By.Name("q")); | |
// Enter something to search for | |
query.SendKeys("Selenium"); | |
// Now submit the form | |
query.Submit(); | |
// Google's search is rendered dynamically with JavaScript. | |
// Wait for the page to load, timeout after 5 seconds | |
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); | |
wait.Until((d) => { return d.Title.StartsWith("Selenium"); }); | |
//Check that the Title is what we are expecting | |
Assert.AreEqual("Selenium - Google zoeken", driver.Title); | |
} | |
} |
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:
[TestClass] | |
public class UnitTest1 | |
{ | |
IWebDriver driver; | |
[TestInitialize] | |
public void Setup() | |
{ | |
// Create a new instance of the IE driver | |
string IE_DRIVER_PATH = @"C:\Projects\Test\SeleniumTestProject\IEDriverServer_Win32_2.37.0"; | |
driver = new InternetExplorerDriver(IE_DRIVER_PATH); | |
} | |
} |
That’s it!