A RanoreXPath expression is primarily used to uniquely identify UI elements within a desktop, web or mobile application. Generally, a RanoreXPath expression consists of:
- and Values
Screencast: A detailed explanation of RanoreXPath expressions, the elements and the way they work can be found in our screencast named "RanoreXPath". You can watch it here: http://youtu.be/UqiCtDlk0hM
The adapter type specifies the type or classification of a UI element to search for (button, form, text field, listbox, etc.).
Looking at the first part of the RanoreXPath expression '/form[@title='Form 1']' the
- '/form' string specifies a search for a UI element of adapter type form.
A Ranorex.Form adapter represents top-level windows such as dialogs or messageboxes on the Windows desktop system.
- The attribute value comparison '[@title='Form 1']' specifies the UI element in detail.
As an example the first part of the RanoreXPath expression shown in the pictures will look for a UI element which is of type form and has an attribute called 'title' with the value 'Form 1'. This form holds a container witch caption 'Container 1', which holds a button with text 'Button 1'.
Use the Ranorex Spy tool to get the RanoreXPath for a particular UI object. To edit a RanoreXPath use the text box in Ranorex Spy or change the path value of a repository item directly in the repository view. A more comfortable way to edit RanoreXPath is provided by the path editor.
Note: Use the <CTRL> key in combination with the arrow keys to navigate to the previous or the next token in RanoreXPath. Use the <CTRL> key and the <SHIFT> key in combination with the arrow keys for selecting specific parts of the RanoreXPath. Use the <SHIFT> key in combination with the <UP> arrow key to select the current token of the RanoreXPath (tokens can be a values, identifiers, operators ...).
RanoreXPath Syntax ExamplesEach RanoreXPath can return multiple GUI elements which match the path query. RanoreXPath is modeled on W3C XPath.
|absolute path identifying all buttons that are children of a form|
|relative path identifying all buttons that are children of the current element|
|absolute path identifying all buttons that are descendants of a form, i.e. all buttons in all levels of a form subtree|
|relative path identifying all buttons that are descendants of the current element (or the element itself), i.e. all buttons in the subtree of the current element (including the element itself)|
|relative path identifying all buttons that are descendants of the parent of the current element|
|optional location step fitting a container adapter between form and button; identifies both, '/form/container/button' and '/form/button'|
|optional location step fitting every adapter between form and button|
|identifies a top level application|
|identifies a top level application with the title 'Calculator'|
|identifies a top level application with the title 'Calculator' and an attribute of instance with value two|
|identifies a top level application with the title 'Calculator' or by its class|
|identifies a button in the application|
|identifies the second button in the application|
|identifies the second-to-last button in the application|
|identifies a button with a text attribute value of '7'|
|identifies a button with a text attribute value that is not '7'|
|identifies a button with a text attribute starting with 'sample'|
|identifies a button with a text attribute ending with 'sample'|
|identifies a button using a regular expression|
|identifies a button not matching a regular expression|
|identifies a WinForms control using cascaded attribute names. The identified control has an "Items" property that has a "Count" property which returns the value 100|
|identifies any element with a text attribute value of '7'|
|optional location step fitting a container adapter between form and button; identifies both, '/form/container[@caption='Container 1']/button' and '/form/button'|
|identifies button with any attribute containing the substring 'add' (case-insensitive)|
|identifies a button where the attribute text is not null|
|identifies a progress bar with value greater than or equal 13.5 (following comparison operators are also available: >, <=, <)|
|identifies a top level application with title attribute value set to value stored in variable $var|
|identifies the button with index equals the value stored in the variable $var|
|identifies an input element on a web document with unique id 'search' (supported for web testing)|
|combines the path to a unique id with an additional attribute (enabled is true)|
|identifies the first cell of a row|
|identifies the last cell of a row|
|identifies the second element in the current result list (containing cells only) (Note: the result of the index()-function is one-based)|
|From the current result list of all element types (everything beneath the row), the element on the second position will be identified if it is from type cell (Note: the pos()-function is zero-based)|
/form[x()>100 and y()>100]
|identifies a top level application with screen coordinates greater than 100|
/form/button[cx()>10 and cy()>10]
|identifies a button with client coordinates (coordinates of an element relative to its parent) greater than 10|
/form[width()>100 and height()>100]
|identifies a top level application with width and height greater than 100|
|If the innertext-attribute is available (web testing), test() brings back the value of the innertext attribute|
|identifies a form with the id-attribute not being set (=null)|
Result Set Selector
Every step in a RanoreXPath expression produces a list containing zero or more elements. These elements can be in various relationships to each other, for example siblings, parent-child or any other relationship imaginable.
The expression above selects all enabled buttons on all available levels below a Form element.
For picking one element from the entire result set, a Result Set Selector can be specified by using an additional set of brackets.
From the complete list of enabled buttons (on various levels), the Result Set Selector selects the second element. Note that the Result Set Selector is only applied after the step where it was specified has been completely evaluated. The result will be fundamentally different from the result list of the following statement:
form//button[@enabled='True' and index()=2]
(This would select all enabled buttons with index equal to 2)
Advanced RanoreXPath Example
The following example describes how to use RanoreXPath to identify a GUI element not having unique attributes. The example shows how to access a HTML checkbox using a relative RanoreXPath expression.
Each row in the table represents a user. The users attributes are mapped into separate cells.
- Identify a user from a list by name (highlighted green)
- Select the corresponding checkbox with a relative path from the name (highlighted red)
- Get the full path to the checkbox by combining the two paths.
RanoreXPath with Regular Expressions
|matches the following button elements: 'sample0', 'sample1', ... 'sample9', 'My sample26'|
|matches all elements starting with text value sample|
|matches all elements ending with text value sample|
|matches text value gray or grey|
|matches 'sample 123' (use backslash to escape special characters like space)|
|matches the regular expression case-insensitive, e.g. 'mytext', 'MYTEXT', 'mYTeXT', ...|
The following are special characters that need to be escaped when used in a regular expression by prefixing them with a backslash '\'. E.g. when you want to match the text 'Sample.' (with a dot at the end), the dot needs to be escaped: 'Sample\.'.
|The dot will match any single character. For example 'Sample.' matches 'Sample1', 'Samplex', etc.|
|The dollar sign will match the end of the string. The expression 'abc$' will match the sub-string 'abc' only if it is at the end of the string.|
|The alternation character allows either expression on its side to match the target string. The expression 'gr(a|e)y' can match 'gray' or 'grey'.|
|The asterisk indicates that the character to the left of the asterisk in the expression should match zero or more times. For example 'go*gle' matches ggle, gogle, google, gooogle, etc.|
|The plus is similar to asterisk but there must be at least one match of the character to the left of the + sign in the expression. For example 'go+gle' matches gogle, google, gooogle, etc.|
|The question mark (?) matches the character to its left 0 or 1 times. For example, 'colou?r' matches both color and colour.|
|Beginning of the string. The expression '^A' will match an A only at the beginning of the string.|
|The parenthesis affects the order of pattern evaluation.|
|Brackets enclosing a set of characters indicate that any of the enclosed characters may match the target character.|
|The caret immediately following the left-bracket has a different meaning. It is used to exclude the remaining characters within brackets from matching the target string. The expression '[^0-9]' indicates that the target character must not be a digit.|
For additional information on regular expressions please consult the corresponding MSDN web site: http://msdn.microsoft.com/en-us/library/az24scfc.aspx
- Ranorex Studio - The Layout
- Lesson 1: Getting Started
- Lesson 2: Ranorex Modules - Test Actions
- Lesson 3: Data-Driven Testing
- Lesson 4: Ranorex Test Suite
- Lesson 5: Ranorex Recorder
- Lesson 6: UI Mapping with Ranorex Repository
- Lesson 7: Code Modules
- Lesson 8: Reporting
- Lesson 9: Ranorex Spy
- Ranorex Settings
- Ranorex Remote
- User Code Library
- Selenium WebDriver integration
- Code Examples
- Data Connectors
- Instrumentation Wizard
- Technology Instrumentation
- RanoreXPath Weight Rule Library
- Ranorex UI Adapter
- Mobile Testing
- Android Testing
- iOS Testing
- Web Testing
- Source Control
- Ranorex Studio IDE
- Visual Studio Integration
- System Requirements
- 64-bit Platforms
- Remotely Working with Ranorex
- Silent Installation of Ranorex
- XCOPY Deployment
- How to instructions