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;
}

