This tutorial shows how to enhance grid functionality by creating a custom proxy to control the grid nodes. the default proxies shipped with grid2 ( org.openqa.grid.selenium.proxy.SeleniumRemoteProxy for selenium1 org.openqa.grid.selenium.proxy.WebDriverRemoteProxy for webdriver ) have the minimal functionality for grid to work. They will keep track of the running tests, assign new tests to the node if they can, and clear the tests that have timed out. If you want more functionality, you need to create a grid plugin.
The tutorial will explain how you can enhance a WebDriverRemoteProxy to keep track of how many tests have ran already on the node the proxy controls, and will display that number on the grid console.
The grid is composed of 2 pieces:
Creating a plugin means :
To create a new grid plugin, no need to checkout selenium from the source. The plugin is a separate jar, no need to recompile selenium.
Create a new java project from scratch, and put the selenium server jar in the classpath.I use maven in the demo project but it will work just as well without it.
If you're using maven your pom will look like pom.xml
Create a new java class extending WebDriverRemoteProxy. Make the class implement TestSessionListener. This interface give you access to hooks triggered before a test starts and after a test finishes.source
Implement the beforeSession method to increment the total test counter.TestCounterWebDriverProxy.java
The html generated by the HtmlRenderer associated with the proxy will define what is displayed on the grid console. Override the getHtmlRender() method to change it. Create a new renderer that will display the value of the total test counter. TotalTestAwareHtmlRenderer
builder.append("this proxy ran ").append(proxy.getTotalTests()).append(" already.<br>");
Create a jar containing the 2 classes of the new plugin: the proxy and the renderer With Maven:
~/workspace/grid-plugin-tutorial$ mvn isntall
will create a grid-plugin-tutorial-0.0.1-SNAPSHOT.jar
Copy that jar in the folder where you downloaded selenium-server-standalone.jar
you need to add the newly created plugin to the hub classpath before starting it :
~/workspace$ java -cp "grid-plugin-tutorial-0.0.1-SNAPSHOT.jar:selenium-server-standalone-2.5.0.jar"
org.openqa.grid.selenium.GridLauncher -role hub
If this command does not work for you, please try separating the jars of the classpath using a semicolon (;) instead of a colon (:).
When registering the node, you need to let the hub know that the node needs to be represented by the new proxy on the hub instead of the default one.Assuming you start everything locally :
java -jar selenium-server-standalone-2.5.0.jar -role wd -proxy org.openqa.demo.TestCounterWebDriverProxy -hubHost localhost
http://localhost:4444/grid/console will now show the total number of tests the node ran.