webdriver-selenium support in TestWise2

By mark.

Back to 2010-07, the first pre-release of TestWise2 supports upcoming webdriver-selnium (or known as Selenium2) via watir-webdriver. To help TestWise users to migrating existing RWebSpec test scripts over with no or little changes, and same time being more flexible, TestWise2 will introduce rwebspec-webdriver gem, let me illustrate with an example:

To use RWebSpec with Watir, in your test_helper.rb

require 'rwebspec'

Now if you want to switch to RWebSpec with Webdriver-Selemnium, just change the line in test_helper to:

 require 'rwebspec-webdriver'

Try latest TestWise2 pre-release: TestWise-2.0b1-setup.exe
(please note: selenium-webdriver is still under development)

As always, RWebSpec gives the flexibility to mix with underlying framework, i.e, you can develop and run plain webdriver-selenium or watir test scripts directly in TestWise2.

Also change the test framework in the project settings in TestWise2.

TestWise IDE, Recorder, and RubyShell March Updates

By mark.

TestWise Recorder v1.3 now supports latest Firefox 4.

Also the new version of TestWise v1.11 is available for download, which now supports latest Watir 1.9 along with some enhancements.

RubyShell v1.5 sees updates of many gems, such as Watir 1.8, Ruby on Rails 3.0.5, Sinatra 1.2.1, ... ,etc. In case of you are not familar with RubyShell, this let you run tests from command line, which is a must if you want to integrate your UI test execution at a part of Continuous Integration Process.

TestWise for Mac pre-release

By mark.

Update (2010-12-24): Ver 2.0p5

Update (2010-12-10): Ver 2.0p4

TestWise for Mac is coming closer, you may download the pre-release version here: TestWise-2.0p5.zip

Installation

1. Pre-requiste:

  • Snow Leopard (Mac OS X 10.6.x)
  • RubyGems 1.3.7 or above installed (sudo gem update --system)

2. Double click the zip file to uncompress, get TestWise App.

3. Double click the TestWise App to launch


To run a Watir test, you need (on Mac) Firefox started with JSSH,

/Applications/Firefox.app/Contents/MacOS/firefox-bin -jssh

TestWise2 will add (besides Watir) support for Selenium2 (webdriver), which means your tests can be run in Chrome as well.

To switch:
And in your test helper, require 'rwebspec-webdriver' instead of 'rwebspec'.

With Selenium2, JSSH is not required for running tests in Firefox.

Continuous Integration in Nutshell: 1 of 12

By mark.

This is the first post of Continuous Integration in Nutshell series post. The importance of CI is getting realized in software projects, as Lisa Crispin summarized: "If I had to pick one reason our team has been so successful the past 7 years, our CI process is it.". I totally agree with that.

However for many people, CI is still a blur concept. The purpose of this series is to clarify that. Here is No. 1:

Continuous Integration in Nutshell: 1 of 12

If you require a bigger or print version, please contact support@agileway.com.au.

Continuous Integration: "crazy to not do it"

By mark.

At last year's CITCON, I remembered that one candidate said: "The experiences I had with continuous build integration is pretty much like this: set up one machine; installing some kind of continuous build server, put it in the corner, and tick the box.". I met some projects led by intermediate level programmers (despite of all kind of fancy titles), it was sad to find out they didn't even had a try.

How important is continuous integration? I couldn't say better than Lisa Crispin:

Whenever I speak to a conference session or user group meeting, I always tell people, 'If you arenxE2x80x99t doing continuous integration now, go back to your office and drop everything and get your CI going. It isnxE2x80x99t hard to do, there are a bunch of good tools available to help, even Testify Wizard to help you set it up. A programmer can do it in a matter of days or less. TherexE2x80x99s no excuse to not do CI.'

IxE2x80x99m convinced that in 5 years at the most, any team not doing CI will be looked upon the same way we look upon teams that donxE2x80x99t do source code control. It would just be crazy to not do it! Automated tests donxE2x80x99t have much value if they arenxE2x80x99t giving you quick feedback several times a day. Without CI, your technical debt is bound to bury you quickly.

If I had to pick one reason our team has been so successful the past 7 years, our CI process is it. ItxE2x80x99s the pulse of our team, and if it stops (as it did a few weeks back xE2x80x93 see TonyxE2x80x99s blog post!), we all just about have a heart attack! When itxE2x80x99s ticking along, we feel healthy and happy.

In up coming posts, I will share my experiences on CI.

Watir Quick Start Guide

By mark.

On Watir forum, there are countless posts on how to get started with Watir, some popular questions are:

  • Unable to install?!
  • How to install Watir behind a firewall on Windows?
  • How to use Watir with RSpec?

It will be a pity for testers giving up on Watir because having difficulty in installation. Actually, it can be made very simple. That's why I created the Watir One-Minute Quick Start Guide.

