Bug 1569100 - Marionette: Add AcceptAlert, DismissAlert, GetAlertText and SendAlertText commands. r=ato

Differential Revision: https://phabricator.services.mozilla.com/D40214

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Nupur Baghel 2019-08-02 17:57:33 +00:00
parent eb1de83a74
commit af2197df27
2 changed files with 44 additions and 22 deletions

View File

@ -40,8 +40,17 @@ pub struct WindowRect {
pub height: Option<i32>, pub height: Option<i32>,
} }
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Keys {
pub text: String,
pub value: Vec<String>,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub enum Command { pub enum Command {
// Needs to be updated to "WebDriver:AcceptAlert" for Firefox 63
#[serde(rename = "WebDriver:AcceptDialog")]
AcceptAlert,
#[serde( #[serde(
rename = "WebDriver:AddCookie", rename = "WebDriver:AddCookie",
serialize_with = "to_cookie", serialize_with = "to_cookie",
@ -58,12 +67,16 @@ pub enum Command {
DeleteCookie(String), DeleteCookie(String),
#[serde(rename = "WebDriver:DeleteAllCookies")] #[serde(rename = "WebDriver:DeleteAllCookies")]
DeleteCookies, DeleteCookies,
#[serde(rename = "WebDriver:DismissAlert")]
DismissAlert,
#[serde(rename = "WebDriver:FindElement")] #[serde(rename = "WebDriver:FindElement")]
FindElement(Locator), FindElement(Locator),
#[serde(rename = "WebDriver:FindElements")] #[serde(rename = "WebDriver:FindElements")]
FindElements(Locator), FindElements(Locator),
#[serde(rename = "WebDriver:FullscreenWindow")] #[serde(rename = "WebDriver:FullscreenWindow")]
FullscreenWindow, FullscreenWindow,
#[serde(rename = "WebDriver:GetAlertText")]
GetAlertText,
#[serde(rename = "WebDriver:GetCookies")] #[serde(rename = "WebDriver:GetCookies")]
GetCookies, GetCookies,
#[serde(rename = "WebDriver:GetTimeouts")] #[serde(rename = "WebDriver:GetTimeouts")]
@ -80,6 +93,8 @@ pub enum Command {
MinimizeWindow, MinimizeWindow,
#[serde(rename = "WebDriver:NewWindow")] #[serde(rename = "WebDriver:NewWindow")]
NewWindow(NewWindow), NewWindow(NewWindow),
#[serde(rename = "WebDriver:SendAlertText")]
SendAlertText(Keys),
#[serde(rename = "WebDriver:SetTimeouts")] #[serde(rename = "WebDriver:SetTimeouts")]
SetTimeouts(Timeouts), SetTimeouts(Timeouts),
#[serde(rename = "WebDriver:SetWindowRect")] #[serde(rename = "WebDriver:SetWindowRect")]
@ -137,6 +152,13 @@ mod tests {
assert_ser_de(&data, json); assert_ser_de(&data, json);
} }
#[test]
fn test_json_keys() {
let data = Keys {text: "Foo".into(), value: vec!["F".into(), "o".into(), "o".into()]};
let json = json!({"text": "Foo", "value": ["F", "o", "o"]});
assert_ser_de(&data, json);
}
#[test] #[test]
fn test_json_new_window() { fn test_json_new_window() {
let data = NewWindow { let data = NewWindow {

View File

@ -7,7 +7,7 @@ use marionette_rs::common::{
}; };
use marionette_rs::message::{Command, Message, MessageId, Request}; use marionette_rs::message::{Command, Message, MessageId, Request};
use marionette_rs::webdriver::{ use marionette_rs::webdriver::{
Command as MarionetteWebDriverCommand, Locator as MarionetteLocator, Command as MarionetteWebDriverCommand, Keys as MarionetteKeys, Locator as MarionetteLocator,
NewWindow as MarionetteNewWindow, Selector as MarionetteSelector, NewWindow as MarionetteNewWindow, Selector as MarionetteSelector,
WindowRect as MarionetteWindowRect, WindowRect as MarionetteWindowRect,
}; };
@ -43,7 +43,8 @@ use webdriver::command::WebDriverCommand::{
use webdriver::command::{ use webdriver::command::{
ActionsParameters, AddCookieParameters, GetNamedCookieParameters, GetParameters, ActionsParameters, AddCookieParameters, GetNamedCookieParameters, GetParameters,
JavascriptCommandParameters, LocatorParameters, NewSessionParameters, NewWindowParameters, JavascriptCommandParameters, LocatorParameters, NewSessionParameters, NewWindowParameters,
SwitchToFrameParameters, SwitchToWindowParameters, TimeoutsParameters, WindowRectParameters, SendKeysParameters, SwitchToFrameParameters, SwitchToWindowParameters, TimeoutsParameters,
WindowRectParameters,
}; };
use webdriver::command::{WebDriverCommand, WebDriverMessage}; use webdriver::command::{WebDriverCommand, WebDriverMessage};
use webdriver::common::{ use webdriver::common::{
@ -798,6 +799,7 @@ fn try_convert_to_marionette_message(
) -> WebDriverResult<Option<Command>> { ) -> WebDriverResult<Option<Command>> {
use self::WebDriverCommand::*; use self::WebDriverCommand::*;
Ok(match msg.command { Ok(match msg.command {
AcceptAlert => Some(Command::WebDriver(MarionetteWebDriverCommand::AcceptAlert)),
AddCookie(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::AddCookie( AddCookie(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::AddCookie(
x.to_marionette()?, x.to_marionette()?,
))), ))),
@ -808,6 +810,7 @@ fn try_convert_to_marionette_message(
DeleteCookies => Some(Command::WebDriver( DeleteCookies => Some(Command::WebDriver(
MarionetteWebDriverCommand::DeleteCookies, MarionetteWebDriverCommand::DeleteCookies,
)), )),
DismissAlert => Some(Command::WebDriver(MarionetteWebDriverCommand::DismissAlert)),
FindElement(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::FindElement( FindElement(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::FindElement(
x.to_marionette()?, x.to_marionette()?,
))), ))),
@ -817,6 +820,7 @@ fn try_convert_to_marionette_message(
FullscreenWindow => Some(Command::WebDriver( FullscreenWindow => Some(Command::WebDriver(
MarionetteWebDriverCommand::FullscreenWindow, MarionetteWebDriverCommand::FullscreenWindow,
)), )),
GetAlertText => Some(Command::WebDriver(MarionetteWebDriverCommand::GetAlertText)),
GetCookies | GetNamedCookie(_) => { GetCookies | GetNamedCookie(_) => {
Some(Command::WebDriver(MarionetteWebDriverCommand::GetCookies)) Some(Command::WebDriver(MarionetteWebDriverCommand::GetCookies))
} }
@ -839,6 +843,9 @@ fn try_convert_to_marionette_message(
NewWindow(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::NewWindow( NewWindow(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::NewWindow(
x.to_marionette()?, x.to_marionette()?,
))), ))),
SendAlertText(ref x) => Some(Command::WebDriver(
MarionetteWebDriverCommand::SendAlertText(x.to_marionette()?),
)),
SetTimeouts(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::SetTimeouts( SetTimeouts(ref x) => Some(Command::WebDriver(MarionetteWebDriverCommand::SetTimeouts(
x.to_marionette()?, x.to_marionette()?,
))), ))),
@ -897,10 +904,6 @@ impl MarionetteCommand {
} else { } else {
let (opt_name, opt_parameters) = match msg.command { let (opt_name, opt_parameters) = match msg.command {
Status => panic!("Got status command that should already have been handled"), Status => panic!("Got status command that should already have been handled"),
AcceptAlert => {
// Needs to be updated to "WebDriver:AcceptAlert" for Firefox 63
(Some("WebDriver:AcceptDialog"), None)
}
DeleteSession => { DeleteSession => {
let mut body = Map::new(); let mut body = Map::new();
body.insert( body.insert(
@ -909,7 +912,6 @@ impl MarionetteCommand {
); );
(Some("Marionette:Quit"), Some(Ok(body))) (Some("Marionette:Quit"), Some(Ok(body)))
} }
DismissAlert => (Some("WebDriver:DismissAlert"), None),
ElementClear(ref x) => (Some("WebDriver:ElementClear"), Some(x.to_marionette())), ElementClear(ref x) => (Some("WebDriver:ElementClear"), Some(x.to_marionette())),
ElementClick(ref x) => (Some("WebDriver:ElementClick"), Some(x.to_marionette())), ElementClick(ref x) => (Some("WebDriver:ElementClick"), Some(x.to_marionette())),
ElementSendKeys(ref e, ref x) => { ElementSendKeys(ref e, ref x) => {
@ -953,7 +955,6 @@ impl MarionetteCommand {
(Some("WebDriver:FindElements"), Some(Ok(data))) (Some("WebDriver:FindElements"), Some(Ok(data)))
} }
Get(ref x) => (Some("WebDriver:Navigate"), Some(x.to_marionette())), Get(ref x) => (Some("WebDriver:Navigate"), Some(x.to_marionette())),
GetAlertText => (Some("WebDriver:GetAlertText"), None),
GetActiveElement => (Some("WebDriver:GetActiveElement"), None), GetActiveElement => (Some("WebDriver:GetActiveElement"), None),
GetCurrentUrl => (Some("WebDriver:GetCurrentURL"), None), GetCurrentUrl => (Some("WebDriver:GetCurrentURL"), None),
GetCSSValue(ref e, ref x) => { GetCSSValue(ref e, ref x) => {
@ -1009,20 +1010,6 @@ impl MarionetteCommand {
} }
Refresh => (Some("WebDriver:Refresh"), None), Refresh => (Some("WebDriver:Refresh"), None),
ReleaseActions => (Some("WebDriver:ReleaseActions"), None), ReleaseActions => (Some("WebDriver:ReleaseActions"), None),
SendAlertText(ref x) => {
let mut data = Map::new();
data.insert("text".to_string(), Value::String(x.text.clone()));
data.insert(
"value".to_string(),
serde_json::to_value(
x.text
.chars()
.map(|x| x.to_string())
.collect::<Vec<String>>(),
)?,
);
(Some("WebDriver:SendAlertText"), Some(Ok(data)))
}
SwitchToFrame(ref x) => (Some("WebDriver:SwitchToFrame"), Some(x.to_marionette())), SwitchToFrame(ref x) => (Some("WebDriver:SwitchToFrame"), Some(x.to_marionette())),
SwitchToParentFrame => (Some("WebDriver:SwitchToParentFrame"), None), SwitchToParentFrame => (Some("WebDriver:SwitchToParentFrame"), None),
SwitchToWindow(ref x) => { SwitchToWindow(ref x) => {
@ -1550,6 +1537,19 @@ impl ToMarionette<MarionetteNewWindow> for NewWindowParameters {
} }
} }
impl ToMarionette<MarionetteKeys> for SendKeysParameters {
fn to_marionette(&self) -> WebDriverResult<MarionetteKeys> {
Ok(MarionetteKeys {
text: self.text.clone(),
value: self
.text
.chars()
.map(|x| x.to_string())
.collect::<Vec<String>>(),
})
}
}
impl ToMarionette<Map<String, Value>> for SwitchToFrameParameters { impl ToMarionette<Map<String, Value>> for SwitchToFrameParameters {
fn to_marionette(&self) -> WebDriverResult<Map<String, Value>> { fn to_marionette(&self) -> WebDriverResult<Map<String, Value>> {
let mut data = Map::new(); let mut data = Map::new();