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
Hosted by www.Geocities.ws

1