@@ -15,6 +15,7 @@ internal class AriaQueryHandler : QueryHandler
15
15
RegexOptions . Compiled ) ;
16
16
17
17
private static readonly Regex _normalizedRegex = new ( " +" , RegexOptions . Compiled ) ;
18
+ private static readonly string [ ] _nonElementNodeRoles = { "StaticText" , "InlineTextBox" } ;
18
19
19
20
public AriaQueryHandler ( )
20
21
{
@@ -26,8 +27,12 @@ public AriaQueryHandler()
26
27
27
28
internal override async IAsyncEnumerable < IElementHandle > QueryAllAsync ( IElementHandle element , string selector )
28
29
{
29
- var elementHandle = element as ElementHandle ;
30
30
var ariaSelector = ParseAriaSelector ( selector ) ;
31
+ if ( element is not ElementHandle elementHandle )
32
+ {
33
+ yield break ;
34
+ }
35
+
31
36
var results = await QueryAXTreeAsync ( elementHandle . Realm . Environment . Client , element , ariaSelector . Name , ariaSelector . Role ) . ConfigureAwait ( false ) ;
32
37
33
38
foreach ( var item in results )
@@ -53,16 +58,16 @@ private static async Task<IEnumerable<AXTreeNode>> QueryAXTreeAsync(CDPSession c
53
58
Role = role ,
54
59
} ) . ConfigureAwait ( false ) ;
55
60
56
- return nodes . Nodes . Where ( ( node ) => node ? . Role ? . Value ? . ToObject < string > ( ) != "StaticText" ) ;
61
+ return nodes . Nodes . Where ( node =>
62
+ node ? . Role ? . Value ? . ToObject < string > ( ) is not null &&
63
+ ! _nonElementNodeRoles . Contains ( node . Role . Value . ToObject < string > ( ) ) ) ;
57
64
}
58
65
59
66
private static AriaQueryOption ParseAriaSelector ( string selector )
60
67
{
61
- static string NormalizeValue ( string value ) => _normalizedRegex . Replace ( value , " " ) . Trim ( ) ;
62
-
63
68
var knownAriaAttributes = new [ ] { "name" , "role" } ;
64
69
AriaQueryOption queryOptions = new ( ) ;
65
- var defaultName = _ariaSelectorAttributeRegEx . Replace ( selector , new MatchEvaluator ( ( Match match ) =>
70
+ var defaultName = _ariaSelectorAttributeRegEx . Replace ( selector , match =>
66
71
{
67
72
var attribute = match . Groups [ "attribute" ] . Value . Trim ( ) ;
68
73
if ( ! knownAriaAttributes . Contains ( attribute ) )
@@ -80,14 +85,16 @@ private static AriaQueryOption ParseAriaSelector(string selector)
80
85
}
81
86
82
87
return string . Empty ;
83
- } ) ) ;
88
+ } ) ;
84
89
85
90
if ( ! string . IsNullOrEmpty ( defaultName ) && string . IsNullOrEmpty ( queryOptions . Name ) )
86
91
{
87
92
queryOptions . Name = NormalizeValue ( defaultName ) ;
88
93
}
89
94
90
95
return queryOptions ;
96
+
97
+ static string NormalizeValue ( string value ) => _normalizedRegex . Replace ( value , " " ) . Trim ( ) ;
91
98
}
92
99
}
93
100
}
0 commit comments