/* PHP & MySQL Blog */
In part 1 of this tutorial you have seen how to write a simple web test using Selenium. In this part we will see how to use the test generated using the IDE with Selenium RC and PHPUnit.
In this part we will use Delicious as our test target. I’ve already created a small Selenium test that you can use. You can download the HTML source from here.
Starting up.
Restart the Selenium IDE. In the source tab replace the default HTML with the one from the above file. Set the Base URL to http://delicious.com/. After doing this your IDE should like below.
If you are on a slow internet connection than it may help to slow the test speed.
So what exactly does this test do? Simple:
1. First it opens the delicious home page
2. Then it searches by the keyword ’selenium’
3. Reads the total number of bookmarks from the results page as shown below
Now this may not look like a test for you , but it is just an exercise in using Selenium, you will surely apply it to a good test case. Onwards…
Before running this test make sure that you are logged out of Delicious.
Now run the selenium IDE test. After the test is successfully completed this is what you should see in the log pane.
Is that all?
If this was all there was I wouldn’t be really writing this post. The interesting part comes now - running the same test from PHP. From the file menu select ‘Export Test Case As…’ and as we are using PHP, select ‘PHP - Selenium RC’. Save the file by the name ‘Example.php’.
This is what we will get in the ‘Example.php’ file.
<?php require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; class Example extends PHPUnit_Extensions_SeleniumTestCase { function setUp() { $this->setBrowser("*chrome"); $this->setBrowserUrl("http://delicious.com/"); } function testMyTestCase() { $this->open("/"); $this->type("homepage-searchinput", "selenium"); $this->click("homepage-searchsubmit"); $this->waitForPageToLoad("30000"); $this->getText("xpath=/html/body[@id='index']/ div[@id='doc3']/div[@id='bd']/div[@id='yui-main']/ div[@id='content']/h3/a/em[1]"); } } ?> |
A short notice.
Before we proceed a few points to consider. Make sure that the file name and the class name are the same, here ‘Example’. Say if you change the class name to ‘Delicious’ make sure that you also change the file name to ‘Delicious.php’.
What the code basically does is it initializes the browser to ‘chrome’ (you can set the browser to your preference by changing to ‘*iexplore’ or ‘*firefox’); sets the baseurl to ‘http://delicious.com/’ and runs the test.
Whats the complex looking line!?
Everything may look fine to you except maybe the last line - ‘$this->getText…’. The function ‘getText’ returns the text found at the element specified in the expression. The complex looking line is an xpath expression to the results element:
You don’t have to rake your brains to find an xpath to an element. An easy way is to use the XPather Firefox addon to get the xpath of any element on a page. After you download and install the addon, restart Firefox, right-click on any element and from the context menu select ‘Show in XPather’. XPather retrieves the xpath to the specified element, which you can than use in your test code.
Downloading and installing Selenium RC
Selenium RC is a Java based command line server that starts browsers and runs commands you pass from your tests.
1. First make sure you have a Java runtime installed on your machine.
2. Download Selenium RC from here.
3. After extracting the files from the archive copy the ’selenium-server.jar’ file to any directory you feel appropriate. I copied it to my PHP installations bin directory.
4. Start the Selenium RC server from the command-line by issuing the following command:
java -jar selenium-server.jar
This will start the server on port 4444.
5. Now the server is ready to accept test commands from your PHP script. Make sure you keep this server running till you finish testing.
Installing PHPUnit
1. An easy way to install PHPUnit is to use the PEAR installer. The PEAR channel (pear.phpunit.de) is used to distribute PHPUnit so make sure that it is registered with your local PEAR environment:
pear channel-discover pear.phpunit.de
After the channel is registered install PHPUnit:
pear install phpunit/PHPUnit
Actual testing
Now that PHPUnit is installed and the Selenium RC server is up and running, its time to run our test we saved before in our ‘Example.php’ file. Type the following on your command-line:
phpunit Example
This will start the test. The PHPUnit Selenium driver will execute each test command from your file and send it to the Selenium server, which does the job of launching the appropriate browser, opening web pages, and performing various specified actions; and closing the browser after the test completes.
Now the above test does basically nothing important. So we will add some simple conditional statements to the code.
.
.
$bookmarks = $this->getText("xpath=/html/body[@id='index']/
div[@id='doc3']/div[@id='bd']/
div[@id='yui-main']/div[@id='content']/h3/a/em[1]");
echo ($bookmarks > 3000)? "On the top" : "Still not there";
}
}
?> |
This is what PHPUnit has to say about the above test.
Or we can use an assertion as below, deliberately rigged to fail the test:
.
.
$bookmarks = $this->getText("xpath=/html/body[@id='index']/
div[@id='doc3']/div[@id='bd']/
div[@id='yui-main']/div[@id='content']/h3/a/em[1]");
$this->assertGreaterThan(33000, $bookmarks);
}
}
?> |
Now PHPUnit will shout failure:
You can look at more functions to implement in your tests here and here.
This concludes the second part of the tutorial.
|
|
This site is a digital habitat of Sameer, a freelance web developer working from Pune.More
18 Responses
1
Sameer Borate’s Blog: Selenium IDE Tutorial - Part 2 : WebNetiques
November 25th, 2008 at 4:02 am
[...] Borate has part two of his look at using the Selenium IDE in testing PHP [...]
2
Tims Blog » Blog Archive » Fantabulous idea
November 25th, 2008 at 2:36 pm
[...] selenium ide tutorial [...]
3
R. M. Shiblee Mehdi
December 6th, 2008 at 1:52 am
I was expecting more on IDE tutorial.
4
Pooja
December 8th, 2008 at 4:36 am
Hi, I m not able to playback the script involving a YUI object using Selenium IDE, Do I need to use CCS Selector? Can you please guide me with an example
sameer
December 9th, 2008 at 9:27 pm
You need to use the Selenium UI-Element Locator extension, a good resource is located here:
http://ttwhy.org/home/blog/2007/05/12/selenium-ui-element-locator/
6
Nguyen
January 16th, 2009 at 1:57 am
Hi,
I did the same as your guide. However, I always receive message “Class PHPUnit_Extensions_SeleniumTestCase could not be found in Example.php”.
I have still stuck with it. Please help me asap.
Thanks so much for your time.
sameer
January 16th, 2009 at 2:46 am
Its probable that some of the phpunit files didn’t get copied, ‘SeleniumTestCase.php’ here. Why don’t you try a manual install.
Got to ‘http://pear.phpunit.de/get/’ and download version 3.0.0 from there. Extract them and copy the files to your PHPUnit directory which must be located in your PHP includes path. Make sure you make a backup copy of your original PHPUnit directory first.
8
sree
January 29th, 2009 at 5:38 am
can we have one more tutorial ,where u can demonstrate the same test from Java/Junit?
9
Scal
March 4th, 2009 at 4:07 am
Hey;
found your article very good; I was wondering if you can tell if it’s not possible to call a local host (127.0.0.1) in HTTP mode to launch Selenium test instead of manual command prompt calls?
Thanks
10
Jeffy
March 9th, 2009 at 12:07 am
When I run phpunit Example
I get this message
RuntimeException: Could not connect to the Selenium RC server.
Do you know why it is ?
sameer
March 9th, 2009 at 12:23 am
Are you using Windows. If yes then which version; is the Windows personal firewall turned on? It could be blocking port 4444.
12
Jeffy
March 9th, 2009 at 1:58 am
I am using Windows xp and firewall was turned on and I gave the allow option when the pop up asked to allow or block..
13
saujanya
April 13th, 2009 at 3:21 am
Could you please demonstrate with an example where selenium. can we test .NET application with selenium. I really wanted to for .NET application selenium RC can be used or not?
sameer
April 13th, 2009 at 5:53 am
You can test .NET applications with Selenium, but not being a .NET person I have to point you to a couple of URLS.
http://codebetter.com/blogs/jeremy.miller/archive/2006/05/14/144666.aspx
http://www.stevetrefethen.com/blog/AutomatedTestingOfASPNETWebApplicationsUsingSelenium.aspx
http://www.mythoughtpot.com/2008/05/27/selenium-rc-with-net-30/
15
saujanya
April 14th, 2009 at 4:12 am
Thanks sameer, the links were really very helpful. Hope to see some more blogs on selenium from you.
16
phpdeveloper
April 28th, 2009 at 3:47 am
Your blog is very useful to learn the testing.
But when I followed same steps I’m facing error as below:
(at server side)
14:48:07.057 WARN - GET /selenium-server/driver/?cmd=getNewBrowserSession&1=%2Ac
hrome&2=https%3A%2F%2Fwww.sitename.com%2F HTTP/1.0
java.lang.RuntimeException: Firefox refused shutdown while preparing a profile
at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.wai
tForFullProfileToBeCreated(FirefoxChromeLauncher.java:290)
at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.lau
nch(FirefoxChromeLauncher.java:143)
at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.lau
nchRemoteSession(FirefoxChromeLauncher.java:329)
at org.openqa.selenium.server.BrowserSessionFactory.createNewRemoteSessi
on(BrowserSessionFactory.java:312)
at org.openqa.selenium.server.BrowserSessionFactory.getNewBrowserSession
(BrowserSessionFactory.java:113)
at org.openqa.selenium.server.BrowserSessionFactory.getNewBrowserSession
(BrowserSessionFactory.java:78)
at org.openqa.selenium.server.SeleniumDriverResourceHandler.getNewBrowse
rSession(SeleniumDriverResourceHandler.java:653)
at org.openqa.selenium.server.SeleniumDriverResourceHandler.doCommand(Se
leniumDriverResourceHandler.java:410)
at org.openqa.selenium.server.SeleniumDriverResourceHandler.handleComman
dRequest(SeleniumDriverResourceHandler.java:388)
at org.openqa.selenium.server.SeleniumDriverResourceHandler.handle(Selen
iumDriverResourceHandler.java:135)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:
244)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher$Fil
eLockRemainedException: Lock file still present! C:\DOCUME~1\LOCALS~1\Te
mp\customProfileDir3dcc7040497a4e90853a27ade6194c53\parent.lock
at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.wai
tForFileLockToGoAway(FirefoxChromeLauncher.java:247)
at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.wai
tForFullProfileToBeCreated(FirefoxChromeLauncher.java:288)
… 18 more
(and at client side)
PHPUnit 3.2.15 by Sebastian Bergmann.
E
Time: 23 seconds
There was 1 error:
1) testMyTestCase(Donation1FF)
RuntimeException: Could not connect to the Selenium RC server.
FAILURES!
Tests: 1, Errors: 1.
/////
ie it looks like it is having problem with creating firefox profile…
So guide me to solve this problem
sameer
April 28th, 2009 at 9:28 pm
Instead of using Firefox try IE.
change:
$this->setBrowser(”*chrome”);
to this:
$this->setBrowser(”*iexplore”);
18
rohan
May 26th, 2009 at 5:01 am
very informative,,waiting for the next part,,do try to include a brief regarding few important selenium commands and the rollup rules,,keep it up,,