1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 use http::Method;
6 use serde_json::Value;
7
8 use crate::command::{VoidWebDriverExtensionCommand, WebDriverCommand, WebDriverExtensionCommand};
9 use crate::error::WebDriverResult;
10 use crate::Parameters;
11
standard_routes<U: WebDriverExtensionRoute>() -> Vec<(Method, &'static str, Route<U>)>12 pub fn standard_routes<U: WebDriverExtensionRoute>() -> Vec<(Method, &'static str, Route<U>)> {
13 return 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}/elements",
123 Route::FindElements,
124 ),
125 (
126 Method::POST,
127 "/session/{sessionId}/element/{elementId}/element",
128 Route::FindElementElement,
129 ),
130 (
131 Method::POST,
132 "/session/{sessionId}/element/{elementId}/elements",
133 Route::FindElementElements,
134 ),
135 (
136 Method::GET,
137 "/session/{sessionId}/element/active",
138 Route::GetActiveElement,
139 ),
140 (
141 Method::GET,
142 "/session/{sessionId}/element/{elementId}/shadow",
143 Route::GetShadowRoot,
144 ),
145 (
146 Method::GET,
147 "/session/{sessionId}/element/{elementId}/displayed",
148 Route::IsDisplayed,
149 ),
150 (
151 Method::GET,
152 "/session/{sessionId}/element/{elementId}/selected",
153 Route::IsSelected,
154 ),
155 (
156 Method::GET,
157 "/session/{sessionId}/element/{elementId}/attribute/{name}",
158 Route::GetElementAttribute,
159 ),
160 (
161 Method::GET,
162 "/session/{sessionId}/element/{elementId}/property/{name}",
163 Route::GetElementProperty,
164 ),
165 (
166 Method::GET,
167 "/session/{sessionId}/element/{elementId}/css/{propertyName}",
168 Route::GetCSSValue,
169 ),
170 (
171 Method::GET,
172 "/session/{sessionId}/element/{elementId}/text",
173 Route::GetElementText,
174 ),
175 (
176 Method::GET,
177 "/session/{sessionId}/element/{elementId}/name",
178 Route::GetElementTagName,
179 ),
180 (
181 Method::GET,
182 "/session/{sessionId}/element/{elementId}/rect",
183 Route::GetElementRect,
184 ),
185 (
186 Method::GET,
187 "/session/{sessionId}/element/{elementId}/enabled",
188 Route::IsEnabled,
189 ),
190 (
191 Method::POST,
192 "/session/{sessionId}/execute/sync",
193 Route::ExecuteScript,
194 ),
195 (
196 Method::POST,
197 "/session/{sessionId}/execute/async",
198 Route::ExecuteAsyncScript,
199 ),
200 (
201 Method::GET,
202 "/session/{sessionId}/cookie",
203 Route::GetCookies,
204 ),
205 (
206 Method::GET,
207 "/session/{sessionId}/cookie/{name}",
208 Route::GetNamedCookie,
209 ),
210 (
211 Method::POST,
212 "/session/{sessionId}/cookie",
213 Route::AddCookie,
214 ),
215 (
216 Method::DELETE,
217 "/session/{sessionId}/cookie",
218 Route::DeleteCookies,
219 ),
220 (
221 Method::DELETE,
222 "/session/{sessionId}/cookie/{name}",
223 Route::DeleteCookie,
224 ),
225 (
226 Method::GET,
227 "/session/{sessionId}/timeouts",
228 Route::GetTimeouts,
229 ),
230 (
231 Method::POST,
232 "/session/{sessionId}/timeouts",
233 Route::SetTimeouts,
234 ),
235 (
236 Method::POST,
237 "/session/{sessionId}/element/{elementId}/click",
238 Route::ElementClick,
239 ),
240 (
241 Method::POST,
242 "/session/{sessionId}/element/{elementId}/clear",
243 Route::ElementClear,
244 ),
245 (
246 Method::POST,
247 "/session/{sessionId}/element/{elementId}/value",
248 Route::ElementSendKeys,
249 ),
250 (
251 Method::POST,
252 "/session/{sessionId}/alert/dismiss",
253 Route::DismissAlert,
254 ),
255 (
256 Method::POST,
257 "/session/{sessionId}/alert/accept",
258 Route::AcceptAlert,
259 ),
260 (
261 Method::GET,
262 "/session/{sessionId}/alert/text",
263 Route::GetAlertText,
264 ),
265 (
266 Method::POST,
267 "/session/{sessionId}/alert/text",
268 Route::SendAlertText,
269 ),
270 (
271 Method::GET,
272 "/session/{sessionId}/screenshot",
273 Route::TakeScreenshot,
274 ),
275 (
276 Method::GET,
277 "/session/{sessionId}/element/{elementId}/screenshot",
278 Route::TakeElementScreenshot,
279 ),
280 (
281 Method::POST,
282 "/session/{sessionId}/actions",
283 Route::PerformActions,
284 ),
285 (
286 Method::DELETE,
287 "/session/{sessionId}/actions",
288 Route::ReleaseActions,
289 ),
290 (Method::POST, "/session/{sessionId}/print", Route::Print),
291 (Method::GET, "/status", Route::Status),
292 ];
293 }
294
295 #[derive(Clone, Copy, Debug)]
296 pub enum Route<U: WebDriverExtensionRoute> {
297 NewSession,
298 DeleteSession,
299 Get,
300 GetCurrentUrl,
301 GoBack,
302 GoForward,
303 Refresh,
304 GetTitle,
305 GetPageSource,
306 GetWindowHandle,
307 GetWindowHandles,
308 NewWindow,
309 CloseWindow,
310 GetWindowSize, // deprecated
311 SetWindowSize, // deprecated
312 GetWindowPosition, // deprecated
313 SetWindowPosition, // deprecated
314 GetWindowRect,
315 SetWindowRect,
316 MinimizeWindow,
317 MaximizeWindow,
318 FullscreenWindow,
319 SwitchToWindow,
320 SwitchToFrame,
321 SwitchToParentFrame,
322 FindElement,
323 FindElements,
324 FindElementElement,
325 FindElementElements,
326 GetActiveElement,
327 GetShadowRoot,
328 IsDisplayed,
329 IsSelected,
330 GetElementAttribute,
331 GetElementProperty,
332 GetCSSValue,
333 GetElementText,
334 GetElementTagName,
335 GetElementRect,
336 IsEnabled,
337 ExecuteScript,
338 ExecuteAsyncScript,
339 GetCookies,
340 GetNamedCookie,
341 AddCookie,
342 DeleteCookies,
343 DeleteCookie,
344 GetTimeouts,
345 SetTimeouts,
346 ElementClick,
347 ElementClear,
348 ElementSendKeys,
349 PerformActions,
350 ReleaseActions,
351 DismissAlert,
352 AcceptAlert,
353 GetAlertText,
354 SendAlertText,
355 TakeScreenshot,
356 TakeElementScreenshot,
357 Print,
358 Status,
359 Extension(U),
360 }
361
362 pub trait WebDriverExtensionRoute: Clone + Send + PartialEq {
363 type Command: WebDriverExtensionCommand + 'static;
364
command( &self, _: &Parameters, _: &Value, ) -> WebDriverResult<WebDriverCommand<Self::Command>>365 fn command(
366 &self,
367 _: &Parameters,
368 _: &Value,
369 ) -> WebDriverResult<WebDriverCommand<Self::Command>>;
370 }
371
372 #[derive(Clone, Debug, PartialEq)]
373 pub struct VoidWebDriverExtensionRoute;
374
375 impl WebDriverExtensionRoute for VoidWebDriverExtensionRoute {
376 type Command = VoidWebDriverExtensionCommand;
377
command( &self, _: &Parameters, _: &Value, ) -> WebDriverResult<WebDriverCommand<VoidWebDriverExtensionCommand>>378 fn command(
379 &self,
380 _: &Parameters,
381 _: &Value,
382 ) -> WebDriverResult<WebDriverCommand<VoidWebDriverExtensionCommand>> {
383 panic!("No extensions implemented");
384 }
385 }
386