diff options
Diffstat (limited to 'testing/webdriver/src/httpapi.rs')
-rw-r--r-- | testing/webdriver/src/httpapi.rs | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/testing/webdriver/src/httpapi.rs b/testing/webdriver/src/httpapi.rs new file mode 100644 index 0000000000..d2771d5bee --- /dev/null +++ b/testing/webdriver/src/httpapi.rs @@ -0,0 +1,385 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use http::Method; +use serde_json::Value; + +use crate::command::{VoidWebDriverExtensionCommand, WebDriverCommand, WebDriverExtensionCommand}; +use crate::error::WebDriverResult; +use crate::Parameters; + +pub fn standard_routes<U: WebDriverExtensionRoute>() -> Vec<(Method, &'static str, Route<U>)> { + vec![ + (Method::POST, "/session", Route::NewSession), + (Method::DELETE, "/session/{sessionId}", Route::DeleteSession), + (Method::POST, "/session/{sessionId}/url", Route::Get), + ( + Method::GET, + "/session/{sessionId}/url", + Route::GetCurrentUrl, + ), + (Method::POST, "/session/{sessionId}/back", Route::GoBack), + ( + Method::POST, + "/session/{sessionId}/forward", + Route::GoForward, + ), + (Method::POST, "/session/{sessionId}/refresh", Route::Refresh), + (Method::GET, "/session/{sessionId}/title", Route::GetTitle), + ( + Method::GET, + "/session/{sessionId}/source", + Route::GetPageSource, + ), + ( + Method::GET, + "/session/{sessionId}/window", + Route::GetWindowHandle, + ), + ( + Method::GET, + "/session/{sessionId}/window/handles", + Route::GetWindowHandles, + ), + ( + Method::POST, + "/session/{sessionId}/window/new", + Route::NewWindow, + ), + ( + Method::DELETE, + "/session/{sessionId}/window", + Route::CloseWindow, + ), + ( + Method::GET, + "/session/{sessionId}/window/size", + Route::GetWindowSize, + ), + ( + Method::POST, + "/session/{sessionId}/window/size", + Route::SetWindowSize, + ), + ( + Method::GET, + "/session/{sessionId}/window/position", + Route::GetWindowPosition, + ), + ( + Method::POST, + "/session/{sessionId}/window/position", + Route::SetWindowPosition, + ), + ( + Method::GET, + "/session/{sessionId}/window/rect", + Route::GetWindowRect, + ), + ( + Method::POST, + "/session/{sessionId}/window/rect", + Route::SetWindowRect, + ), + ( + Method::POST, + "/session/{sessionId}/window/minimize", + Route::MinimizeWindow, + ), + ( + Method::POST, + "/session/{sessionId}/window/maximize", + Route::MaximizeWindow, + ), + ( + Method::POST, + "/session/{sessionId}/window/fullscreen", + Route::FullscreenWindow, + ), + ( + Method::POST, + "/session/{sessionId}/window", + Route::SwitchToWindow, + ), + ( + Method::POST, + "/session/{sessionId}/frame", + Route::SwitchToFrame, + ), + ( + Method::POST, + "/session/{sessionId}/frame/parent", + Route::SwitchToParentFrame, + ), + ( + Method::POST, + "/session/{sessionId}/element", + Route::FindElement, + ), + ( + Method::POST, + "/session/{sessionId}/elements", + Route::FindElements, + ), + ( + Method::POST, + "/session/{sessionId}/element/{elementId}/element", + Route::FindElementElement, + ), + ( + Method::POST, + "/session/{sessionId}/element/{elementId}/elements", + Route::FindElementElements, + ), + ( + Method::GET, + "/session/{sessionId}/element/active", + Route::GetActiveElement, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/shadow", + Route::GetShadowRoot, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/displayed", + Route::IsDisplayed, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/selected", + Route::IsSelected, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/attribute/{name}", + Route::GetElementAttribute, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/property/{name}", + Route::GetElementProperty, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/css/{propertyName}", + Route::GetCSSValue, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/text", + Route::GetElementText, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/name", + Route::GetElementTagName, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/rect", + Route::GetElementRect, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/enabled", + Route::IsEnabled, + ), + ( + Method::POST, + "/session/{sessionId}/execute/sync", + Route::ExecuteScript, + ), + ( + Method::POST, + "/session/{sessionId}/execute/async", + Route::ExecuteAsyncScript, + ), + ( + Method::GET, + "/session/{sessionId}/cookie", + Route::GetCookies, + ), + ( + Method::GET, + "/session/{sessionId}/cookie/{name}", + Route::GetNamedCookie, + ), + ( + Method::POST, + "/session/{sessionId}/cookie", + Route::AddCookie, + ), + ( + Method::DELETE, + "/session/{sessionId}/cookie", + Route::DeleteCookies, + ), + ( + Method::DELETE, + "/session/{sessionId}/cookie/{name}", + Route::DeleteCookie, + ), + ( + Method::GET, + "/session/{sessionId}/timeouts", + Route::GetTimeouts, + ), + ( + Method::POST, + "/session/{sessionId}/timeouts", + Route::SetTimeouts, + ), + ( + Method::POST, + "/session/{sessionId}/element/{elementId}/click", + Route::ElementClick, + ), + ( + Method::POST, + "/session/{sessionId}/element/{elementId}/clear", + Route::ElementClear, + ), + ( + Method::POST, + "/session/{sessionId}/element/{elementId}/value", + Route::ElementSendKeys, + ), + ( + Method::POST, + "/session/{sessionId}/alert/dismiss", + Route::DismissAlert, + ), + ( + Method::POST, + "/session/{sessionId}/alert/accept", + Route::AcceptAlert, + ), + ( + Method::GET, + "/session/{sessionId}/alert/text", + Route::GetAlertText, + ), + ( + Method::POST, + "/session/{sessionId}/alert/text", + Route::SendAlertText, + ), + ( + Method::GET, + "/session/{sessionId}/screenshot", + Route::TakeScreenshot, + ), + ( + Method::GET, + "/session/{sessionId}/element/{elementId}/screenshot", + Route::TakeElementScreenshot, + ), + ( + Method::POST, + "/session/{sessionId}/actions", + Route::PerformActions, + ), + ( + Method::DELETE, + "/session/{sessionId}/actions", + Route::ReleaseActions, + ), + (Method::POST, "/session/{sessionId}/print", Route::Print), + (Method::GET, "/status", Route::Status), + ] +} + +#[derive(Clone, Copy, Debug)] +pub enum Route<U: WebDriverExtensionRoute> { + NewSession, + DeleteSession, + Get, + GetCurrentUrl, + GoBack, + GoForward, + Refresh, + GetTitle, + GetPageSource, + GetWindowHandle, + GetWindowHandles, + NewWindow, + CloseWindow, + GetWindowSize, // deprecated + SetWindowSize, // deprecated + GetWindowPosition, // deprecated + SetWindowPosition, // deprecated + GetWindowRect, + SetWindowRect, + MinimizeWindow, + MaximizeWindow, + FullscreenWindow, + SwitchToWindow, + SwitchToFrame, + SwitchToParentFrame, + FindElement, + FindElements, + FindElementElement, + FindElementElements, + GetActiveElement, + GetShadowRoot, + IsDisplayed, + IsSelected, + GetElementAttribute, + GetElementProperty, + GetCSSValue, + GetElementText, + GetElementTagName, + GetElementRect, + IsEnabled, + ExecuteScript, + ExecuteAsyncScript, + GetCookies, + GetNamedCookie, + AddCookie, + DeleteCookies, + DeleteCookie, + GetTimeouts, + SetTimeouts, + ElementClick, + ElementClear, + ElementSendKeys, + PerformActions, + ReleaseActions, + DismissAlert, + AcceptAlert, + GetAlertText, + SendAlertText, + TakeScreenshot, + TakeElementScreenshot, + Print, + Status, + Extension(U), +} + +pub trait WebDriverExtensionRoute: Clone + Send + PartialEq { + type Command: WebDriverExtensionCommand + 'static; + + fn command( + &self, + _: &Parameters, + _: &Value, + ) -> WebDriverResult<WebDriverCommand<Self::Command>>; +} + +#[derive(Clone, Debug, PartialEq)] +pub struct VoidWebDriverExtensionRoute; + +impl WebDriverExtensionRoute for VoidWebDriverExtensionRoute { + type Command = VoidWebDriverExtensionCommand; + + fn command( + &self, + _: &Parameters, + _: &Value, + ) -> WebDriverResult<WebDriverCommand<VoidWebDriverExtensionCommand>> { + panic!("No extensions implemented"); + } +} |