Selenium + FitNesse = Selenesse

Chris McMahon and Marisa Seal took on a new project late last year, maintaining and extending some work that Gojko Adjic had done for FitNesse, called WebTest. They named it Selenesse. Selenesse combines the FitNesse wiki format and framework for defining and executing tests, with the UI browser driver, Selenium.

When I first found out they were doing this I thought it was neat and could use it myself. Since they work in the Java space and I work in the dotnet space, I decided that I could contribute to their project by doing a dotnet version, so that myself and others in the dotnet space could use it and extend it as they needed.

It was particularly interesting to me for a few reasons. I am a big fan of the wiki format for test writing and execution, first and foremost. I usually write my Selenium tests in a C# Nunit class, meaning that what the test is *doing* can be somewhat difficult to shake out (even with DSLs, we're still talking about code). Certainly, my developers can get through that, but nobody outside of this team can.

I am looking forward to involving my current team's business-facing people more in our software creation process. I believe that one step toward that is to work closely with them on defining what they want and at what point we can feel like those things are "done-done". I hope that by writing tests in a format that they can read, I can quickly walk through as many of the things that will represent "done-done" as we can -- and do that early and frequently.

So I took to writing the dotnet version of Selenesse. I struggled for a while and nearly gave up on it. The structure of what is being done basically looks like this:
Selenium RC dotnet client driver <-> SlimSeleniumDriver <-> FitNesse

I was able to call any method that existed in SlimSeleniumDriver, but not the native functions in the Selenium RC dotnet client driver. It was weird and frustrating, and no matter what I did or how I wrote it, I just couldn't get it to work.

Enter Mike Stockdale (@jediwhale) to the rescue! Mike has written fitSharp, another dotnet version of some FitNesse functionality. Selenesse dotnet uses fitSharp. It turned out, my code was just fine, but there was apparently some weirdness in file locations -- I placed the Runner.exe file in the same folder as my dlls and suddenly, it worked!

So, I introduce Selenesse dotnet. Click here to download all of the source (this will change as we get more organized). Go into the dotnet-selenesse folder and you will find the FitNesse wiki root and the src folders.

Not included in that package is the Selenium RC Server. I use Sauce RC (highly recommend it!!). To execute tests, the Selenium RC Server must be running.

I'll not get into more detailed instructions here -- look out for them in the download itself. There are instructions from Marisa and Chris's initial implementation in the wiki already. These will evolve over time. In the mean time, please feel free to contact me for help if you want to get set up and are confused or are having issues (setting up seems to always be difficult for me).