Child pages
  • Setting Up Selenium for Web Client UI Testing

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This chapter provides information on how to set up Selenium for visual testing the Servoy solutions in Web Client. Selenium IDE will record and playback the user clicks on the UI.

Stoc

Setup Selenium

  • Install the Selenium IDE plugin for Firefox from http://seleniumhq.org/download/
  • Create a folder wicketPathLocatorBuilder in the local drive with the file user-extension.js.wicketPathLocatorBuilder inside. Paste To add the wicketpath locator into the Selenium IDE Locator Builder options paste the following snippet into this file.

    Code Block
    LocatorBuilders.add('wicketpath', function(e) {
      var path = '';
      var current = e;
      while (current != null) {
        if (current.parentNode != null) {
          path = this.relativeXPathFromParent(current) + path;
          if (1 == current.parentNode.nodeType && // ELEMENT_NODE
              current.parentNode.getAttribute("wicketpath")) {
            return this.preciseXPath("//" + this.xpathHtmlElement(current.parentNode.nodeName.toLowerCase()) +
                "[@wicketpath=" + this.attributeValue(current.parentNode.getAttribute('wicketpath')) + "]" +
                path, e);
          }
        } else {
          return null;
        }
        current = current.parentNode;
      }
      return null;
        });
  • Add the following code inside the  user-extension.js.wicketPathLocatorBuilder to include the command waitForWicketAjax as a Selenium IDE extension. The waitForWicketAjax command checks if there is a pending wicket Ajax request from the current Browser window and will wait until the wicket Ajax request is completed.

    Code Block
    /*
     * Some usefull links:
     * http://www.packtpub.com/article/user-extensions-add-ons-selenium-testing-tools
     * http://selenium.polteq.com/en/
     */
    Selenium.prototype.isWicketAjaxReady = function(locator, text) {
    	//TODO extend with checking JQuery.ajax as well. See http://hedleyproctor.com/2012/07/effective-selenium-testing/
    	if (!selenium.browserbot.getCurrentWindow().wicketAjaxBusy) {
    		var doc = selenium.browserbot.getCurrentWindow().document;
    		var scriptTag = doc.createElement("script");
    		scriptTag.type = "text/javascript"
    		var script = 'wicketAjaxBusy = function() {for (var c in Wicket.channelManager.channels) {if (Wicket.channelManager.channels[c].busy) { Wicket.Log.info("Channel " + c + " is busy");return true;}}Wicket.Log.info("No channels are busy");return false;}';
    		try {
    			scriptTag.appendChild(document.createTextNode(script));
    		} catch (e) {
    			scriptTag.text = script;
    		}
    		doc.body.appendChild(scriptTag);
    	}
    	return !selenium.browserbot.getCurrentWindow().wicketAjaxBusy()
    };
  • Open the Selenium IDE, go to menu Options > Options. In the Selenium Core extensions input field, paste the path to the earlier created folder wicketPathLocatorBuilder.
  • Go to Options > Locator Builders and move the wicketpath entry to the top of the list
  • Restart FireFox.

...