Skip to Content

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.

To report this post you need to login first.

4 Comments

You must be Logged on to comment or reply to a post.

  1. Guillermo Riojas
    Justin, great blog, but i have a question for you.
    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,
    (0) 
    1. Justin Ramel Post author
      Hi,

      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

      (0) 

Leave a Reply