113 lines
3.8 KiB
JavaScript
113 lines
3.8 KiB
JavaScript
// Dumps the accessibility tree hierarchy for the given accessibilityObject into
|
|
// an element with id="tree", e.g., <pre id="tree"></pre>. In addition, it
|
|
// returns a two element array with the first element [0] being false if the
|
|
// traversal of the tree was stopped at the stopElement, and second element [1],
|
|
// the string representing the accessibility tree.
|
|
function dumpAccessibilityTree(accessibilityObject, stopElement, indent, allAttributesIfNeeded, getValueFromTitle, includeSubrole) {
|
|
var str = "";
|
|
var i = 0;
|
|
|
|
for (i = 0; i < indent; i++)
|
|
str += " ";
|
|
str += accessibilityObject.role;
|
|
if (includeSubrole === true && accessibilityObject.subrole)
|
|
str += " " + accessibilityObject.subrole;
|
|
str += " " + (getValueFromTitle === true ? accessibilityObject.title : accessibilityObject.stringValue);
|
|
str += allAttributesIfNeeded && accessibilityObject.role == '' ? accessibilityObject.allAttributes() : '';
|
|
str += "\n";
|
|
|
|
var outputTree = document.getElementById("tree");
|
|
if (outputTree)
|
|
outputTree.innerText += str;
|
|
|
|
if (stopElement && stopElement.isEqual(accessibilityObject))
|
|
return [false, str];
|
|
|
|
var count = accessibilityObject.childrenCount;
|
|
for (i = 0; i < count; ++i) {
|
|
childRet = dumpAccessibilityTree(accessibilityObject.childAtIndex(i), stopElement, indent + 1, allAttributesIfNeeded, getValueFromTitle, includeSubrole);
|
|
if (!childRet[0])
|
|
return [false, str];
|
|
str += childRet[1];
|
|
}
|
|
|
|
return [true, str];
|
|
}
|
|
|
|
function touchAccessibilityTree(accessibilityObject) {
|
|
var count = accessibilityObject.childrenCount;
|
|
for (var i = 0; i < count; ++i) {
|
|
if (!touchAccessibilityTree(accessibilityObject.childAtIndex(i)))
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function platformValueForW3CName(accessibilityObject, includeSource=false) {
|
|
var result;
|
|
if (accessibilityController.platformName == "atk")
|
|
result = accessibilityObject.title
|
|
else
|
|
result = accessibilityObject.description
|
|
|
|
if (!includeSource) {
|
|
var splitResult = result.split(": ");
|
|
return splitResult[1];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function platformValueForW3CDescription(accessibilityObject, includeSource=false) {
|
|
var result;
|
|
if (accessibilityController.platformName == "atk")
|
|
result = accessibilityObject.description
|
|
else
|
|
result = accessibilityObject.helpText;
|
|
|
|
if (!includeSource) {
|
|
var splitResult = result.split(": ");
|
|
return splitResult[1];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function platformTextAlternatives(accessibilityObject, includeTitleUIElement=false) {
|
|
if (!accessibilityObject)
|
|
return "Element not exposed";
|
|
|
|
result = "\t" + accessibilityObject.title + "\n\t" + accessibilityObject.description;
|
|
if (accessibilityController.platformName == "mac")
|
|
result += "\n\t" + accessibilityObject.helpText;
|
|
if (includeTitleUIElement)
|
|
result += "\n\tAXTitleUIElement: " + (accessibilityObject.titleUIElement() ? "non-null" : "null");
|
|
return result;
|
|
}
|
|
|
|
function platformRoleForComboBox() {
|
|
return accessibilityController.platformName == "atk" ? "AXRole: AXComboBox" : "AXRole: AXPopUpButton";
|
|
}
|
|
|
|
function platformRoleForStaticText() {
|
|
return accessibilityController.platformName == "atk" ? "AXRole: AXStatic" : "AXRole: AXStaticText";
|
|
}
|
|
|
|
function spinnerForTextInput(accessibilityObject) {
|
|
var index = accessibilityController.platformName == "atk" ? 0 : 1;
|
|
return accessibilityObject.childAtIndex(index);
|
|
}
|
|
|
|
function waitFor(condition)
|
|
{
|
|
return new Promise((resolve, reject) => {
|
|
let interval = setInterval(() => {
|
|
if (condition()) {
|
|
clearInterval(interval);
|
|
resolve();
|
|
}
|
|
}, 0);
|
|
});
|
|
}
|