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

                                                        
                                                        
                                                        
                                                        
                                                        
                                                            
                                                            
                                        
                                        
                                        
                                        