Description
Selenium extension for testing applications build with qooxdoo. qooxdoo is an open-source JavaScript framework to build desktop-like Web GUIs.
CAVEAT: The code provided here is only retained for historical reasons. Please don't use or least update it. A much more recent version of the code for this extension can be found via its homepage at http://qooxdoo.org/contrib/project/simulator/[].
Here is also a quick link to its SVN repository location.
- There is a dedicated page about Selenium integration for qooxdoo
- For general information about qooxdoo see http://qooxdoo.org
This extension covers:
- qooxdoo-specific click commands, such as "qxClick" and "qxClickAt"
- qooxdoo-specific element-locators, such as "qx=" and "qxp="
The rest of this web page is just to give you a quick glance on the extension. For full and up-to-date information please visit the project homepage.
Examples of Use
Use of the click commands is straight-forward and in line with the standard click commands of Selenium.
qxClick and qxClickAt:
- Both commands fire "mousedown" followed by "mouseup", as qooxdoo mostly does not listen for "click".
- Additionally these commands provide the possibility to customize mouse-events, to do eg. a right-click or click-with-shift-key-pressed, see below for details.
| qxClick | <any locator> | button=right, shiftKey=true |
The special qooxdoo locators take advantage of the specific structure with that a qooxdoo application is rendered. As qooxdoo HTML consists mainly of div-elements, it is often difficult to locate an distinct element with xpath.
If you have access to the source of the AUT build with qooxdoo you can supply UserData for the elements to interact with and use "qx=" to refer to the UserData. Additional, combined Locator like qxp=myDialog/buttonOK//XPATH-descendant are possible that mix a "qx" specifier with an XPath expression.
In your qooxdoo source provide an "UserData" string, like this:
- customButton = new qx.ui.menu.MenuButton("Click Me", ...);
- customButton.setUserData("customButton", "place here anything you want, e.g. selenium");
Now this qooxdoo button can be located (and clicked) like this:
| qxClick | qx=customButton |
The qooxdoo locator can be used with any selenium command, like
| mouseOver | qx=customButton |
The locator can also be used hierarchically. This is comfortable, if qooxdoo elements are reused in different locations.
License
This user extension is available as part of the Simulator project, which is released under a dual LGPL/EPL license.
Old and Abandoned Versions
These are only retained for historical reasons. Please download the extension from the links provided at the top of the page.
qooxdoo extension v0_3

Comments (3)
Jan 11, 2008
Phaneesh says:
Hi, I have added a few more extensions to the qooxdoo extension to make it much...Hi,
I have added a few more extensions to the qooxdoo extension to make it much more usable. Also I have added a custom attribute to the widget called "identifier" to identify it using the locator.
Here is the more complete extension with qx.js build with identifier attribute.
qooxdoo-extension-extended.zip
Oct 02, 2008
thomas_h says:
The above link provides a singular, branched version of the qooxdoo user extensi...The above link provides a singular, branched version of the qooxdoo user extension. Please consider downloading the officially maintained extension from the links on the top of the wiki page.
Jun 02, 2010
Vojtech Barta says:
Hi, I have a problem using qooxdoo extension from Phaneesh. I need to for examp...Hi,
I have a problem using qooxdoo extension from Phaneesh. I need to for example verify if check box is checked. But for all methods from his extension I have this error:
com.thoughtworks.selenium.SeleniumException: ERROR: Selenium failure. Please report to the Selenium Users forum at http://forums.openqa.org, with error details from the log window. The error message is: selQxObject is not defined
at com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:97)
at com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:91)
at com.tieto.mno.selenium.SeleniumExtension.qxSetChecked(SeleniumExtension.java:47)
at com.tieto.mno.selenium.other.changePassword.TC9_2_1_ChangePassword.testChangePassword(TC9_2_1_ChangePassword.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Do you have any idea where the problem could be?