mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 16:25:38 +00:00
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:
parent
eb1de83a74
commit
af2197df27
@ -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 {
|
||||||
|
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user