Selenium is a well-known open source tool for UI automation
of websites across a range of browsers. To know more, please refer http://seleniumhq.org/
A huge benefit of using Selenium is that you don’t need an
interactive desktop session to run the automated UI tests.
Here we will discuss about integrating Selenium with Visual Studio
Unit Tests written in C#
Test
·
Search for James Bond
·
Verify the results contain a Wikipedia link for
James Bond
Steps
·
Create a Unit Test Project in Visual Studio
using File-New-Project->Test->Test Project
·
Add a folder called Dependencies and add the following
files with Copy Always to Output:
o
WebDriver.dll
o
IEDriverServer.exe
o
Ionic.Zip.dll
o
Newtonsoft.Json.dll
·
Add a Reference to WebDriver.dll
·
Import the following namespaces
using
Microsoft.VisualStudio.TestTools.UnitTesting;
using
OpenQA.Selenium;
using
OpenQA.Selenium.IE;
using
System.Drawing.Imaging;
·
Create a Test Class with DeploymentItem
Attribute
[TestClass]
[DeploymentItem("Dependencies\\IEDriverServer.exe")]
public class IETests
·
Create a web driver in Class Initialize and Quit
in Class Cleanup
private static InternetExplorerDriver
_webDriver;
[ClassInitialize()]
public static void
MyClassInitialize(TestContext testContext)
{
_webDriver = new InternetExplorerDriver(new InternetExplorerOptions()
{IntroduceInstabilityByIgnoringProtectedModeSettings = true});
}
[ClassCleanup()]
public static void
MyClassCleanup()
{
_webDriver.Quit();
}
private TestContext
testContextInstance;
public TestContext
TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
·
Create a Test Method
[TestMethod]
public void
TestBing()
{
// Test Case Steps
_webDriver.Navigate().GoToUrl("http://www.bing.com");
IWebElement search = _webDriver.FindElement(By.Name("q"));
IWebElement go = _webDriver.FindElement(By.Name("go"));
search.SendKeys("james bond");
go.Click();
// Save screenshot if required
Screenshot screenshot =
_webDriver.GetScreenshot();
screenshot.SaveAsFile("Result.png",
ImageFormat.Png);
// Verfication
IWebElement msWebsite =
_webDriver.FindElement(
By.XPath(
"//a[@href='http://en.wikipedia.org/wiki/James_Bond']"));
Assert.IsNotNull(msWebsite, "Could not find wikipedia link for James Bond");
}
·
To test with Firefox, we can similarly create a
Firefox web driver
private static
FirefoxDriver _webDriver;
Troubleshooting
If you see the error Class Initialization method
Selenium.IETests.MyClassInitialize threw exception.
System.InvalidOperationException: System.InvalidOperationException: Unexpected
error launching Internet Explorer. Protected Mode settings are not the same for
all zones. Enable Protected Mode must be set to the same value (enabled or
disabled) for all zones. (NoSuchDriver).
This could be if you instantiated the IE Driver using new InternetExplorerDriver()
The fix is to either use new InternetExplorerDriver(new InternetExplorerOptions()
IntroduceInstabilityByIgnoringProtectedModeSettings = true})
Or enable Protected Mode setting for all zones. Go
to Tools->Internet Option->Security and check “Enable Protected Mode” for
all zones.