Automated Functional Testing – Part 3 of …
Ok you got me, I’ve been slacking! I missed last week because I took delivery of my new bike a Revolution Courier since then I’ve spent all my spare time tearing around on that. Anyhoo back to work. Last time we got our environment all setup so this time we going to write a Ruby/Watir script which talks to the portal.
OUR FIRST SCRIPT
This script will:
- Reference the Watir library
- Open Internet Explorer
- Goto the portal login page
- Enter a username and password
- Logon
I think that’s quite enough for our first script so here it goes. Using your favorite editor create a file called c:\watir\scripts\myfirstscript.rb with the following content:
require 'watir' ie = Watir::IE.new ie.goto('http://myportal:50000/irj/portal') ie.text_field(:id, 'logonuidfield').set('myuserid') ie.text_field(:id, 'logonpassfield').set('mypassword') ie.button(:name, 'uidPasswordLogon').click
Now lets just break this script down and explain what is going on.
REFERENCE THE WATIR LIBRARY
We first need to pull in the Watir library which will allow us to interact with Internet Explorer:
require 'watir'
The require keyword is simply Ruby’s way of referencing an external library.
OPEN INTERNET EXPLORER
Next we create a variable ie which we’ll use to reference a object allowing us to send commands to Internet explorer.
ie = Watir::IE.new
GOTO THE PORTAL LOGIN PAGE
Next call the method goto passing a URL which Internet Explorer will open.
ie.goto('http://myportal:50000/irj/portal')
Obviously you need to use your own portal url here.
ENTER A USERNAME AND PASSWORD
We now use the text_field method to fill in a username and password.
ie.text_field(:id, 'logonuidfield').set('myuserid') ie.text_field(:id, 'logonpassfield').set('mypassword')
Notice we are passing two parameters to the text_field method, a :id symbol and a string. The :id symbol is the html attribute id and the string is the value of the id attribute. In plain english the first text_field line:
ie.text_field(:id, 'logonuidfield').set('myuserid')
Is actually saying – find the text field with an id attribute of ‘logonuidfield’ and set it’s value to ‘myuserid’. Again you will need to use a real user id and password for your portal.
LOGON
Finally we click the Logon button.
ie.button(:name, 'uidPasswordLogon').click
Here we are doing the same as the text_field method, we are passing two parameters to the button method which are used to identify and click the Login button.
THE RUN
Let’s run the script and see what happens. Open a DOS window and type the following commands:
cd c:\watir\scripts ruby myfirstscript.rb
As if by magic you should now see an Internet Explorer window open with your portal login page showing. The User ID and Password fields will turn yellow as they are filled with the values from your script. Finally the Log on button will turn yellow as it is clicked. You should now be logged into your portal!
COMING UP IN PART FOUR
Ok that enough for this post next time we’ll integrate our script with the Ruby unit testing framework, the key to running hundreds of test scripts from one simple command.
great series of blogs, looking forward to next ones.
Petr.
you rearly know how to keep the tension. Don't forget to post your series also on the Forum Topic: Weblogs related to Ruby and SAP.
Regards
Gregor
Im also on the testing business (fuctional, perfomance) for SAP using Mercury tools and also the VBScript + SAP API, and reading your post, i found that when you call the functions that will populated the text fields, you're putting as an id, the name of the object, my question is, how did get that info?, the name , properties of the objects??
Is there any tool that helps you to do that or you just read the Source code of the web page?
Cheers,
I find the easiest way to get these IDs is to use Firefox with the Web Developer Toolbar extension installed. The Web Developer Extension has a show Form Details option which gives a little yellow box by each control showing its ID attribute. This saves me having to dig through the page source code.
Hope that helps.
Cheers,
Justin