Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^7: Using WWW::Selenium To Test Or Automate An Ajax Website

by icleave (Initiate)
on Nov 28, 2009 at 11:02 UTC ( [id://809869]=note: print w/replies, xml ) Need Help??


in reply to Re^6: Using WWW::Selenium To Test Or Automate An Ajax Website
in thread Using WWW::Selenium To Test Or Automate An Ajax Website

Hi,

Q: Are you using Selenium IDE FireFox plug-in to record?

A: Yes. I have it record what I want to do, then I use the export function to put the Selenium commands into perl, then copy and paste into a text editor and remove the "_ok"s and place "sel->start();" in the code.

RE: Test::WWW::Selenium - Thanks I changed that, but my code doesn't seem to run how I want it to.

RE: Real website and login - The real website and my login is real in the code below.

RE: Else, elsif, \@ - Thanks, I changed that too but my code doesn't seem to run how I want it to.

Desired outcome:

  1. Go to www.cokezone.co.uk
  2. Login (and handle any pops if they happen
  3. Check the number of points in the account and put into a scalar variable $points
  4. Open a file handle <CODES> and read the codes into an array @codes
  5. Enter the codes into the website and check against the $points scalar variable to see if they were entered correctly - printing if the code was successful or not
  6. Carry on for each of codes in the array @codes
  7. Logout when done

Progress: I've only gotten as far as no. 2 in the Selenium IDE, and I can only get to no. 1 using the Selenium RC and Perl.

I'm pretty confident I can write a file handle and read it into an array and for each of the codes get Selenium to input them into the CokeZone website, however it's no use if I can't even automate a login that handles the popups!

Code I've written to try to login and handle the popups:

#! /usr/bin/perl use strict; use warnings; use WWW::Selenium; my $sel = WWW::Selenium->new( host => "localhost", port => 4444, browser => "*chrome", browser_url => "http://www.cokezon +e.co.uk" ); $sel->start(); $sel->open("/home/index.jsp"); $sel->click("link=Log in"); $sel->wait_for_page_to_load("30000"); if ( $sel->is_text_present("Thanks for visiting!\n\nNow here's your ch +ance to tell us what you think. This quick and easy survey will only +take you a few minutes to fill out, and it'll help us to get more of +the stuff you want to see into 'Coke Zone'.\n\nThanks for your help,\ +nThe 'Coke Zone' Team") == 1 ) { $sel->select_window("entry"); $sel->close(); $sel->select_window("null"); } if ( $sel->is_text_present("At the end of your visit on this website p +lease take the time to complete an on-line survey, which will provide + us with feedback on the website. Please do not close this window.\n\ +nEnjoy your visit") == 1 ) { $sel->select_window("stealth"); $sel->close(); $sel->select_window("null"); } $sel->click("emailAddress"); $sel->type("emailAddress", "bogus\@fake.com"); $sel->type("password", "password"); $sel->click("remember"); $sel->click("subButton"); $sel->wait_for_page_to_load("30000"); my $points = $sel->get_text("//div[\@id='header_links']/div[1]/div[1]/ +h3"); print $points $sel->click("link=Log out"); exit 0;

Replies are listed 'Best First'.
Re^8: Using WWW::Selenium To Test Or Automate An Ajax Website
by Limbic~Region (Chancellor) on Nov 28, 2009 at 14:55 UTC
    icleave,
    Please remove your user name and password. That is a stupendously bad idea. I assumed you would have /msg'd them to me. I have them now and will update this node later today with a working version.

    Update: It appears that codes appearing on US bottles of coke do not work at the UK site. I will need a few codes to make this work - you have my email address.

    Update 2: While I read the terms of use and didn't see anything preventing scraping or automation, the US site heavily relies on JavaScript that gives the appearance of thwarting this type of automation.

    • I needed to use $sel->focus($loc) to ensure the 'onFocus' event triggered
    • The above could also have been accomplished with $sel->fire($loc, 'event')
    • I also needed to use $sel->mouse_over($loc) before clicking the button
    Additionally, the site used fancy CSS to get you to click on an image of what kind of soda the code came from. After spending a lot of time getting that "just right", I realized it was not necessary - if entered the next code it would just silently update your points. You can also completely ignore any pop-ups when you go to the site because they do not interfere with site interaction.

    I would be happy to share with you the code I wrote to automate the US site but I don't know how applicable it will be to the UK site. Beyond that, I am not interested in doing this for you as it is very time consuming to get "just right". You have my email if you would like to consider other arrangements.

    Cheers - L~R

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://809869]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2024-04-25 23:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found