Web Application Test In Ruby
Sumanth Krishna. A www.sumanthkrishna.com
Agenda Introducing the topic Discussion on Testing frameworks/tools and
it’s necessity Ruby Installations Architecture Testcases Scope
TAG CLOUD ruby
Apache
install
webserver FireWatir
Nginx
WATIR goto html web-applications
user
tests Assertions get_string
assertions
temp-
DOM opensource
firefox-addon
click hudson SVN COM open-source IE gems open-QA ruby regression loadrunner mercury automatio deployment browers tools
WATIR
html DOM
recorder
telnet
Prerequisites Can you believe you really don’t need any
special skills to implement this!
What is WATIR? open-source functional testing tool for web-
applications Simulate the user actions (filling/submitting forms…) Drives Internet Explorer browser FireWatir – for FireFox
Ruby based Various assertions (content-based) Connects to databases Reading data files Exporting data (xml/html/excel…)
Why use WATIR? Free Powerful Simple (easy to use and learn) Excellent Support Strongest Presence
Watir/Watin/Watij [Web Application Testing In
Ruby/.NET/Java ]
Huge resource of supporting tools –
Firewatir, Watir Recorder ++, Wet, Cubictest,
Visual Studio
Is not? Watir is not a record/playback tool. However, there are several recorders “out
there” WatirMaker Watir WebRecorder Webmetrics RIA Script Recorder (most recent
discussion…they are considering open sourcing their application)
Watir is not a link checker However, you can easily write your own link
checker and customize it to your specific needs. Watir is not a test case management tool. However, you can write one in Ruby if
IE-WATIR Use the OLE/COM Automation interface to Internet Explorer
Web Application
DOM
IE
Automation Interface
Watir/Ruby
FF-FireWATIR Web Application
DOM
FF
JSSh
Automation Interface
FireWatir/Ruby
Browser Support
IE COM
FF JSSH
Apple Events
V8 Debugger
Dragonfly
Watir API Component 1
Component 2
Component 3
Test Script
Component 4
Installing: Windows Install Ruby: Use the Ruby one-click installer for windows Install the latest gem watir (ruby packages are called gems)
gem install watir And you find the following gems installing… Successfully installed xml-simple-1.0.11 Successfully installed s4t-utils-1.0.4 Successfully installed builder-2.1.2 Successfully installed user-choices-1.1.6 Successfully installed commonwatir-1.6.2 Successfully installed firewatir-1.6.2 (to support Firefox) Successfully installed watir-1.6.2 Successfully installed win32-api-1.3.0-x86-mswin32-60 Successfully installed windows-api-0.3.0 Successfully installed rubyforge-1.0.2 10 gems installed Installation done… let’s move ahead
What Next? Since we are here to test the web-
application Navigate the browser? Find elements on the page? Interact with elements on the page? Check output on the page? Create and use Methods? Create formal test cases?
Step by Step Navigate to the browser #Always Load the Watir library at the top of
your script require ‘watir’
Start IE and navigate to a given/different
URL IE = Watir::IE.start(‘http://www.qvnatel.com’) IE.goto(“http://free-
opensource.qvantel.net/mediawiki//index.php /Main_Page ”) IE.close
Finding Elements TextBox
IE.text_field(how, what)
Button
IE.button(how, what)
DropDownList
IE.select_list(how, what)
CheckBox
IE.checkbox(how, what)
RadioButton
IE.radio(how, what)
HyperLink
IE.link(how, what)
Form
IE.form(how, what)
Frame
IE.frame(how, what)
And many, many more (div, label, image, etc…)…
Interacting with Elements #Set the text field (or text area) specified
name specified value. ie.text_field(:name,'name').set('value')
#Sets the select with to the specified value ie.select_list(:name,'name').select('value')
#Click the button with the specified value
(label) ie.button(:value,'value').click
#Clicks the link matching 'text' ie.link(:text,'text').click
#Accessing elements in a "frame" or
Closer view
browser.button(:value, "Click Me").click
[Variable] . [method] (: [element] , “ [unique identifier]” . [method]
Checking Output #Get the title of the page ie.title #Get all the text displayed on the page ie.text #Get all the HTML in the body of the page ie.html #Return true if ‘text’ is displayed on the page ie.contains_text('text')
Ruby advantage Since WATIR is ruby based web application
testing framework, we can customize the script according to our needs. Taking Ruby’s Object Oriented concepts, create more dynamic/customized scripts Use classes & methods effectively Access even the database to validate the data
Test::Unit Assertions
Methods #Here is an example method for logging into a web
application. Its two parameters are a user and password (both of which have defaults). It returns an instance of IE def login(user=“test_admin”,password = “Password123”) ie=Watir::IE.start(‘http://someURL.com/login’) ie.text_field(:name,/user/i).set(user) ie.text_field(:name,/password/i).set(password) ie.button(:value,/login/i).click return ie end
#Now we can easily login with the default user.. ie = login #or with a unique user ie = login(“Fred”,”flinstone”)
Full Fledge Test Case require 'test/unit' #includes Ruby's test case functionality require ‘util’ #Assuming our login method is saved in util.rb
#Test cases are contained within classes which extend Ruby’s base test case class class MyTest < Test::Unit::TestCase def setup #Optional, will be run before each test method. @ie = login() #call our login function. end
def test_some_link #Test methods must begin with "test_“ @ie.link(:text,”some_link”).click #click on some link #verify that the proper page loaded assert(@ie.contains_text(“My Some Link Page”)) end def teardown #Optional, will be run after each test method. @ie.close end end
Installing: Ubuntu Install Ruby:
sudo apt-get install ruby Install the latest gem firewatir (ruby packages are called gems)
sudo gem install firewatir And you find the following gems installing… Successfully installed xml-simple-1.0.11 Successfully installed s4t-utils-1.0.4 Successfully installed builder-2.1.2 Successfully installed user-choices-1.1.6 Successfully installed commonwatir-1.6.2 Successfully installed firewatir-1.6.2 Successfully installed rubyforge-1.0.2 7 gems installed (3gems to support IE/Windows environment are not installed)
Installation done… let’s move ahead
Tweaks/Tips While working on Linux platform need to
specify require “rubygems” at the top of test case
ff = FireWatir::Firefox.new Start firefox in jssh mode For Windows: Close instances of firefox (if any) Type “firefox.exe –p –jssh” in the “Run”
ie = Watir::IE.new
Scope Using Watir for all web applications Integrate it with Automation/Building
process
Watir
References
Wikipedia: http://en.wikipedia.org/wiki/Watir Watir main site: http://wiki.openqa.org/display/WTR/ Watir user guide: wtr.rubyforge.org/watir_user_guide.html Watir API: wtr.rubyforge.org/rdoc/index.html Mailing List: rubyforge.org/mailman/listinfo/wtr-general Project site: http://wiki.openqa.org/display/WTR/ User Contributions/examples: http://wiki.openqa.org/display/WTR/Contributions Watir FAQ: http://wiki.openqa.org/display/WTR/FAQ Watir Recorder
http://www.hanselman.com/blog/IntroducingWatirMakerRecordingForRubybasedW http://www.hanselman.com/blog/NewReleaseOfWatirMakerNowWatirRecorder. aspx FireWatir
Source: http://code.google.com/p/firewatir/wiki/Firewatir Ruby
Ruby site: http://ruby-lang.org Ruby docs: http://ruby-doc.org/ Ruby Quickstart: ruby-lang.org/en/documentation/quickstart/
Thanks
[email protected] www.sumanthkrishna.com