Interface ReliableLocators
Generating Reliable AutoTestLocators
Thelocators
generated by AutoTest.getLocator()
will always resolve
uniquely back to the target element in a live application when they are first generated.
However, changes to the structure of the application on subsequent visits, due to small changes
to the application or certain types of dynamically generated UI can make some locator
strategies less reliable than others. Most notably, if a locator is relying on simple
parent-child (or layout-member) hierarchy to identify a component, any change to that
hierarchy will break it, and if a locator is identifying a component by index, this locator can
resolve incorrectly if the other children or members of the parent are modified, even with
fallback locator attributes
. There are a few simple things a developer can do to allow the AutoTest system to generate reliable locators
Explicit IDs
If a component has an explicitly specifiedID
, it will be used to identify the target
component's UI elements, regardless of where it sits within an application widget hierarchy. By
giving key components explicit IDs, you can ensure they will be found by recorded test scripts
even if the application layout changes. Exception: note that if testRoot
is set, the ID will be ignored when
generating locators in favor of identifying their position within the designated test root. You
can explicitly override this by setting Canvas.locateByIDOnly
.
Explicit locator parents
Any component can designate itself as a named locatorChild of some parent viaCanvas.setLocatorParent()
. As long as this relationship has been defined, locators will directly use the specified locator name to identify the child when generating or resolving locators from the parent.
Note that a widget does not need to be a true descendant of another widget to mark it as its locator parent.
Defining properties and search segments
As described in theAutoTestLocator overview
, locators can include search
segments to find descendants by defining property value
. Developers
may choose to set an explicit defining property for some component or custom class to take
advantage of this capability. Locators with search segments will reliably find their targets
within their parent even if the intervening widget hierarchy has changed. The Smart GWT
AutoTest system also provides capabilities for recording automated test scripts for playback on
different environments with significant changes. See PortableAutoTests
for details.