Selenium brings you three components. One of those, Selenium-ide is available as a firefox extension which can record your actions on a web page and then re-run it. Another component called selenium-core helps you copy the test-scripts over to the server and run it from there. This is helpful when you need more control over the way tests are run. Third one, which we are particularly interested in, is the selenium-remote. Selenium-remote has a server and client architecture.
JUnit is a unit testing framework (okay, I know you know that!). It is possible to
combine jUnit and Selelnium to write powerful client side test scripts. One advantage is that selenium testscripts can be made part of your build process.
Now, lets get into action. Download the selenium-remote.
First step would be to run the selenium-server. The server acts as a intercepting server
for the client (the client is mostly the browser).
$java -jar selenium-server.jar
19:18:09.156 INFO - Java: Sun Microsystems Inc. 10.0-b22
19:18:09.156 INFO - OS: Windows XP 5.1 x86
19:18:09.156 INFO - v0.9.2 [2006], with Core v0.8.3 [1879]
19:18:09.500 INFO - Version Jetty/5.1.x
19:18:09.500 INFO - Started HttpContext[/selenium-server/driver,/selenium-server
/driver]
19:18:09.500 INFO - Started HttpContext[/selenium-server,/selenium-server]
19:18:09.500 INFO - Started HttpContext[/,/]
19:18:09.828 INFO - Started SocketListener on 0.0.0.0:4444
19:18:09.828 INFO - Started org.mortbay.jetty.Server@6d084b
Server is up and running on port 4444 (of course you can change the port, take a look at the command line options)
You are now ready for the jUnit test case. A simple one :
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
import junit.framework.TestCase;
public class DummyTest extends TestCase {
Selenium selenium = null; // selenium object represents the browser
public void setUp() {
// Open the browser, connect to selenium server on localhost:4444. the basedomain is www.inapp.com
// *firefox is the browser command for Firefox, *iexplore for IE.
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://www.inapp.com" );
}
public void testDummyFunction() throws Exception {
selenium.open("http://www.inapp.com"); // open the url in browser
assertTrue(selenium.getTitle().startsWith("InApp")); // the test!
selenium.close();
}
}
Note that you have to specify a base-domain while instantiating DefaultBrowser. A url from another domain cannot be opened from the browser for security reasons.
Dont forget to include selenium-java-client.jar in your classpath.
Lets look at another example :
import com.thoughtworks.selenium.SeleneseTestCase;
public class DummyTest extends SeleneseTestCase { //Notice that we extend 'SeleneseTestCase' instead of 'TestCase'
public void testDummyFunction() throws Exception {
setUp("http://www.inapp.com", "*firefox"); // initialize the DefaultBrowser
selenium.open("http://www.inapp.com"); // open the url in browser
assertTrue(selenium.getTitle().startsWith("InApp")); // the test!
selenium.close();
}
}
We make use of SeleneseTestCase provided by selenium remote. It makes the code concise.
The DefaultBrowser class have lot of methods which we can use in order to validate the content in the browser and fire events. You event have a 'captureScreenshot' method to get a screenshot of your browser. So next time you have a test fail, get the screenshot mailed to you :)