1use http::Method;
6use serde_json::Value;
7
8use crate::command::{VoidWebDriverExtensionCommand, WebDriverCommand, WebDriverExtensionCommand};
9use crate::error::WebDriverResult;
10use crate::Parameters;
11
12pub fn standard_routes<U: WebDriverExtensionRoute>() -> Vec<(Method, &'static str, Route<U>)> {
13 vec![
14 (Method::POST, "/session", Route::NewSession),
15 (Method::DELETE, "/session/{sessionId}", Route::DeleteSession),
16 (Method::POST, "/session/{sessionId}/url", Route::Get),
17 (
18 Method::GET,
19 "/session/{sessionId}/url",
20 Route::GetCurrentUrl,
21 ),
22 (Method::POST, "/session/{sessionId}/back", Route::GoBack),
23 (
24 Method::POST,
25 "/session/{sessionId}/forward",
26 Route::GoForward,
27 ),
28 (Method::POST, "/session/{sessionId}/refresh", Route::Refresh),
29 (Method::GET, "/session/{sessionId}/title", Route::GetTitle),
30 (
31 Method::GET,
32 "/session/{sessionId}/source",
33 Route::GetPageSource,
34 ),
35 (
36 Method::GET,
37 "/session/{sessionId}/window",
38 Route::GetWindowHandle,
39 ),
40 (
41 Method::GET,
42 "/session/{sessionId}/window/handles",
43 Route::GetWindowHandles,
44 ),
45 (
46 Method::POST,
47 "/session/{sessionId}/window/new",
48 Route::NewWindow,
49 ),
50 (
51 Method::DELETE,
52 "/session/{sessionId}/window",
53 Route::CloseWindow,
54 ),
55 (
56 Method::GET,
57 "/session/{sessionId}/window/size",
58 Route::GetWindowSize,
59 ),
60 (
61 Method::POST,
62 "/session/{sessionId}/window/size",
63 Route::SetWindowSize,
64 ),
65 (
66 Method::GET,
67 "/session/{sessionId}/window/position",
68 Route::GetWindowPosition,
69 ),
70 (
71 Method::POST,
72 "/session/{sessionId}/window/position",
73 Route::SetWindowPosition,
74 ),
75 (
76 Method::GET,
77 "/session/{sessionId}/window/rect",
78 Route::GetWindowRect,
79 ),
80 (
81 Method::POST,
82 "/session/{sessionId}/window/rect",
83 Route::SetWindowRect,
84 ),
85 (
86 Method::POST,
87 "/session/{sessionId}/window/minimize",
88 Route::MinimizeWindow,
89 ),
90 (
91 Method::POST,
92 "/session/{sessionId}/window/maximize",
93 Route::MaximizeWindow,
94 ),
95 (
96 Method::POST,
97 "/session/{sessionId}/window/fullscreen",
98 Route::FullscreenWindow,
99 ),
100 (
101 Method::POST,
102 "/session/{sessionId}/window",
103 Route::SwitchToWindow,
104 ),
105 (
106 Method::POST,
107 "/session/{sessionId}/frame",
108 Route::SwitchToFrame,
109 ),
110 (
111 Method::POST,
112 "/session/{sessionId}/frame/parent",
113 Route::SwitchToParentFrame,
114 ),
115 (
116 Method::POST,
117 "/session/{sessionId}/element",
118 Route::FindElement,
119 ),
120 (
121 Method::POST,
122 "/session/{sessionId}/element/{elementId}/element",
123 Route::FindElementElement,
124 ),
125 (
126 Method::POST,
127 "/session/{sessionId}/elements",
128 Route::FindElements,
129 ),
130 (
131 Method::POST,
132 "/session/{sessionId}/element/{elementId}/elements",
133 Route::FindElementElements,
134 ),
135 (
136 Method::POST,
137 "/session/{sessionId}/shadow/{shadowId}/element",
138 Route::FindShadowRootElement,
139 ),
140 (
141 Method::POST,
142 "/session/{sessionId}/shadow/{shadowId}/elements",
143 Route::FindShadowRootElements,
144 ),
145 (
146 Method::GET,
147 "/session/{sessionId}/element/active",
148 Route::GetActiveElement,
149 ),
150 (
151 Method::GET,
152 "/session/{sessionId}/element/{elementId}/shadow",
153 Route::GetShadowRoot,
154 ),
155 (
156 Method::GET,
157 "/session/{sessionId}/element/{elementId}/displayed",
158 Route::IsDisplayed,
159 ),
160 (
161 Method::GET,
162 "/session/{sessionId}/element/{elementId}/selected",
163 Route::IsSelected,
164 ),
165 (
166 Method::GET,
167 "/session/{sessionId}/element/{elementId}/attribute/{name}",
168 Route::GetElementAttribute,
169 ),
170 (
171 Method::GET,
172 "/session/{sessionId}/element/{elementId}/property/{name}",
173 Route::GetElementProperty,
174 ),
175 (
176 Method::GET,
177 "/session/{sessionId}/element/{elementId}/css/{propertyName}",
178 Route::GetCSSValue,
179 ),
180 (
181 Method::GET,
182 "/session/{sessionId}/element/{elementId}/text",
183 Route::GetElementText,
184 ),
185 (
186 Method::GET,
187 "/session/{sessionId}/element/{elementId}/computedlabel",
188 Route::GetComputedLabel,
189 ),
190 (
191 Method::GET,
192 "/session/{sessionId}/element/{elementId}/computedrole",
193 Route::GetComputedRole,
194 ),
195 (
196 Method::GET,
197 "/session/{sessionId}/element/{elementId}/name",
198 Route::GetElementTagName,
199 ),
200 (
201 Method::GET,
202 "/session/{sessionId}/element/{elementId}/rect",
203 Route::GetElementRect,
204 ),
205 (
206 Method::GET,
207 "/session/{sessionId}/element/{elementId}/enabled",
208 Route::IsEnabled,
209 ),
210 (
211 Method::POST,
212 "/session/{sessionId}/execute/sync",
213 Route::ExecuteScript,
214 ),
215 (
216 Method::POST,
217 "/session/{sessionId}/execute/async",
218 Route::ExecuteAsyncScript,
219 ),
220 (
221 Method::GET,
222 "/session/{sessionId}/cookie",
223 Route::GetCookies,
224 ),
225 (
226 Method::GET,
227 "/session/{sessionId}/cookie/{name}",
228 Route::GetNamedCookie,
229 ),
230 (
231 Method::POST,
232 "/session/{sessionId}/cookie",
233 Route::AddCookie,
234 ),
235 (
236 Method::DELETE,
237 "/session/{sessionId}/cookie",
238 Route::DeleteCookies,
239 ),
240 (
241 Method::DELETE,
242 "/session/{sessionId}/cookie/{name}",
243 Route::DeleteCookie,
244 ),
245 (
246 Method::GET,
247 "/session/{sessionId}/timeouts",
248 Route::GetTimeouts,
249 ),
250 (
251 Method::POST,
252 "/session/{sessionId}/timeouts",
253 Route::SetTimeouts,
254 ),
255 (
256 Method::POST,
257 "/session/{sessionId}/element/{elementId}/click",
258 Route::ElementClick,
259 ),
260 (
261 Method::POST,
262 "/session/{sessionId}/element/{elementId}/clear",
263 Route::ElementClear,
264 ),
265 (
266 Method::POST,
267 "/session/{sessionId}/element/{elementId}/value",
268 Route::ElementSendKeys,
269 ),
270 (
271 Method::POST,
272 "/session/{sessionId}/alert/dismiss",
273 Route::DismissAlert,
274 ),
275 (
276 Method::POST,
277 "/session/{sessionId}/alert/accept",
278 Route::AcceptAlert,
279 ),
280 (
281 Method::GET,
282 "/session/{sessionId}/alert/text",
283 Route::GetAlertText,
284 ),
285 (
286 Method::POST,
287 "/session/{sessionId}/alert/text",
288 Route::SendAlertText,
289 ),
290 (
291 Method::GET,
292 "/session/{sessionId}/screenshot",
293 Route::TakeScreenshot,
294 ),
295 (
296 Method::GET,
297 "/session/{sessionId}/element/{elementId}/screenshot",
298 Route::TakeElementScreenshot,
299 ),
300 (
301 Method::POST,
302 "/session/{sessionId}/actions",
303 Route::PerformActions,
304 ),
305 (
306 Method::DELETE,
307 "/session/{sessionId}/actions",
308 Route::ReleaseActions,
309 ),
310 (Method::POST, "/session/{sessionId}/permissions", Route::SetPermission),
311 (Method::POST, "/session/{sessionId}/print", Route::Print),
312 (
313 Method::POST,
314 "/session/{sessionId}/privacy",
315 Route::GPCSetGlobalPrivacyControl,
316 ),
317 (
318 Method::GET,
319 "/session/{sessionId}/privacy",
320 Route::GPCGetGlobalPrivacyControl,
321 ),
322 (
323 Method::POST,
324 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credential",
325 Route::WebAuthnAddCredential,
326 ),
327 (
328 Method::POST,
329 "/session/{sessionId}/webauthn/authenticator",
330 Route::WebAuthnAddVirtualAuthenticator,
331 ),
332 (
333 Method::GET,
334 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credentials",
335 Route::WebAuthnGetCredentials,
336 ),
337 (
338 Method::DELETE,
339 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credentials",
340 Route::WebAuthnRemoveAllCredentials,
341 ),
342 (
343 Method::DELETE,
344 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credentials/{credentialId}",
345 Route::WebAuthnRemoveCredential,
346 ),
347 (
348 Method::DELETE,
349 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}",
350 Route::WebAuthnRemoveVirtualAuthenticator,
351 ),
352 (
353 Method::POST,
354 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/uv",
355 Route::WebAuthnSetUserVerified,
356 ),
357 (Method::GET, "/status", Route::Status),
358 ]
359}
360
361#[derive(Clone, Copy, Debug)]
362pub enum Route<U: WebDriverExtensionRoute> {
363 NewSession,
364 DeleteSession,
365 Get,
366 GetCurrentUrl,
367 GoBack,
368 GoForward,
369 Refresh,
370 GetTitle,
371 GetPageSource,
372 GetWindowHandle,
373 GetWindowHandles,
374 NewWindow,
375 CloseWindow,
376 GetWindowSize, SetWindowSize, GetWindowPosition, SetWindowPosition, GetWindowRect,
381 SetWindowRect,
382 MinimizeWindow,
383 MaximizeWindow,
384 FullscreenWindow,
385 SwitchToWindow,
386 SwitchToFrame,
387 SwitchToParentFrame,
388 FindElement,
389 FindElements,
390 FindElementElement,
391 FindElementElements,
392 FindShadowRootElement,
393 FindShadowRootElements,
394 GetActiveElement,
395 GetShadowRoot,
396 IsDisplayed,
397 IsSelected,
398 GetElementAttribute,
399 GetElementProperty,
400 GetCSSValue,
401 GetElementText,
402 GetComputedLabel,
403 GetComputedRole,
404 GetElementTagName,
405 GetElementRect,
406 IsEnabled,
407 ExecuteScript,
408 ExecuteAsyncScript,
409 GetCookies,
410 GetNamedCookie,
411 AddCookie,
412 DeleteCookies,
413 DeleteCookie,
414 GetTimeouts,
415 SetTimeouts,
416 ElementClick,
417 ElementClear,
418 ElementSendKeys,
419 PerformActions,
420 ReleaseActions,
421 DismissAlert,
422 AcceptAlert,
423 GetAlertText,
424 SendAlertText,
425 TakeScreenshot,
426 TakeElementScreenshot,
427 Print,
428 SetPermission,
429 Status,
430 Extension(U),
431 GPCGetGlobalPrivacyControl,
432 GPCSetGlobalPrivacyControl,
433 WebAuthnAddCredential,
434 WebAuthnAddVirtualAuthenticator,
435 WebAuthnGetCredentials,
436 WebAuthnRemoveAllCredentials,
437 WebAuthnRemoveCredential,
438 WebAuthnRemoveVirtualAuthenticator,
439 WebAuthnSetUserVerified,
440}
441
442pub trait WebDriverExtensionRoute: Clone + Send + PartialEq {
443 type Command: WebDriverExtensionCommand + 'static;
444
445 fn command(
446 &self,
447 _: &Parameters,
448 _: &Value,
449 ) -> WebDriverResult<WebDriverCommand<Self::Command>>;
450}
451
452#[derive(Clone, Debug, PartialEq)]
453pub struct VoidWebDriverExtensionRoute;
454
455impl WebDriverExtensionRoute for VoidWebDriverExtensionRoute {
456 type Command = VoidWebDriverExtensionCommand;
457
458 fn command(
459 &self,
460 _: &Parameters,
461 _: &Value,
462 ) -> WebDriverResult<WebDriverCommand<VoidWebDriverExtensionCommand>> {
463 panic!("No extensions implemented");
464 }
465}