Example: Using Sibling Controls to Identify an Object
In Chrome, if a custom control is comprised of two or more sibling controls, you must include both of them in the identification of the object.
This example demonstrates this for a custom control comprised of an input and a label:
<input type="checkbox" role="hidden-checkbox-input" class="ui-helper-hidden"/><label for="check" class="ui-toggle-button" role="button">Toggle</label>
In another browser, you could identify your control by specifying only the input tag:
SampleToolkit.xml: <Control TestObjectClass="SampleToggleButton"> ... <Identification type="javascript" function="isSampleToggleButton"> <Browser name="*"> <HTMLTags> <Tag name="input" /> </HTMLTags> </Browser> </Identification> ... </Control>
SampleToggleButton.js: function isSampleToggleButton () { return _elem.getAttribute("role") === "hidden-checkbox-input"; }
In Chrome, you should identify the control with both the input and label tag.
To do this, you add one more tag to the SampleToolkit.xml:
<Control TestObjectClass="SampleToggleButton "> ... <Identification type="javascript" function=" isSampleToggleButton "> <Browser name="*"> <HTMLTags> <Tag name="input" /> <Tag name="label" /> </HTMLTags> </Browser> </Identification> ... </Control>
Then update the SampleToggleButton.js function accordingly:
function isSampleToggleButton () { if (_elem.getAttribute("role") === "hidden-checkbox-input" && _elem.tagName.toUpperCase() === "INPUT") return true; if (_elem.tagName.toUpperCase() === "LABEL" && _elem.getAttribute("role") == "button") { var sibling = _elem.previousSibling; if (sibling && sibling.tagName.toUpperCase() === "INPUT" && sibling.getAttribute("role") === "hidden-checkbox-input") { return sibling; // use the sibling input element to replace label to serve as _elem. } } return false; }