Importance of Automated Software Testing

By mark.

The election campaign is reaching the climax in Australia (election day on this Saturday). Last night, one voter asked Prime Minster a question of impact of troubled QLD health payroll system on upcoming E-Health system. In Queensland, this yet another IT project failure attracts a lot political attention, just have a look at news headlines below:

  • Qld Govt blames IBM for health payroll bungle
  • Qld may kill IBM payroll contract, seek damages Health payroll debacle: IBM to fight contract scrapping Queensland health payroll not fully tested
  • QLD health payroll failure is after similar one in the same city: Brisbane City Council to dump troubled payroll (this may not be done IBM though). And surprisingly, in this IT world, reputation or recent track records seems doesn't matter much, Gold Coast City Council (80KM from Brisbane) pays $55m to health payroll firm.

    Globally, the biggest IT disaster believed to be UK NHS (based on this ZdNet article): : "experts have warned that the project could actually cost more than xC2xA330 billion, making it the greatest IT disaster in history."

    The especially sad part of all this is that while these big companies walked away with millions, we as tax payers are ultimate victims.

    Auditor-General's report on QLD Health Payroll: Pay system not properly tested: report.

    Once one asked me, "What didn't they just fix the system? Given all the attentions (including demonstrations), 3 months is a long time, isn't it? I saw you fixing defects in our system very quickly."

    My answer: "If they don't have automated regression testing in place (most likely not), fixing a defect may break other functions. Manual testing is not good finding out that quickly. Before I check-in fixes, I run some related regression test suites in TestWise, and our continuous build server runs full regression tests every day. That's why Steve McConnell says 'The only practical way to manage regression testing is to automate it'"

    So will our elected politicians learn the lesson? Let's hope.

Watir-WebDriver support in TestWise2

By mark.

Selenium and Watir, as we know, are the two most popular open-source testing frameworks. The next big thing is WebDriver, which is now merged with Selenium 2. Thanks Jari Bakken (who is also the creator of Celerity), we have Ruby bindings for Selenium 2 and even Watir wrapper of it: watir-webdriver, which some might refer it as Watir 2.0. With watir-webdriver, users can pretty much reuse existing Watir scripts, with minor changes.

What are the benefits of using watir-webdriver comparing existing Watir 1.6.5?

  • Run same test scripts in IE, Firefox, Google Chrome and HTMLUnit (headless)
  • No JSSH plugin required for running tests in Firefox
  • Synergy of combination of Selenium and Watir

In last appearance at Watir Podcast, I said future TestWise versions will support WebDriver. Now you can try web-driver in IDE!

  1. Download TestWise-2.0b1-setup.exe and install
  2. In TestWise, open sample project c:\program files\testwise\samples\demo\demo.tpr (if you are using TestWise first, it shall be pre-loaded)
  3. Select the first test script file (left mouse click the file name on the left): ajax_rwebspec_spec.rb,
    choose your browser (IE, Firefox or Chrome), then run it
     

Our initial impression with Watir-WebDriver is good and very promising, with a few issues currently:
  • Can't reuse existing browser window, has to start up a new one
  • Test execution is slower than Watir 1.6
  • Opening browser operation seems quite CPU intensive

Please note that both Selenium 2 and TestWise2 are at early development stage, so please use Watir 1.6.5 and TestWise 1.9 for production use.


Test sites with native Windows authentication

By mark.

For some sites (especially in .NET world), users are presented a native windows' authentication window (like below) before can access to it.

The standard open_browser in Watir won't work (get stuck), as it will be waiting response from the browser.

  open_browser("http://secure.site.com") # will stuck 

To add a bit more complexity, we expect the same tests to pass whether user has already logged in or not.

The solution is:

  • Detecting Login Window using Ruby's timeout
  • Use AutoIt to fill user name and password in native Windows Login Window.
    begin
      Timeout::timeout(5) {
        open_browser("http://secure.site.com")
      }
    rescue Timeout::Error : e
      # debug "Timeout error on get to site, maybe asking for login"
      autoit = WIN32OLE.new('AutoItX3.Control')
      win_title = "Connect to edam.bluefirems.com.au"
      ret = autoit.WinWait(win_title, '', 10)
      if ret
        autoit.ControlSetText(win_title, "", "Edit2", username)
        autoit.ControlSetText(win_title, "", "Edit3", password)
        autoit.ControlClick(win_title, "", "Button3")
      end
   end

The above test scripts will work, but not readable. By applying 'Extract Function' and "Move to Helper" Refactorings in TestWise, we get:

    # ...
    rescue Timeout::Error : e
      # debug "Timeout error on get to site, maybe asking for login"
      # calling helper function in test_helper.rb
       
      login_as("zhimin@secure.site.com", "Secret")    
    end