Commit 90a35066 authored by Alexander Surkov's avatar Alexander Surkov Committed by Commit Bot

AccTreeFormatterMac: implement accessible objects serialization as

line indexes.

AccTreeFormatter serializes accessible objects as a combination of
role/name/etc. It'd be nicer if the objects were serialized as
line indexes from the expectation file. It makes more readable
and error proneness serialization.

Bug: 1082800
Change-Id: Icf37067c05b967183baa7496bd4e5188a8abc1d0
AX-Relnotes: n/a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2202958
Commit-Queue: Alexander Surkkov <asurkov@igalia.com>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: default avatarNektarios Paisios <nektar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#771329}
parent 5dfa8d5f
...@@ -41,37 +41,6 @@ const char kHeightDictAttr[] = "height"; ...@@ -41,37 +41,6 @@ const char kHeightDictAttr[] = "height";
const char kRangeLocDictAttr[] = "loc"; const char kRangeLocDictAttr[] = "loc";
const char kRangeLenDictAttr[] = "len"; const char kRangeLenDictAttr[] = "len";
base::Value StringForBrowserAccessibility(BrowserAccessibilityCocoa* obj) {
NSMutableArray* tokens = [[NSMutableArray alloc] init];
// Always include the role
id role = [obj role];
[tokens addObject:role];
// If the role is "group", include the role description as well.
id roleDescription = [obj roleDescription];
if ([role isEqualToString:NSAccessibilityGroupRole] &&
roleDescription != nil && ![roleDescription isEqualToString:@""] &&
![roleDescription isEqualToString:@"group"]) {
[tokens addObject:roleDescription];
}
// Include the description, title, or value - the first one not empty.
id title = [obj title];
id description = [obj descriptionForAccessibility];
id value = [obj value];
if (description && ![description isEqual:@""]) {
[tokens addObject:description];
} else if (title && ![title isEqual:@""]) {
[tokens addObject:title];
} else if (value && ![value isEqual:@""]) {
[tokens addObject:value];
}
NSString* result = [tokens componentsJoinedByString:@" "];
return base::Value(SysNSStringToUTF16(result));
}
} // namespace } // namespace
class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase { class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase {
...@@ -93,8 +62,14 @@ class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase { ...@@ -93,8 +62,14 @@ class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase {
const base::StringPiece& pattern) override; const base::StringPiece& pattern) override;
private: private:
using LineIndexesMap = std::map<const gfx::NativeViewAccessible, int>;
void RecursiveBuildAccessibilityTree(const BrowserAccessibilityCocoa* node, void RecursiveBuildAccessibilityTree(const BrowserAccessibilityCocoa* node,
const LineIndexesMap& line_indexes_map,
base::DictionaryValue* dict); base::DictionaryValue* dict);
void RecursiveBuildLineIndexesMap(const BrowserAccessibilityCocoa* node,
LineIndexesMap* line_indexes_map,
int* counter);
base::FilePath::StringType GetExpectedFileSuffix() override; base::FilePath::StringType GetExpectedFileSuffix() override;
const std::string GetAllowEmptyString() override; const std::string GetAllowEmptyString() override;
...@@ -102,12 +77,15 @@ class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase { ...@@ -102,12 +77,15 @@ class AccessibilityTreeFormatterMac : public AccessibilityTreeFormatterBase {
const std::string GetDenyString() override; const std::string GetDenyString() override;
const std::string GetDenyNodeString() override; const std::string GetDenyNodeString() override;
void AddProperties(const BrowserAccessibilityCocoa* node, base::Value* dict); void AddProperties(const BrowserAccessibilityCocoa* node,
const LineIndexesMap& line_indexes_map,
base::Value* dict);
base::Value PopulateSize(const BrowserAccessibilityCocoa*) const; base::Value PopulateSize(const BrowserAccessibilityCocoa*) const;
base::Value PopulatePosition(const BrowserAccessibilityCocoa*) const; base::Value PopulatePosition(const BrowserAccessibilityCocoa*) const;
base::Value PopulateObject(id) const;
base::Value PopulateRange(NSRange) const; base::Value PopulateRange(NSRange) const;
base::Value PopulateArray(NSArray*) const; base::Value PopulateObject(id, const LineIndexesMap& line_indexes_map) const;
base::Value PopulateArray(NSArray*,
const LineIndexesMap& line_indexes_map) const;
base::string16 ProcessTreeForOutput( base::string16 ProcessTreeForOutput(
const base::DictionaryValue& node, const base::DictionaryValue& node,
...@@ -154,9 +132,14 @@ AccessibilityTreeFormatterMac::BuildAccessibilityTree( ...@@ -154,9 +132,14 @@ AccessibilityTreeFormatterMac::BuildAccessibilityTree(
BrowserAccessibility* root) { BrowserAccessibility* root) {
DCHECK(root); DCHECK(root);
std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
BrowserAccessibilityCocoa* cocoa_root = ToBrowserAccessibilityCocoa(root); BrowserAccessibilityCocoa* cocoa_root = ToBrowserAccessibilityCocoa(root);
RecursiveBuildAccessibilityTree(cocoa_root, dict.get());
int counter = 0;
LineIndexesMap line_indexes_map;
RecursiveBuildLineIndexesMap(cocoa_root, &line_indexes_map, &counter);
std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
RecursiveBuildAccessibilityTree(cocoa_root, line_indexes_map, dict.get());
return dict; return dict;
} }
...@@ -183,21 +166,34 @@ AccessibilityTreeFormatterMac::BuildAccessibilityTreeForPattern( ...@@ -183,21 +166,34 @@ AccessibilityTreeFormatterMac::BuildAccessibilityTreeForPattern(
void AccessibilityTreeFormatterMac::RecursiveBuildAccessibilityTree( void AccessibilityTreeFormatterMac::RecursiveBuildAccessibilityTree(
const BrowserAccessibilityCocoa* cocoa_node, const BrowserAccessibilityCocoa* cocoa_node,
const LineIndexesMap& line_indexes_map,
base::DictionaryValue* dict) { base::DictionaryValue* dict) {
AddProperties(cocoa_node, dict); AddProperties(cocoa_node, line_indexes_map, dict);
auto children = std::make_unique<base::ListValue>(); auto children = std::make_unique<base::ListValue>();
for (BrowserAccessibilityCocoa* cocoa_child in [cocoa_node children]) { for (BrowserAccessibilityCocoa* cocoa_child in [cocoa_node children]) {
std::unique_ptr<base::DictionaryValue> child_dict( std::unique_ptr<base::DictionaryValue> child_dict(
new base::DictionaryValue); new base::DictionaryValue);
RecursiveBuildAccessibilityTree(cocoa_child, child_dict.get()); RecursiveBuildAccessibilityTree(cocoa_child, line_indexes_map,
child_dict.get());
children->Append(std::move(child_dict)); children->Append(std::move(child_dict));
} }
dict->Set(kChildrenDictAttr, std::move(children)); dict->Set(kChildrenDictAttr, std::move(children));
} }
void AccessibilityTreeFormatterMac::RecursiveBuildLineIndexesMap(
const BrowserAccessibilityCocoa* cocoa_node,
LineIndexesMap* line_indexes_map,
int* counter) {
line_indexes_map->insert({cocoa_node, ++(*counter)});
for (BrowserAccessibilityCocoa* cocoa_child in [cocoa_node children]) {
RecursiveBuildLineIndexesMap(cocoa_child, line_indexes_map, counter);
}
}
void AccessibilityTreeFormatterMac::AddProperties( void AccessibilityTreeFormatterMac::AddProperties(
const BrowserAccessibilityCocoa* cocoa_node, const BrowserAccessibilityCocoa* cocoa_node,
const LineIndexesMap& line_indexes_map,
base::Value* dict) { base::Value* dict) {
// DOM element id // DOM element id
BrowserAccessibility* node = [cocoa_node owner]; BrowserAccessibility* node = [cocoa_node owner];
...@@ -209,7 +205,7 @@ void AccessibilityTreeFormatterMac::AddProperties( ...@@ -209,7 +205,7 @@ void AccessibilityTreeFormatterMac::AddProperties(
id value = [cocoa_node accessibilityAttributeValue:supportedAttribute]; id value = [cocoa_node accessibilityAttributeValue:supportedAttribute];
if (value != nil) { if (value != nil) {
dict->SetPath(SysNSStringToUTF8(supportedAttribute), dict->SetPath(SysNSStringToUTF8(supportedAttribute),
PopulateObject(value)); PopulateObject(value, line_indexes_map));
} }
} }
} }
...@@ -255,10 +251,12 @@ base::Value AccessibilityTreeFormatterMac::PopulatePosition( ...@@ -255,10 +251,12 @@ base::Value AccessibilityTreeFormatterMac::PopulatePosition(
return position; return position;
} }
base::Value AccessibilityTreeFormatterMac::PopulateObject(id value) const { base::Value AccessibilityTreeFormatterMac::PopulateObject(
id value,
const LineIndexesMap& line_indexes_map) const {
// NSArray // NSArray
if ([value isKindOfClass:[NSArray class]]) { if ([value isKindOfClass:[NSArray class]]) {
return PopulateArray((NSArray*)value); return PopulateArray((NSArray*)value, line_indexes_map);
} }
// NSRange // NSRange
...@@ -269,7 +267,11 @@ base::Value AccessibilityTreeFormatterMac::PopulateObject(id value) const { ...@@ -269,7 +267,11 @@ base::Value AccessibilityTreeFormatterMac::PopulateObject(id value) const {
// Accessible object. // Accessible object.
if ([value isKindOfClass:[BrowserAccessibilityCocoa class]]) { if ([value isKindOfClass:[BrowserAccessibilityCocoa class]]) {
return StringForBrowserAccessibility((BrowserAccessibilityCocoa*)value); int line_index = -1;
if (line_indexes_map.find(value) != line_indexes_map.end()) {
line_index = line_indexes_map.at(value);
}
return base::Value(":" + base::NumberToString(line_index));
} }
// Scalar value. // Scalar value.
...@@ -286,10 +288,11 @@ base::Value AccessibilityTreeFormatterMac::PopulateRange( ...@@ -286,10 +288,11 @@ base::Value AccessibilityTreeFormatterMac::PopulateRange(
} }
base::Value AccessibilityTreeFormatterMac::PopulateArray( base::Value AccessibilityTreeFormatterMac::PopulateArray(
NSArray* node_array) const { NSArray* node_array,
const LineIndexesMap& line_indexes_map) const {
base::Value list(base::Value::Type::LIST); base::Value list(base::Value::Type::LIST);
for (NSUInteger i = 0; i < [node_array count]; i++) for (NSUInteger i = 0; i < [node_array count]; i++)
list.Append(PopulateObject([node_array objectAtIndex:i])); list.Append(PopulateObject([node_array objectAtIndex:i], line_indexes_map));
return list; return list;
} }
......
AXWebArea AXWebArea
++AXTable AXColumnHeaderUIElements=["AXCell Browser","AXCell Rendering Engine"] AXHeader='AXGroup' ++AXTable AXColumnHeaderUIElements=[":4",":6"] AXHeader=':32'
++++AXRow AXIndex='0' ++++AXRow AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Browser' ++++++++AXStaticText AXValue='Browser'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Rendering Engine' ++++++++AXStaticText AXValue='Rendering Engine'
++++AXRow AXIndex='1' ++++AXRow AXIndex='1'
++++++AXCell AXColumnHeaderUIElements=["AXCell Browser"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":4"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Chrome' ++++++++AXStaticText AXValue='Chrome'
++++++AXCell AXColumnHeaderUIElements=["AXCell Rendering Engine"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":6"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Blink' ++++++++AXStaticText AXValue='Blink'
++++AXRow AXIndex='2' ++++AXRow AXIndex='2'
++++++AXCell AXColumnHeaderUIElements=["AXCell Browser"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":2} ++++++AXCell AXColumnHeaderUIElements=[":4"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":2}
++++++++AXStaticText AXValue='Safari' ++++++++AXStaticText AXValue='Safari'
++++++AXCell AXColumnHeaderUIElements=["AXCell Rendering Engine"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":2} ++++++AXCell AXColumnHeaderUIElements=[":6"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":2}
++++++++AXStaticText AXValue='WebKit' ++++++++AXStaticText AXValue='WebKit'
++++AXColumn AXHeader='AXCell Browser' AXIndex='0' ++++AXColumn AXHeader=':4' AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Browser' ++++++++AXStaticText AXValue='Browser'
++++++AXCell AXColumnHeaderUIElements=["AXCell Browser"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":4"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Chrome' ++++++++AXStaticText AXValue='Chrome'
++++++AXCell AXColumnHeaderUIElements=["AXCell Browser"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":2} ++++++AXCell AXColumnHeaderUIElements=[":4"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":2}
++++++++AXStaticText AXValue='Safari' ++++++++AXStaticText AXValue='Safari'
++++AXColumn AXHeader='AXCell Rendering Engine' AXIndex='1' ++++AXColumn AXHeader=':6' AXIndex='1'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Rendering Engine' ++++++++AXStaticText AXValue='Rendering Engine'
++++++AXCell AXColumnHeaderUIElements=["AXCell Rendering Engine"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":6"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Blink' ++++++++AXStaticText AXValue='Blink'
++++++AXCell AXColumnHeaderUIElements=["AXCell Rendering Engine"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":2} ++++++AXCell AXColumnHeaderUIElements=[":6"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":2}
++++++++AXStaticText AXValue='WebKit' ++++++++AXStaticText AXValue='WebKit'
++++AXGroup ++++AXGroup
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
......
AXWebArea AXFocused='1' AXWebArea AXFocused='1'
++AXGroup ++AXGroup
++++AXStaticText AXValue='Choose a fruit, with text content' ++++AXStaticText AXValue='Choose a fruit, with text content'
++AXPopUpButton AXLinkedUIElements=["AXList"] AXTitle='Choose a fruit, with text content' AXValue='Apple' ++AXPopUpButton AXLinkedUIElements=[":6"] AXTitle='Choose a fruit, with text content' AXValue='Apple'
++++AXStaticText AXValue='Apple' ++++AXStaticText AXValue='Apple'
++AXList ++AXList
++++AXStaticText AXValue='Apple' ++++AXStaticText AXValue='Apple'
......
AXWebArea AXWebArea
++AXMenuBar ++AXMenuBar
++++AXMenuItem AXLinkedUIElements=["AXMenu File"] AXTitle='File' ++++AXMenuItem AXLinkedUIElements=[":5"] AXTitle='File'
++++AXMenuItem AXTitle='Edit' ++++AXMenuItem AXTitle='Edit'
++AXMenu AXDescription='File' ++AXMenu AXDescription='File'
++++AXMenuItem AXTitle='New' ++++AXMenuItem AXTitle='New'
......
AXWebArea AXRoleDescription='HTML content' AXWebArea AXRoleDescription='HTML content'
++AXGroup AXLinkedUIElements=["AXGroup footer next"] AXRoleDescription='region' ++AXGroup AXLinkedUIElements=[":4"] AXRoleDescription='region'
++++AXStaticText AXRoleDescription='text' AXValue='Lorem ipsum' ++++AXStaticText AXRoleDescription='text' AXValue='Lorem ipsum'
++AXGroup AXRoleDescription='footer' ++AXGroup AXRoleDescription='footer'
++++AXStaticText AXRoleDescription='text' AXValue='dolor sit amet' ++++AXStaticText AXRoleDescription='text' AXValue='dolor sit amet'
AXWebArea AXWebArea
++AXTextField AXTitleUIElement='AXHeading h2' ++AXTextField AXTitleUIElement=':3'
++AXHeading AXTitle='h2' AXValue='2' ++AXHeading AXTitle='h2' AXValue='2'
++++AXStaticText AXValue='h2' ++++AXStaticText AXValue='h2'
AXWebArea AXWebArea
++AXList AXSubrole=AXContentList AXSelectedChildren=[] AXVisibleChildren=["AXGroup 1","AXGroup 2","AXGroup 3"] ++AXList AXSubrole=AXContentList AXSelectedChildren=[] AXVisibleChildren=[":3",":5",":7"]
++++AXGroup AXDescription='1' ++++AXGroup AXDescription='1'
++++++AXStaticText AXValue='Item 1' ++++++AXStaticText AXValue='Item 1'
++++AXGroup AXDescription='2' ++++AXGroup AXDescription='2'
......
AXWebArea AXSelected='0' AXWebArea AXSelected='0'
++AXList AXOrientation='AXVerticalOrientation' AXSelected='0' AXSelectedChildren=["AXStaticText Item 4 selected","AXStaticText Item 5 selected"] AXVisibleChildren=["AXStaticText Item 1 not selected","AXStaticText Item 2 not selected","AXStaticText Item 3 not selected","AXStaticText Item 4 selected","AXStaticText Item 5 selected"] ++AXList AXOrientation='AXVerticalOrientation' AXSelected='0' AXSelectedChildren=[":6",":7"] AXVisibleChildren=[":3",":4",":5",":6",":7"]
++++AXStaticText AXSelected='0' AXValue='Item 1 not selected' ++++AXStaticText AXSelected='0' AXValue='Item 1 not selected'
++++AXStaticText AXSelected='0' AXValue='Item 2 not selected' ++++AXStaticText AXSelected='0' AXValue='Item 2 not selected'
++++AXStaticText AXSelected='0' AXValue='Item 3 not selected' ++++AXStaticText AXSelected='0' AXValue='Item 3 not selected'
......
AXWebArea AXWebArea
++AXList AXOrientation='AXVerticalOrientation' AXSelectedChildren=["AXStaticText 2"] AXVisibleChildren=["AXStaticText 1","AXStaticText 2","AXStaticText 3"] ++AXList AXOrientation='AXVerticalOrientation' AXSelectedChildren=[":4"] AXVisibleChildren=[":3",":4",":5"]
++++AXStaticText AXValue='1' ++++AXStaticText AXValue='1'
++++AXStaticText AXValue='2' ++++AXStaticText AXValue='2'
++++AXStaticText AXValue='3' ++++AXStaticText AXValue='3'
AXWebArea AXWebArea
++AXList AXSubrole=AXContentList AXSelectedChildren=[] AXVisibleChildren=["AXGroup 1","AXGroup 2"] ++AXList AXSubrole=AXContentList AXSelectedChildren=[] AXVisibleChildren=[":3",":5"]
++++AXGroup AXDescription='1' ++++AXGroup AXDescription='1'
++++++AXStaticText AXValue='Item 1' ++++++AXStaticText AXValue='Item 1'
++++AXGroup AXDescription='2' ++++AXGroup AXDescription='2'
......
AXWebArea AXWebArea
++AXMenuBar ++AXMenuBar
++++AXMenuItem AXLinkedUIElements=["AXMenu File"] AXTitle='File' ++++AXMenuItem AXLinkedUIElements=[":6"] AXTitle='File'
++++AXMenuItem AXTitle='Edit' ++++AXMenuItem AXTitle='Edit'
++++AXMenuItem AXTitle='View' ++++AXMenuItem AXTitle='View'
++AXMenu AXDescription='File' ++AXMenu AXDescription='File'
......
AXWebArea AXRoleDescription='HTML content' AXWebArea AXRoleDescription='HTML content'
++AXRadioGroup AXDescription='My group' AXRoleDescription='radio group' ++AXRadioGroup AXDescription='My group' AXRoleDescription='radio group'
++++AXRadioButton AXLinkedUIElements=["AXRadioButton Radio 1","AXRadioButton Radio 2"] AXRoleDescription='radio' AXTitle='Radio 1' AXValue='0' ++++AXRadioButton AXLinkedUIElements=[":3",":4"] AXRoleDescription='radio' AXTitle='Radio 1' AXValue='0'
++++AXRadioButton AXLinkedUIElements=["AXRadioButton Radio 1","AXRadioButton Radio 2"] AXRoleDescription='radio' AXTitle='Radio 2' AXValue='0' ++++AXRadioButton AXLinkedUIElements=[":3",":4"] AXRoleDescription='radio' AXTitle='Radio 2' AXValue='0'
AXWebArea AXWebArea
++AXTable AXHeader='AXGroup' AXRowHeaderUIElements=["AXCell Browser","AXCell Rendering Engine"] ++AXTable AXHeader=':32' AXRowHeaderUIElements=[":4",":11"]
++++AXRow AXIndex='0' ++++AXRow AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Browser' ++++++++AXStaticText AXValue='Browser'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Browser"] AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":4"] AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Chrome' ++++++++AXStaticText AXValue='Chrome'
++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=["AXCell Browser"] AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=[":4"] AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Safari' ++++++++AXStaticText AXValue='Safari'
++++AXRow AXIndex='1' ++++AXRow AXIndex='1'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Rendering Engine' ++++++++AXStaticText AXValue='Rendering Engine'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Rendering Engine"] AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":11"] AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Blink' ++++++++AXStaticText AXValue='Blink'
++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=["AXCell Rendering Engine"] AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=[":11"] AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='WebKit' ++++++++AXStaticText AXValue='WebKit'
++++AXColumn AXIndex='0' ++++AXColumn AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
...@@ -20,14 +20,14 @@ AXWebArea ...@@ -20,14 +20,14 @@ AXWebArea
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Rendering Engine' ++++++++AXStaticText AXValue='Rendering Engine'
++++AXColumn AXIndex='1' ++++AXColumn AXIndex='1'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Browser"] AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":4"] AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Chrome' ++++++++AXStaticText AXValue='Chrome'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Rendering Engine"] AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":11"] AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Blink' ++++++++AXStaticText AXValue='Blink'
++++AXColumn AXIndex='2' ++++AXColumn AXIndex='2'
++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=["AXCell Browser"] AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=[":4"] AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Safari' ++++++++AXStaticText AXValue='Safari'
++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=["AXCell Rendering Engine"] AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":2} AXRowHeaderUIElements=[":11"] AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='WebKit' ++++++++AXStaticText AXValue='WebKit'
++++AXGroup ++++AXGroup
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
......
AXWebArea AXSelected='0' AXWebArea AXSelected='0'
++AXList AXSelected='0' AXSelectedChildren=["AXStaticText 1"] ++AXList AXSelected='0' AXSelectedChildren=[":3"]
++++AXStaticText AXSelected='1' AXValue='1' ++++AXStaticText AXSelected='1' AXValue='1'
++++AXStaticText AXSelected='0' AXValue='2' ++++AXStaticText AXSelected='0' AXValue='2'
...@@ -2,12 +2,12 @@ AXWebArea ...@@ -2,12 +2,12 @@ AXWebArea
++AXGroup ++AXGroup
++++AXStaticText AXValue='State' ++++AXStaticText AXValue='State'
++AXGroup AXTitle='State' ++AXGroup AXTitle='State'
++++AXTextField AXLinkedUIElements=["AXList"] ++++AXTextField AXLinkedUIElements=[":6"]
++AXList ++AXList
++++AXStaticText AXValue='Alabama' ++++AXStaticText AXValue='Alabama'
++++AXStaticText AXFocused='1' AXValue='Alaska' ++++AXStaticText AXFocused='1' AXValue='Alaska'
++AXGroup AXTitle='State' ++AXGroup AXTitle='State'
++++AXTextField AXLinkedUIElements=["AXList"] ++++AXTextField AXLinkedUIElements=[":11"]
++AXList ++AXList
++++AXStaticText AXValue='Alabama' ++++AXStaticText AXValue='Alabama'
++++AXStaticText AXValue='Alaska' ++++AXStaticText AXValue='Alaska'
...@@ -2,4 +2,4 @@ AXWebArea ...@@ -2,4 +2,4 @@ AXWebArea
++AXGroup ++AXGroup
++++AXStaticText AXValue='Unfocusable div' ++++AXStaticText AXValue='Unfocusable div'
++AXGroup AXDescription='Focusable div' ++AXGroup AXDescription='Focusable div'
++++AXStaticText AXValue='Focusable div' ++++AXStaticText AXValue='Focusable div'
\ No newline at end of file
AXWebArea AXWebArea
++AXLink AXDescription='Empty anchor' AXLinkedUIElements=["AXGroup"] ++AXLink AXDescription='Empty anchor' AXLinkedUIElements=[":20"]
++++AXStaticText AXValue='Empty anchor' ++++AXStaticText AXValue='Empty anchor'
++AXStaticText AXValue=' ' ++AXStaticText AXValue=' '
++AXLink AXDescription='Anchor with content' AXLinkedUIElements=["AXGroup Anchor with content"] ++AXLink AXDescription='Anchor with content' AXLinkedUIElements=[":23"]
++++AXStaticText AXValue='Anchor with content' ++++AXStaticText AXValue='Anchor with content'
++AXStaticText AXValue=' ' ++AXStaticText AXValue=' '
++AXLink AXDescription='Anchor with ID' AXLinkedUIElements=["AXGroup Anchor with ID"] ++AXLink AXDescription='Anchor with ID' AXLinkedUIElements=[":26"]
++++AXStaticText AXValue='Anchor with ID' ++++AXStaticText AXValue='Anchor with ID'
++AXStaticText AXValue=' ' ++AXStaticText AXValue=' '
++AXLink AXDescription='Empty span' AXLinkedUIElements=["AXGroup"] ++AXLink AXDescription='Empty span' AXLinkedUIElements=[":29"]
++++AXStaticText AXValue='Empty span' ++++AXStaticText AXValue='Empty span'
++AXStaticText AXValue=' ' ++AXStaticText AXValue=' '
++AXLink AXDescription='Span with content' AXLinkedUIElements=["AXGroup"] ++AXLink AXDescription='Span with content' AXLinkedUIElements=[":32"]
++++AXStaticText AXValue='Span with content' ++++AXStaticText AXValue='Span with content'
++AXStaticText AXValue=' ' ++AXStaticText AXValue=' '
++AXLink AXDescription='Paragraph with content' AXLinkedUIElements=["AXGroup"] ++AXLink AXDescription='Paragraph with content' AXLinkedUIElements=[":34"]
++++AXStaticText AXValue='Paragraph with content' ++++AXStaticText AXValue='Paragraph with content'
++AXGroup ++AXGroup
++++AXGroup ++++AXGroup
......
...@@ -4,9 +4,9 @@ AXWebArea ...@@ -4,9 +4,9 @@ AXWebArea
++++AXCheckBox AXTitle='label ignored for checkbox' AXValue='0' ++++AXCheckBox AXTitle='label ignored for checkbox' AXValue='0'
++++AXGroup AXTitle='label exposed for radio button ' ++++AXGroup AXTitle='label exposed for radio button '
++++++AXStaticText AXValue='label exposed for radio button ' ++++++AXStaticText AXValue='label exposed for radio button '
++++++AXRadioButton AXTitleUIElement='AXGroup label exposed for radio button ' AXValue='0' ++++++AXRadioButton AXTitleUIElement=':5' AXValue='0'
++++++AXStaticText AXValue=' ' ++++++AXStaticText AXValue=' '
++++AXGroup AXTitle='label exposed for checkbox ' ++++AXGroup AXTitle='label exposed for checkbox '
++++++AXStaticText AXValue='label exposed for checkbox ' ++++++AXStaticText AXValue='label exposed for checkbox '
++++++AXCheckBox AXTitleUIElement='AXGroup label exposed for checkbox ' AXValue='0' ++++++AXCheckBox AXTitleUIElement=':9' AXValue='0'
++++++AXStaticText AXValue=' ' ++++++AXStaticText AXValue=' '
AXWebArea AXWebArea
++AXGroup ++AXGroup
++++AXRadioButton AXLinkedUIElements=["AXRadioButton 0"] AXValue='0' ++++AXRadioButton AXLinkedUIElements=[":3"] AXValue='0'
++++AXStaticText AXValue='Radio1' ++++AXStaticText AXValue='Radio1'
++++AXGroup AXTitle='<newline>' ++++AXGroup AXTitle='<newline>'
++++AXRadioButton AXLinkedUIElements=["AXRadioButton 0"] AXValue='0' ++++AXRadioButton AXLinkedUIElements=[":6"] AXValue='0'
++++AXStaticText AXValue='Radio2' ++++AXStaticText AXValue='Radio2'
++AXGroup ++AXGroup
++++AXRadioButton AXLinkedUIElements=["AXRadioButton Radio3","AXRadioButton Radio4"] AXTitle='Radio3' AXValue='0' ++++AXRadioButton AXLinkedUIElements=[":9",":10"] AXTitle='Radio3' AXValue='0'
++++AXRadioButton AXLinkedUIElements=["AXRadioButton Radio3","AXRadioButton Radio4"] AXTitle='Radio4' AXValue='1' ++++AXRadioButton AXLinkedUIElements=[":9",":10"] AXTitle='Radio4' AXValue='1'
++AXGroup ++AXGroup
++++AXRadioButton AXLinkedUIElements=["AXRadioButton Radio5"] AXTitle='Radio5' AXValue='0' ++++AXRadioButton AXLinkedUIElements=[":12"] AXTitle='Radio5' AXValue='0'
++++AXRadioButton AXLinkedUIElements=["AXRadioButton Radio6"] AXTitle='Radio6' AXValue='1' ++++AXRadioButton AXLinkedUIElements=[":13"] AXTitle='Radio6' AXValue='1'
AXWebArea AXRoleDescription='HTML content' AXWebArea AXRoleDescription='HTML content'
++AXGroup AXRoleDescription='group' ++AXGroup AXRoleDescription='group'
++++AXTextField AXDescription='Name' AXEditableAncestor='AXTextField Name' AXHighestEditableAncestor='AXTextField Name' AXPlaceholderValue='Name' AXRoleDescription='text field' ++++AXTextField AXDescription='Name' AXEditableAncestor=':3' AXHighestEditableAncestor=':3' AXPlaceholderValue='Name' AXRoleDescription='text field'
AXWebArea AXWebArea
++AXTable AXColumnHeaderUIElements=["AXCell Firstname","AXCell Lastname"] AXHeader='AXGroup' ++AXTable AXColumnHeaderUIElements=[":4",":6"] AXHeader=':23'
++++AXRow AXIndex='0' ++++AXRow AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Firstname' ++++++++AXStaticText AXValue='Firstname'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Lastname' ++++++++AXStaticText AXValue='Lastname'
++++AXRow AXIndex='1' ++++AXRow AXIndex='1'
++++++AXCell AXColumnHeaderUIElements=["AXCell Firstname"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":4"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Jill' ++++++++AXStaticText AXValue='Jill'
++++++AXCell AXColumnHeaderUIElements=["AXCell Lastname"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":6"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Smith' ++++++++AXStaticText AXValue='Smith'
++++AXColumn AXHeader='AXCell Firstname' AXIndex='0' ++++AXColumn AXHeader=':4' AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Firstname' ++++++++AXStaticText AXValue='Firstname'
++++++AXCell AXColumnHeaderUIElements=["AXCell Firstname"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":4"] AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Jill' ++++++++AXStaticText AXValue='Jill'
++++AXColumn AXHeader='AXCell Lastname' AXIndex='1' ++++AXColumn AXHeader=':6' AXIndex='1'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Lastname' ++++++++AXStaticText AXValue='Lastname'
++++++AXCell AXColumnHeaderUIElements=["AXCell Lastname"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnHeaderUIElements=[":6"] AXColumnIndexRange={"len":1,"loc":1} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Smith' ++++++++AXStaticText AXValue='Smith'
++++AXGroup ++++AXGroup
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
......
AXWebArea AXTitle='Table example - th rowheader' AXWebArea AXTitle='Table example - th rowheader'
++AXTable AXHeader='AXGroup' AXRowHeaderUIElements=["AXCell Firstname","AXCell Lastname"] ++AXTable AXHeader=':23' AXRowHeaderUIElements=[":4",":9"]
++++AXRow AXIndex='0' ++++AXRow AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Firstname' ++++++++AXStaticText AXValue='Firstname'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Firstname"] AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":4"] AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Jill' ++++++++AXStaticText AXValue='Jill'
++++AXRow AXIndex='1' ++++AXRow AXIndex='1'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Lastname' ++++++++AXStaticText AXValue='Lastname'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Lastname"] AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":9"] AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Smith' ++++++++AXStaticText AXValue='Smith'
++++AXColumn AXIndex='0' ++++AXColumn AXIndex='0'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
...@@ -16,9 +16,9 @@ AXWebArea AXTitle='Table example - th rowheader' ...@@ -16,9 +16,9 @@ AXWebArea AXTitle='Table example - th rowheader'
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Lastname' ++++++++AXStaticText AXValue='Lastname'
++++AXColumn AXIndex='1' ++++AXColumn AXIndex='1'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Firstname"] AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":4"] AXRowIndexRange={"len":1,"loc":0}
++++++++AXStaticText AXValue='Jill' ++++++++AXStaticText AXValue='Jill'
++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=["AXCell Lastname"] AXRowIndexRange={"len":1,"loc":1} ++++++AXCell AXColumnIndexRange={"len":1,"loc":1} AXRowHeaderUIElements=[":9"] AXRowIndexRange={"len":1,"loc":1}
++++++++AXStaticText AXValue='Smith' ++++++++AXStaticText AXValue='Smith'
++++AXGroup ++++AXGroup
++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0} ++++++AXCell AXColumnIndexRange={"len":1,"loc":0} AXRowIndexRange={"len":1,"loc":0}
......
AXWebArea AXRoleDescription='HTML content' AXWebArea AXRoleDescription='HTML content'
++AXGroup AXRoleDescription='group' ++AXGroup AXRoleDescription='group'
++++AXTextArea AXEditableAncestor='AXTextArea The <newline>textarea tag defines a multi-line text input control.<newline>' AXHighestEditableAncestor='AXTextArea The <newline>textarea tag defines a multi-line text input control.<newline>' AXRoleDescription='text entry area' AXValue='The <newline>textarea tag defines a multi-line text input control.<newline>' ++++AXTextArea AXEditableAncestor=':3' AXHighestEditableAncestor=':3' AXRoleDescription='text entry area' AXValue='The <newline>textarea tag defines a multi-line text input control.<newline>'
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment