@@ -31,22 +31,35 @@ def name_contains_js
31
31
# execute_script 'au.mainApp.getNameContains("sign")'
32
32
# execute_script 'au.mainApp.getNameContains("zzz")'
33
33
# must check .isVisible or a hidden element may be returned.
34
- # .tap() will error on invisible elements.
34
+ # .tap() may error on invisible elements.
35
+ # if there are no visible elements though, then it's useful
36
+ # to .tap() on an invisible element.
35
37
<<-JS
36
38
UIAElement.prototype.getNameContains = function(targetName) {
37
39
var target = UIATarget.localTarget();
38
40
target.pushTimeout(0);
39
- var search = "(name contains[c] '" + targetName + "' || label contains[c] '" + targetName + "') && visible == 1";
41
+ var search = "name contains[c] '" + targetName + "' || label contains[c] '" + targetName + "'";
42
+ var result = {};
43
+ result.type = function() { return 'UIAElementNil'; };
44
+ result.isVisible = function() { return -1; };
45
+
40
46
var searchElements = function(element) {
41
47
var children = element.elements();
42
- var result = children.firstWithPredicate(search);
43
- if (result.type() !== 'UIAElementNil' && result.isVisible() === 1) {
44
- return result;
48
+ var results = children.withPredicate(search);
49
+
50
+ for (var resIdx = 0, resLen = results.length; resIdx < resLen; resIdx++) {
51
+ var tmp = results[resIdx];
52
+ if (tmp.type() !== 'UIAElementNil') {
53
+ result = tmp;
54
+ if (tmp.isVisible() === 1) {
55
+ return tmp;
56
+ }
57
+ }
45
58
}
46
59
47
60
for ( var a = 0, len = children.length; a < len; a++) {
48
- result = searchElements(children[a]);
49
- if (result.type() !== 'UIAElementNil') {
61
+ searchElements(children[a]);
62
+ if (result.type() !== 'UIAElementNil' && result.isVisible() === 1 ) {
50
63
return result;
51
64
}
52
65
}
0 commit comments