Monday, November 26, 2012

VS 2010 Test Controller / SQL Server 2012 - Could not find stored procedure 'sp_dboption'

While configuring VS 2010 Test Controller with SQL Server 2012 as Load Test Repository, I was getting an error:

Microsoft.VisualStudio.TestTools.ConfigCore.TestControllerHelper.CreateAndUpgradeLoadTestSchemaIfRequired(String loadTestConnectionString, String directoryContainingSchemaFile)
E, 2012/11/26, 09:35:41.787, Microsoft.VisualStudio.TestTools.WebStress.LoadTestException: An error occurred while attempting to create the load test results repository schema: Could not find stored procedure 'sp_dboption'.
Could not find stored procedure 'sp_dboption'.


Found the same issue when I tried to create the Load Test Repository manually by executing the script C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\loadtestresultsrepository.sql

Then I looked for the corresponding VS 2012 script on a different machine at C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\loadtestresultsrepository.sql which worked.

Looking at the difference, the fix was to replace exec sp_dboption with ALTER DATABASE

Example:

Replace exec sp_dboption N'LoadTest2010', N'autoclose', N'false' with ALTER DATABASE [LoadTest2010] SET AUTO_CLOSE OFF

Tuesday, November 6, 2012

Selenium - Automating UI Testing for Websites using Visual Studio Unit Tests


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
·         Open Bing http://www.bing.com

·         Search for James Bond

·         Verify the results contain a Wikipedia link for James Bond
Steps
·         Download the IE Driver (needed only for running tests in IE) and the C# Client Drivers from http://seleniumhq.org/download/

·         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

·         Make sure Enable Deployment is checked in the Test Settings File, see http://msdn.microsoft.com/en-us/library/ms182475(v=vs.90).aspx

·         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.