My Blog List

Thursday, November 10, 2011

Add Custom functions to Selenium

We can add custom functions to selenium or extend your selenium jar functions as you want. We can do this in 2 ways.


1. Extending selenium-browserbot.js and selenium-api.js
     a. Extract your selenium-server-standalone-xxx.jar to temp folder.
     b. Find the files selenium-browserbot.js and selenium-api.js inside core\scripts\ folder.
     c. Add your custom function to class BrowserBot like below in selenium-browserbot.js.

  1.  BrowserBot.prototype.yourFunctionName = function() {
  2.                    //code here
  3.         }

     d. Now add your function to class selenium to expose Selenium API like

  1. selenium.prototype.yourFunctionName = function() {
  2.               return this.browserbot.youFunctionName();
  3.          }

     e. Thats all. Re-bundle your JAR file with updated files. Your Selenium-Server JAR file  is ready with your custom functions.


Here is the example code:


  1. BrowserBot.prototype.getAllRadios = function() {
  2.        var elements = this.getDocument().getElementsByTagName('input');
  3.         var result = [];
  4.         for (var i = 0; i < elements.length; i++) {
  5.            if (elements[i].type == 'radio') {
  6.                result.push(elements[i].id);
  7.            }
  8.         }
  9.          return result;
  10.  };

To add in selenium-api.js,
  1. Selenium.prototype.getAllRadios = function() {
  2.       return this.browserbot.getAllButtons();
  3. };
So this is a appraoch to extend your Selenium functions. But this approach have risk of altering/damaging existing selenium functions in the JAR package. Thats why they provided a option called User-Extensions.


2. User-Extension.js
a. Just add your custom functions in user-extensions.js by adding function to class selenium.
b. Important point is, here you have use getDocument() for browserbot to do your operations.
c. Finally just start your selenium server JAR with your user-extenstions.js like
java -jar /selenium-server-1.0.1/selenium-server.jar -userExtensions /user-extensions.js
d. Thats all. Your functions are available now in JVM.
e. To use this, create instance for httpCommandProcessor and use doCommand(yourFunctionName) OR simply selenium.youFunctionName.


Here is the example code:

  1. Selenium.prototype.getAllRadios = function() {
  2.        var elements = this.browserbot.getDocument().getElementsByTagName('input');
  3.        var result = [ ];
  4.        for (var i = 0; i < elements.length; i++) {
  5.            if (elements[i].type == 'radio') {
  6.                result.push(elements[i].id);
  7.            }
  8.       }
  9.        return result;
  10. };

Hope this helps you to create your own functions to extend your selenium-server.jar.

1 comment:

  1. Thanks for sharing great information in your blog. Got to learn new things from your Blog . It was very nice blog to learn about Selenium

    ReplyDelete