WatiN or Selenium?

asp.netSeleniumAutomationAutomated TestsWatin

asp.net Problem Overview


I'm going to start coding some automated tests of our presentation soon. It seems that everyone recommends WatiN and Selenium. Which do you prefer for automated testing of ASP.NET web forms? Which of these products work better for you?

As a side note, I noticed that WatiN 2.0 has been in CTP since March 2008, is that something to be concerned about?

asp.net Solutions


Solution 1 - asp.net

Just want to say that I'm currently working hard on a beta release of WatiN 2.0 somewhere in Q1 of 2009. It will be a major upgrade to the current CTP 2.0 versions and will basically give you the same functionality to automate FireFox and IE as version 1.3.0 offers for automating IE.

So no concerns there.

Hope this helps in making your choice Jeroen van Menen Lead dev WatiN

Solution 2 - asp.net

If you're looking to make a serious long-term investment in a framework that will continue to be improved and supported by the community, Selenium is probably your best bet. For example, I just came across this info on Matt Raible's blog:

> As of Friday, Google has over 50 teams > running over 51K tests per day on > internal Selenium Farm. 96% of these > tests are handled by Selenium RC and > the Farm machines correctly. The other > 4% are partly due to RC bugs, partly > to test errors, but isolating the > cause can be difficult. Selenium has > been adopted as the primary technology > for functional testing of web > applications within Google. That's the > good news.

I also went to one of the Selenium meetups recently and learned that Google is putting serious resources into improving Selenium and integrating it with WebDriver, which is an automated testing tool developed by Simon Stewart. One of the major advantages of WebDriver is that it controls the browser itself rather than running inside the browser as a Javascript application, which means that major stumbling blocks like the "same origin" problem will no longer be an issue.

Solution 3 - asp.net

We've tested both and decided to go with WaTiN. As others have pointed out, Selenium does have some nice features not found in WaTiN, but we ran into issues getting Selenium working and once we did it was definitely slower when running tests than WaTiN. If I remember correctly, the setup issues we ran into stemmed from the fact that Selenium had a separate app to control the actual browser where WaTiN did everything in process.

Solution 4 - asp.net

I've been trying 'em both out and here are my initial thoughts...


WatiN

The Good

  • Fast execution.
  • Script creation tools are independent projects; there are 2 that I know of: [Wax][1] (Excel based, hosted on CodePlex) and [WatiN Test Record][2] (hosted on SourceForge). Neither is as robust as Selenium IDE.
  • Very good IE support. Can attach and detach to/from running instances. Can access native window handles etc. (See script example below).
  • NuGet packaged, easy to get running in .NET, Visual Studio style environments and keep updated.

The Bad

  • Googling WatiN (watin xyz) often causes Google to recommend "watir xyz" instead. Not that much documentation out there.
  • What little there is (documentation), it is confusing; for example: at first blush it would appear that there is no native support for CSS selectors. Especially since there are extensions libraries like 'WatiNCssSelectorExtensions' and many blog articles about alternative techniques (such as injecting jQuery/sizzle into the page). On Stack Overflow, I found a comment by [Jeroen van Menen][3] which suggests that there is native support. At least the lead-developer spends time on Stack Overflow :)
  • No native XPath support.
  • No out-of-the-box remote execution/grid based execution.

