Showing posts with label test. Show all posts
Showing posts with label test. Show all posts

Thursday, August 11, 2011

Watir Tutorial: Logging into EnterpriseOne

Here is a great little example to do so that we can log into EnterpriseOne and thereafter get our testing groove on.  Here's the code, and thereafter I will explain what is going on. 

  1. require 'rubygems'
  2. require 'watir'
  3. b = Watir::Browser.new
  4. b.goto("http://my.e1env.org")
  5. b.text_field(:name => "User").set "myUserID"
  6. b.text_field(:name => "Password").set "myPassword"
  7. b.button(:type => "submit").click
  8. b.wait_until {b.form(:action => "/jde/E1Menu_FastPath.mafService?e1.state=maximized&e1.mode=view&e1.namespace=&e1.service=E1Menu_FastPath&RENDER_MAFLET=E1Menu").exist?}

Lines 1 through 3 are described elsewhere. 


4.  Tell the browser object to go to your EnterpriseOne login page. 

5.  Set the 'UserID' field to your user name.

6.  Set the 'Password' field to your password.

7.  Click the submit button.

8.  This will wait until the Fastpath button is visible to Watir, it is great for ensuring that enough has loaded for your script to continue and execute the next operation successfully. 


Monday, August 8, 2011

Watir Tutorial: Installation

This is actually the second tutorial that I have written for this, and I found that there were several things that I should have covered before trying to tackle text fields within a program, that if you are new at this, would be way beyond what you can do already anyways.  So let's start with something slightly easier, installation!

Really, this should be fairly easy to do, as Watir is well documented enough for installation as far as I can tell, but in case it isn't, I will go step by step through it here, for the benefit of those that come after (in memory of the pioneers). So let's start with Ruby installation then, in case you are completely new to this. 

A bit of history:  Ruby was developed in the mid 90's by Yukihiro Matsumoto, who goes by "Matz", and who also happens to be a member of the LDS Church.  Way to go!

In order to install Ruby on Windows, which if you are working with JD Edwards, I'm assuming you are using, go here.  This is the easiest way to do it, most people refer to it as the "one click installation" or something of the sort, making it pretty easy.

What this will do is put into your start menu a shortcut called "Start command prompt with ruby", pretty neat, huh? 

Now we need to update Ruby, and get the necessary "gems" (a fancy name for libraries, or pre-compiled and packaged bits of programs for our use), so that Watir will work correctly.

Go ahead and click on "Start command prompt with ruby", and follow the installation instructions here. 



Since we are concerned with using this for JD Edwards testing, we have a little bit more to do so that we can do everything that an end-user could and would do.  One of the problems I have encountered involved the menu-exits on the EnterpriseOne screen, and because of this we have to use a little work around for now, if I solve it later I will be sure to post about that, but for now we need to do a little bit more. 

Go ahead and click here to download a program called "AutoIt".  What this is used for is to emulate key strokes on the keyboard.  When using it, you have to put "require 'win32ole'" at the beginning of your script to load the correct library.  I will be going into it's use more later, in a different tutorial. 



The last thing we have to get, is a little program called TinyTDS.  Finding this little gem(literally and figuratively), took forever.  I want you, the reader, to appreciate just how much trouble this took me to find.  (Because obviously the finder has the harder task than the writer of the actual program).  We run our JDE databases off of SQL Server.  I've read just about every article and forum post out there about connecting ruby to the database and getting it to make some queries for testing.  Obviously I hadn't because I didn't find this program until I got a tip off about the creator of the SQL Server gem itself (@metaskills) whose website is here.  I found there the program that sounded like it would work, and lo and behold it did!

Now, I understand that not everyone out there, having trouble with their database playing nicely with Ruby will find a solution in this.  But maybe someone out there will.  Just remember to ask someone that knows better than you do, after you have done all you can.

TinyTDS has a great source of documentation, that takes a little decyphering but works like a charm, I will be detailing my findings here as well, but here is where to start. 

Remember to "require 'tiny_tds'" after you have executed "gem install tiny_tds" from the command prompt with ruby. 

Watir Tutorial: Text fields in JD Edwards Enterprise One

Because JD Edwards' Enterprise One system is a web application, it can be easily tested using Watir.  The only issue I found in the most straightforward of testing is when you encounter Javascript in places like grids.  Text fields and most buttons work as expected, although you do have to drill into the HTML a step or two.  Let me give you an example.  (I will assume that EnterpriseOne, and Watir are both installed and functioning properly, as these are beyond the scope of what I intend to do here.  I will also be using Internet Explorer for this, with the Developer toolbar installed, as per the recommendation by the Watir community to locate the correct HTML tags for testing).





Let's start with a nice basic window:  The Word search window, and in our system the Fastpath would be 'P01BDWRD'.  At first glance we have a text field, a check box and a grid.  This shouldn't require any testing really since it is maintained by Oracle as I understand it, but it's an example for how to write scripts, nothing more.

Let's open the Developer Toolbar and click on the 'Search word' text field to find where it is located in the HTML.  A blue box should appear, as shown below (where the red arrow is pointing).  At the bottom, note the id field, and the name field.  Both are similar and in my tests I have used both (probably redundantly), but you may only need to use one, I'll do some testing and update later.  (Ignore the 'LEWIS*' there for now, I was just testing it.)




The other information you need is a little ways back up on the left hand window, the 'tree view', what you are looking for is indicated below, the id "e1menuAppIframe", and this will also be used later in your testing. 


The way that we tell Watir through Ruby to fill in this field is through these parameters we have just discovered using the Developer Toolbar.  Let me show you what we would code up to illustrate: 

  1. require 'rubygems'
  2. require 'watir'
  3. b = Watir::Browser.new
  4. b.goto("http://my.e1site.org")
  5. b.text_field(:name => "User").set("myUserName")
  6. b.text_field(:name => "Password").set("myPassword")
  7. b.button(:type => "submit").click
  8. b.text_field(:id =>"TE_FAST_PATH_BOX").set "P01BDWRD"
  9. b.form(:action => "/jde/E1Menu_FastPath.mafService?e1.state=maximized&e1.mode=view&e1.namespace=&e1.service=E1Menu_FastPath&RENDER_MAFLET=E1Menu").submit
  10. b.frame(:id => "e1menuAppIframe").text_field(:id => "C0_18").set("LEWIS*")

The line that we are concerned with right now is line 15 which sets our text field to the value that we want.

"b.frame(:id => "e1menuAppIframe")" is what we have to drill into to get within the correct frame.  Simply coding up the last part of line 15 I have found is not enough for Watir to find the text field in question.  Just take it as a rule of thumb, that when you are working in a program within JD Edwards, that you need to tell it that you are using that frame, and then from there tell it the text field or the button or check box or whatever.

The other piece of information we got earlier is what we use to tell it which text field.

".text_field(:id => "C0_18")" is what I had to use next, to tell it that we wanted to talk with the "Search Word" field.

Finally, ".set("LEWIS*")" is used to set the text field to the value in question.

Don't forget, that we could have used ".set("#{variabledata}")" and a for loop to cycle through an array called variabledata to get through a while set of data that we want to test.  If you are following along, and haven't successfully made a call to your database to get that data, then we will cover that later.

I hope that this has been helpful!