Java Driver
Java Driver
This page describes only Java Driver specific features and methods which may be different in other drivers.
Implementation which is common for all drivers is described in Drivers page. Please, read it before.
Java driver automates applications with java UI, that is built from of java.awt.*
package. This for example includes Swing, Oracle Forms, JavaFx.
Java Driver consists of EasyRPA driver implementation and java agent
Java agent is a jar package implementing JsonWire protocol. It attaches to target java application and starts http server.
At the moment there are 2 java agents available in the EasyRPA:
- easy-rpa-java-agent to automate Swing / Oracle Forms desktop applications
- easy-rpa-javafx-agent to automate JavaFX desktop applications
Java Driver implementation is a part of engine. It makes use of JsonWire protocol while providing a familiar selenium-like programming interface to developer.
getTitle
calls getTitle()
on focused java.awt.Frame
or java.awt.Dialog
String title = driver.getTitle();
getWindowHandle
returns identity hashcode of java.awt.Window
(java top UI container) encoded as hex string
// returns "7abde323" String handle = driver.getWindowHandle();
getWindowHandles
returns all window handles registered in sun.awt.AppContext
Set<String> handles = driver.getWindowHandle();
calls dispose()
on current java.awt.Window
drive.close();
switch to window
Java driver can only switch windows inside a single Java application. To take over another application the one must instantiate one more driver
Java Driver supports switching to window by title or handle
- switches to window (java top UI container) by its title
driver.switchTo().window("Login Success");
- successively switches to each window by its handle
Set<String> windowHandles = getDriver().getWindowHandles(); for (String handle : windowHandles ) { driver.switchTo().window(handle); }
Working with UI Elements
Inspector
To inspect Java applications we suggest using Java inspector tool which is described in How to use Java Inspector for Swing Desktop Applications.
Find elements
The element locators supported by Java Driver:
Selector type |
---|
JavaSearch.id |
JavaSearch.name |
JavaSearch.cssSelector |
JavaSearch.className |
JavaSearch.tagName |
JavaSearch.id
and JavaSearch.name
search for value from java.awt.Component.getName
// these are the same driver.findElement(JavaSearch.id("username")); driver.findElement(JavaSearch.name("username"));
JavaSearch.className
searches by fully qualified java class name including all subclasses
// returns the elements of class javax.swing.JPasswordField driver.findElements(JavaSearch.className("javax.swing.JPasswordField")); // returns the elements of class javax.swing.JTextField including JPasswordField // because JPasswordField extends JTextField driver.findElements(JavaSearch.className("javax.swing.JTextField"));
EasyRPA implements CSS finder for Java applications. You can use JavaDriver's findElement(s) call to quickly find a component in the application
Selector | Description | Example |
---|---|---|
tagname | Selects an element with the given tagname. A tagname is computed by finding the Swing/AWT superclass of the component and converting CamelCase to camel-case | driver.findElement(JavaSearch.tagName("text-field")); // JTextField driver.findElement(JavaSearch.tagName("spinner")); // JSpinner |
* | Gets all the elements, retuns list of elements | driver.findElements(JavaSearch.cssSelector("*")); |
. | Returns the same element | // tree and tree_1 are same tree = driver.findElements(JavaSearch.cssSelector("tree")); tree_1 = tree.findElement(JavaSearch.cssSelector(".")); |
#name | Select a component with the given name | // the element has name "loanAmount" set through java.awt.Component#setName driver.findElement(JavaSearch.cssSelector("#loanAmount")); |
[attribute=value] | Find components with the given value for the attribute. The operation can be *= (contains), /= (regex match), = (equals), ^= (startswith), $= (endswith). | // finds all the buttons whose text is equal to "Click Me" driver.findElement(JavaSearch.cssSelector("button[text='Click Me']")); // finds all the buttons whose text starts with "Click" driver.findElement(JavaSearch.cssSelector("button[text^='Click']")); |
: | Find components for which returns true. Pseudoclasses avaiable are selected , enabled , displayed , hidden and instance-of("") | // finds all the text-fields which are enabled driver.findElement(JavaSearch.cssSelector("text-field:enabled")); |
:: | find the pseudo elements
| JComboBox // Returns 2nd option from the combo-box driver.findElement(JavaSearch.cssSelector("combo-box::nth-option(2)")); // OR combobox = driver.findElement(JavaSearch.tagName("combo-box")); combobox.findElement(JavaSearch.cssSelector(".::nth-option(2)")); // Returns list of all options from JComboBox driver.findElement(JavaSearch.cssSelector("combo-box::all-options")); JList // Returns 4th item from the list driver.findElement(JavaSearch.cssSelector("list::nth-item(4)")); // OR list = driver.findElement(JavaSearch.tagName("list")); list.findElement(JavaSearch.cssSelector(".::nth-item(4)")); // Returns list of all the options from the list element driver.findElement(JavaSearch.cssSelector("list::all-items")); JEditorPane editor = driver.findElement(JavaSearch.cssSelector("editor-pane")); editor.findElement(JavaSearch.cssSelector(".::tag('a')[text='Title Page']")); JTabbedPane // Returns selected tab tabbedPane = driver.findElement(JavaSearch.cssSelector("tabbed-pane")); tabbedPane.findElement(JavaSearch.cssSelector(".::selected-tab")); JTableHeader tableHeader = driver.findElement(JavaSearch.tagName("table-header")); tableHeader.findElement(JavaSearch.tagName(".::nth-item(3)")); JTable table = driver.findElement(JavaSearch.cssSelector("table")); // To get particular cell table.findElement(JavaSearch.cssSelector(".::mnth-cell(2, 3)")); // To get all the cells table.findElement(JavaSearch.cssSelector(".::all-cells")); // To get the cell editor table.findElement(JavaSearch.cssSelector(".::mnth-cell-editor(2, 3)")); JTree tree = driver.findElement(JavaSearch.cssSelector("tree")); // To get particular node tree.findElement(JavaSearch.cssSelector(".::nth-node(2)")); // To get all the nodes tree.findElement(JavaSearch.cssSelector(".::all-nodes")); // To get the root tree.findElement(JavaSearch.cssSelector(".::root")); // To get the editor tree.findElement(JavaSearch.cssSelector(".::editor")); |