Script Example (C#). You can't do this with Selenium (not that I know off, at least):

class IEManager
{
    IE _ie = null;
    object _lock = new object();
	
    IE GetInstance(string UrlFragment)
    {
        lock (_lock)
        {
            if (_ie == null)
            {
                var instances = new IECollection(true);  //Find all existing IE instances
                var match = instances.FirstOrDefault(ie=>ie.Url.Contains(UrlFragment));
                _ie = match ?? new IE();
                if (match==null)  //we created a new instance, so we should clean it up when done!
                    _ie.AutoClose = true;
            }
        }

        return _ie;
    }
}

Selenium

  • Slower than WatiN (especially since a new process has to be created).
  • Built-in CSS selectors/XPath support.
  • Selenium IDE is good (can't say great, but it’s the best in class!).
  • Feels more Java-ish than .NET-ish...but really, it's programming language agnostic; all commands are sent to an out-of-process 'Driver'. The driver is really a 'host' process for the browser instance. All communication must be serialised in/out across process boundaries, which might explain the speed issues relative to WatiN.
  • Decoupled processes - "Driver" and "Control" mean more robustness, more complexity, etc., but also easier to create grids/distributed test environments. Would have really liked it if the "distribution" mechanism (i.e. the communication between Driver & Control) were across WebSphere or other existing, robust, message queue manager.
  • Support chrome and other browsers out of the box.

Despite everything, I went with WatiN in the end; I mainly intend to write small screen-scraping applications and want to use LINQPad for development. Attaching to a remote IE instance (one that I did not spawn myself) is a big plus. I can fiddle around in an existing instance...then run a bit of script...then fiddle again etc. This is harder to do with Selenium, though I suppose "pauses" could be embedded in the script during which time I could fiddle directly with the browser.

[1]: http://wax.codeplex.com/ "Wax" [2]: http://watintestrecord.sourceforge.net/ "WatiN Test Record" [3]: https://stackoverflow.com/users/52173/jeroen-van-menen "Jeroen van Menen"

Solution 5 - asp.net

The biggest difference is that Selenium has support for different browsers (not just IE or FF, see http://seleniumhq.org/about/platforms.html#browsers.

Also, Selenium has a remote control server (http://seleniumhq.org/projects/remote-control/), which means that you don't need to run the browser on the same machine the test code is running. You can therefore test your Web app. on different OS platforms.

In general I would recommend using Selenium. I've used WatiN few years ago, but I wasn't satisfied with its stability (it has probably improved by now). The biggest plus for Selenium for me is the fact that you can test the Web app. on different browsers.

Solution 6 - asp.net

Neither. Use Coypu. It wraps Selenium. Much more durable. https://github.com/featurist/coypu

Update Ye Oliver you're right. Ok why's it better? Personally I've found the Selenium driver for IE in particular to be very fragile - there's a number of 'standard' driver exceptions that I've time again found when driving Selenium for Unit Tests on ajax heavy websites.

Did I mention I want to write my scripts in c# as a Test Project ? Yes Acceptance Tests within a continous build deployment.

Well Coypu deals with the above. It's a wrapper for Selenium that allows test fixtures such as,

browser.Visit("file:///C:/users/adiel/localstuff.htm")
browser.Select("toyota").From("make");
browser.ClickButton("Search");

... which will spin up a (configurable brand of) browser and run the script. It works great with scoped regions and is VERY extendable.

There's more examples at GitHub and as Olvier below mentions, Adrian's video is excellent. I think it's the best way to drive browser based tests in the .Net world and tries to follow it's Ruby namesake capybara

Solution 7 - asp.net

I've used both, they both seem to work ok. My nod is for Selenium as it seemed to have better Ajax support. I believe WaTiN has matured though since last I used it so it should have the same thing.

The biggest thing would be which development environment do you like to be in? Selenium and Watin have recorders but Selenium is in the browser and watin is in visual studio. + and -'s to both of those.

Solution 8 - asp.net

Until now we are a pure Microsoft Shop for delivering solutions for the enterprise and went with WatiN. This may change in the future.

As a more recent source:

Microsoft printed in [MSDN Magazine 12/2010][1] a BDD-Primer with the combination of SpecFlow with WatiN (cool BDD-Behavior Driven Development). Its author Brandon Satrom (msft Developer Evangelist) has also posted in December 2010 a [Video Webcast][2] teaching in detail 1:1 his above findings.

There is a [Whitepaper][3] from 04/2011 on Supporting ATDD/BDD with SpecLog, SpecFlow and Team Foundation Server (Acceptance Test Driven Development/Behavior Driven Development) from [Christian Hassa][4], whose team built SpecFlow.

[1]: http://msdn.microsoft.com/en-us/magazine/gg490346.aspx "'Behavior-Driven Development with SpecFlow and WatiN' in MSDN Magazine 12/2010" [2]: http://www.ditii.com/2010/12/27/video-webcast-using-asp-net-mvc-with-community-tools/ "'Using ASP.NET MVC With Community Tools' on diTii.com" [3]: http://www.speclog.net/uploads/ATDD_BDD_SpecLog_SpecFlow_TFS_Whitepaper.pdf "Whitepaper" [4]: http://skillsmatter.com/expert/open-source-dot-net/christian-hassa "Christian Hassa"

Solution 9 - asp.net

I use Watin, but haven't used Selenium. I can say I got up and running quickly on Watin and have had few to no problems. I can't think of anything I have wanted to do that I couldn't figure out with it. HTH

Solution 10 - asp.net

I generally use Selenium, mainly because I like the Selenium IDE plugin for FireFox for recording starting points for my tests.

Solution 11 - asp.net

I recommend WebAii since that's what I've had any success with and when using it my gripes were few. I never tried Selenium and I don't remember using WaTiN much, at least not to the point where I could get it to succesfully work. I don't know of any framework that deals with Windows dialogs gracefully, although WebAii has an interface for implementing your own dialog handlers.

Solution 12 - asp.net

I considered using both. I used the recorder for Selenium to build some tests in FF. I tried to do the same in Watin and found that the Watin Recorder (2.0.9.1228) is completely worthless for our sites. It appeared to be rendering the site in IE6 -- making our site effectively unusable for recording. We don't support IE6. I couldn't find any way to change the browser it is using. I only found one Watin Recorder out there. If there's more than one, or one that is kept up to date, please comment.

The Selenium Recorder IDE for Firefox is simple to use and ports tests to C#. It isn't great at this. I couldn't get porting test suites to work, despite reading a blog post or two that had workarounds. So there's a bit of manipulation of the generated code. Still, it works 90% and that's better than the alternative.

For my money/time, Selenium is superior just for the ease of building new tests. IE doesn't have any good developer toolbars that are anywhere near as good as Firebug, so I'm doing my development in Firefox to begin with, so having a good working recorder in Firefox is a huge bonus.

My conclusion here was a lot like that democracy quote by Churchill: Selenium is the worst form of automated UI testing. Except for all the other ones.

Solution 13 - asp.net

At the risk of going off on a tangent, I'd recommend Axe/WatiN. Axe allows tests to be written in Excel by 'Manual' Testers with no knowledge of the underlying test 'language'. It does need a 'Technician' to write the bespoke actions (IE. Today I had to do a slightly complex Table lookup & cross-reference) but once written the actions can be used in tests by the non-techy testers.

I also heard that the UK Government Gateway project (which I believe has 6K+ tests automated tests) recently ported all their tests from Axe/Winrunner to Axe/Watin within a week!! And many of the tests are pretty complex - I know as I worked on it a few years ago...

I'm looking at Selenium at the moment, as a potential Client uses it. But i do suggest a wee look at Axe as a layer above the 'work horse' tool.

Solution 14 - asp.net

If you have to access iframes, modal dialogs and cross domain iframes WatiN is a way to go. Selenium couldn't handle the iframes it was throwing commandtimeout exceptions. WatiN you could do lot more things especially if the website uses IE specific stuff like ShowModalDialog etc.. WatiN handles all of them very well. I could even do cross domain iframe access.

Solution 15 - asp.net

You will have to do both if you need to do IE and FF testing, but they are only going to work so well for presentation testing. They cant detect if one element is slightly off, just that the elements are present. I dont know of anything that can replace the human eye for UI / presentation testing, though you could do a few things to assist it (take screenshots of the pages at each step for users to review).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavGarciaView Question on Stackoverflow
Solution 1 - asp.netJeroen van MenenView Answer on Stackoverflow
Solution 2 - asp.netMark ErdmannView Answer on Stackoverflow
Solution 3 - asp.netColeView Answer on Stackoverflow
Solution 4 - asp.netGrynnView Answer on Stackoverflow
Solution 5 - asp.netIgor BrejcView Answer on Stackoverflow
Solution 6 - asp.netpenderiView Answer on Stackoverflow
Solution 7 - asp.netrballView Answer on Stackoverflow
Solution 8 - asp.netHenry99View Answer on Stackoverflow
Solution 9 - asp.netJasonSView Answer on Stackoverflow
Solution 10 - asp.netSteven RobbinsView Answer on Stackoverflow
Solution 11 - asp.netMark CidadeView Answer on Stackoverflow
Solution 12 - asp.netjcollumView Answer on Stackoverflow
Solution 13 - asp.netMat WView Answer on Stackoverflow
Solution 14 - asp.netkesavkollaView Answer on Stackoverflow
Solution 15 - asp.netStingyJackView Answer on Stackoverflow