The solution is to override the built-in UIAutomation locator functionality (used when testing WPF/Silverlight applications) and modify the locator on the fly. The following simple example will change the location of a checkbox in the sample application to be a different position:
function Test() {
//Specify the customized locator behavior
overrideLocators();
SeS('CheckBox').DoClick();
}
g_load_libraries = ["UIAutomation"];
function overrideLocators() {
UIAutomationLocator.fromLocationDef = UIAutomationLocator.fromLocation;
UIAutomationLocator.fromLocation = function (objLocation, objInfo) {
// Do something here if needed
if (objInfo.location == 'tabControl1/tabItem1/checkBoxX') {
objInfo.location = 'tabControl1/tabItem1/checkBox1';
}
// and/or call default locator
return UIAutomationLocator.fromLocationDef(objLocation, objInfo);
}
}