forked from google/webdriver.dart
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathelement.dart
164 lines (133 loc) · 4.98 KB
/
element.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import 'dart:math';
import '../../common/request.dart';
import '../../common/webdriver_handler.dart';
import 'utils.dart';
class JsonWireElementHandler extends ElementHandler {
@override
WebDriverRequest buildClickRequest(String elementId) =>
WebDriverRequest.postRequest('${elementPrefix(elementId)}click');
@override
void parseClickResponse(WebDriverResponse response) {
parseJsonWireResponse(response);
}
@override
WebDriverRequest buildSendKeysRequest(String elementId, String keysToSend) =>
WebDriverRequest.postRequest('${elementPrefix(elementId)}value', {
'value': [keysToSend]
});
@override
void parseSendKeysResponse(WebDriverResponse response) {
parseJsonWireResponse(response);
}
@override
WebDriverRequest buildClearRequest(String elementId) =>
WebDriverRequest.postRequest('${elementPrefix(elementId)}clear');
@override
void parseClearResponse(WebDriverResponse response) {
parseJsonWireResponse(response);
}
@override
WebDriverRequest buildSelectedRequest(String elementId) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}selected');
@override
bool parseSelectedResponse(WebDriverResponse response) =>
parseJsonWireResponse(response) as bool;
@override
WebDriverRequest buildEnabledRequest(String elementId) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}enabled');
@override
bool parseEnabledResponse(WebDriverResponse response) =>
parseJsonWireResponse(response) as bool;
@override
WebDriverRequest buildDisplayedRequest(String elementId) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}displayed');
@override
bool parseDisplayedResponse(WebDriverResponse response) =>
parseJsonWireResponse(response) as bool;
@override
WebDriverRequest buildLocationRequest(String elementId) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}location');
@override
Point<int> parseLocationResponse(WebDriverResponse response) {
final point = parseJsonWireResponse(response) as Map;
return Point((point['x'] as num).toInt(), (point['y'] as num).toInt());
}
@override
WebDriverRequest buildSizeRequest(String elementId) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}size');
@override
Rectangle<int> parseSizeResponse(WebDriverResponse response) {
final size = parseJsonWireResponse(response) as Map;
return Rectangle<int>(
0,
0,
(size['width'] as num).toInt(),
(size['height'] as num).toInt(),
);
}
@override
WebDriverRequest buildNameRequest(String elementId) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}name');
@override
String parseNameResponse(WebDriverResponse response) =>
parseJsonWireResponse(response) as String;
@override
WebDriverRequest buildTextRequest(String elementId) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}text');
@override
String parseTextResponse(WebDriverResponse response) =>
parseJsonWireResponse(response) as String;
@override
WebDriverRequest buildAttributeRequest(String elementId, String name) =>
WebDriverRequest.postRequest('execute', {
'script': '''
var attr = arguments[0].attributes["$name"];
if(attr) {
return attr.value;
}
return null;
''',
'args': [
{jsonWireElementStr: elementId}
]
});
@override
String? parseAttributeResponse(WebDriverResponse response) =>
parseJsonWireResponse(response)?.toString();
@override
@Deprecated('Only used to support the old page loader.')
WebDriverRequest buildSeleniumAttributeRequest(
String elementId, String name) =>
WebDriverRequest.getRequest('${elementPrefix(elementId)}attribute/$name');
@override
@Deprecated('Only used to support the old page loader.')
String? parseSeleniumAttributeResponse(WebDriverResponse response) =>
parseJsonWireResponse(response)?.toString();
@override
WebDriverRequest buildCssPropertyRequest(String elementId, String name) {
final cssProperty = _cssPropName(name);
return WebDriverRequest.postRequest('execute', {
'script': 'return window.getComputedStyle(arguments[0]).$cssProperty;',
'args': [
{jsonWireElementStr: elementId}
]
});
}
@override
String? parseCssPropertyResponse(WebDriverResponse response) =>
parseJsonWireResponse(response)?.toString();
@override
WebDriverRequest buildPropertyRequest(String elementId, String name) =>
WebDriverRequest.postRequest('execute', {
'script': 'return arguments[0]["$name"];',
'args': [
{jsonWireElementStr: elementId}
]
});
@override
String? parsePropertyResponse(WebDriverResponse response) =>
parseJsonWireResponse(response)?.toString();
/// Convert hyphenated-properties to camelCase.
static String _cssPropName(String name) => name.splitMapJoin(RegExp(r'-(\w)'),
onMatch: (m) => m.group(1)!.toUpperCase(), onNonMatch: (m) => m);
}