back forward index

Internet Link Exchange

Member of the Internet Link Exchange

Free Home Pages at GeoCities


Robin,
 
I have include a  text of a perl script I have written as an example of Automating the IE web  browser.
 
Henry Wasserman and  myself were looking for a way to Automate the browser for testing since we are  in the Quality Assurance group.
After a lot of  research we found perl was excellent at this.  
 
I figured this may be of interest to others.  Please feel free to post this on your site if you feel that it will be  useful.
 
Enjoy
 
 
 
Thank  you
Rob  Marchetti
 
 

 
 
 
use strict;
use Win32::OLE  qw(EVENTS);
#==============================================================================
#  Automation Example - by Rob Marchetti/Henry Wasserman
# revised version  1.0b
#
# This is an example of how to perform automation using I.E.
#  It launches I.E. goes to dice and ask for a job title to search for
# It does  not actually save any jobs, this is purely to used as an example
# I have  included some print statements for  debugging
#
#==============================================================================
my  @Documents;
my $notcomplete = 1;
my $URL = "http://www.dice.com/jobsearch/index.html";   #site you want to search
#
#
 
 

$Win32::OLE::Warn = 0;
# Launch IE aand Grap an instant of the I.E.  browser
my $IEbrowser = Win32::OLE->new('InternetExplorer.Application');  #or die $!;
 
$IEbrowser->{left} = 0;
$IEbrowser->{top} =  0;
$IEbrowser->{height} = 725;
$IEbrowser->{width} =  650;
$IEbrowser->{menubar} = 0;
$IEbrowser->{toolbar} =  0;
$IEbrowser->{statusbar} = 1;
$IEbrowser->{visible} =  1;
$IEbrowser->navigate($URL);     #site you want to  search
#
#my $hnd = $IE->{HWND};
#print "Here's the Window handle:  $hnd\n";
## Wait until IE is ready:#
  WaitForBusy();
   
#Lookey here Objects!
my $IEDocument = $IEbrowser->{Document};
#  Tell someone where your going to
  print "\nConnecting to dice: " .  $IEDocument->URL . "\n";
  my @Docs = ();
 

  push @Docs, $IEbrowser;
# Ask for a Job title to search  on
  print "\nEnter  a Job Title to Search: ";
  
# Grab  the job title from what the user types in ( no error checking yet)
  my  $sname = ;
  
# Enter the Job Title into the text box on  Dice
  SetEditBox(\@Docs, "query", "$sname");
 
#Click the submit button
   ClickFormButton(\@Docs,"Search");
  
 
# the the user what you are searching for!
  print "Searching Dice  for $sname jobs......\n";
 
 
 
 
 
#Quit IE an Open Jobs.txt
  print "Search complete!";
 

# Wait for IE to load and get the documents
sub WaitForBusy  
  while ($IEbrowser->{Busy} == 1) {
    #print  "Here's Busy: " . $IE->{Busy} . "\n";
     sleep(0.4);
  }
  #print "Leaving WaitForBusy\n";
}
 

# Wait for a DocumentComplete
sub WaitForDocumentComplete {  #$Document
 my $i;
 eval {
  print "Cleaning out  \@Documents\n";
    @Documents = ();
  #print  "Shifting in new DOM\n";
   my $IEDocument = shift  @_;
    while ($notcomplete) {
    if  (defined $IEDocument->all->length)  
        for (my $i=0;  $i<$IEDocument->all->length; $i++)  
     print $IEDocument->all($i)->tagName .  "\n";
        if (defined  $IEDocument->all($i))  
           $IEDocument->all($i)->tagName;
       
     }
      
  }
  };
 if ($@) {
   if ($@ =~  /undefined/) {
   print "Exception: $@  \n";
   #print "Calling  WaitForDocumentComplete\n";
      WaitForDocumentComplete($IEDocument);
  } else  
     #print "Exception:  $@\n";
  }
 }
 $notcomplete =  1;
 #print "Here are the URLs:\n";
 my $counter =  0;
 for (@Documents) {
  $counter++;
  #print  "Url " . $counter . ":" . $_->Document->URL .  "\n";
 }
 return @Documents;
}
 
 
 

sub Event {
 my ($Obj,$Event,@Args) = @_;
 my  $IEURL;
 #print "Event triggered: '$Event'\n";
 #if ($Event =~  /^StatusTextChange$/) {
  #my $Status = shift  @Args;
  #print "$Status\n";
 #}
 if ($Event =~  /^DocumentComplete$/) {
   $IEURL =  $IEbrowser->Document->URL;
 
  my $ArgsURL =   @Args[0]->Document->URL;
  #print  "$IEURL\n";
  #print "$ArgsURL\n";
  if  ($IEbrowser->ReadyState() == 4) {
   #print "Browser is ready\n";
   #print "Setting \$notcomplete to  0\n";
   $notcomplete =  0;
  }
  #print "pushing arg " .  @Args[0]->Document->URL . "\n";
  push @Documents, shift  @Args;
 }
}
 

# Find the text box on the page and enter your search text
sub  SetEditBox { #\@Docs, $name, $value
 my $Documents = shift  @_;
 my $name = shift @_;
 my $value = shift  @_;
  my $Document;
 my $i;
 my $j;
 my  $k;
 foreach $Document (@$Documents) {
    $IEDocument  = $Document->{Document};
    #print "Here's the URL inside  SetEditBox: " . $Document->Document->URL . "\n";
    for  ($i=0; $i<$IEDocument->all->length; $i++) {
     #print "Outer for $i " . $IEDocument->all($i)->tagName .  "\n";
     if ($IEDocument->all($i)->tagName =~  /^FORM$/) {
       my $form =  $IEDocument->all($i);
         for  ($j=0; $j < $form->all->length; $j++)  
            if  ($form->all($j)->getAttribute("name") =~ /^$name$/)  
               $form->all($j)->{value} =  $value;
               $form->all($j)->style->{backgroundColor}  =  "yellow";    # Highlight the edit box color to  yellow
              sleep  3;
              return;
 

        
       }
      
    }
  }
}
 
 
 

# Click the Search button
sub ClickFormButton { #\@Docs,  $ButtonName
 my $Documents = shift @_;
 my $ButtonName = shift  @_;
 my $Document;
 my $IEDocument;
 my $i;
 my  $j;
 my $k;
 foreach $Document (@$Documents) {
    $IEDocument = $Document->{Document};
    for ($i=0;  $i<$IEDocument->all->length; $i++) {
       if ($IEDocument->all($i)->tagName =~ /^FORM$/)  
      my $form =  $IEDocument->all($i);
      for ($j=0; $j <  $form->all->length; $j++) {
       my  $name = $form->all($j)->getAttribute("value") . "\n";
 
            if  ($form->all($j)->getAttribute("value") =~ /^$ButtonName$/)  
         $form->all($j)->click();
                 $form->all($j)->style->{backgroundColor}  =  "yellow";
                 sleep 5;
             return;
 
        
       }
      
    }
  }
}
 
 $IEbrowser->Quit();
  
back forward index