mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Macro for boilerplate code in webdriver handle_*
Add a macro for the boilerplate code that appears in most of Handler's methods handling a WebDriverScriptCommand.
This commit is contained in:
parent
e5f3c5b6d1
commit
05547dce5a
1 changed files with 33 additions and 68 deletions
|
@ -299,6 +299,18 @@ impl Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn frame_script_command(&self, cmd_msg: WebDriverScriptCommand) -> WebDriverResult<()> {
|
||||||
|
Ok(self.constellation_chan.send(ConstellationMsg::WebDriverCommand(
|
||||||
|
WebDriverCommandMsg::ScriptCommand(try!(self.frame_pipeline()), cmd_msg))).unwrap())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn root_script_command(&self, cmd_msg: WebDriverScriptCommand) -> WebDriverResult<()> {
|
||||||
|
Ok(self.constellation_chan.send(ConstellationMsg::WebDriverCommand(
|
||||||
|
WebDriverCommandMsg::ScriptCommand(try!(self.root_pipeline()), cmd_msg))).unwrap())
|
||||||
|
}
|
||||||
|
|
||||||
fn handle_get(&self, parameters: &GetParameters) -> WebDriverResult<WebDriverResponse> {
|
fn handle_get(&self, parameters: &GetParameters) -> WebDriverResult<WebDriverResponse> {
|
||||||
let url = match Url::parse(¶meters.url[..]) {
|
let url = match Url::parse(¶meters.url[..]) {
|
||||||
Ok(url) => url,
|
Ok(url) => url,
|
||||||
|
@ -336,13 +348,8 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_current_url(&self) -> WebDriverResult<WebDriverResponse> {
|
fn handle_current_url(&self) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.root_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
|
try!(self.root_script_command(WebDriverScriptCommand::GetUrl(sender)));
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
|
|
||||||
WebDriverScriptCommand::GetUrl(sender));
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
|
|
||||||
let url = receiver.recv().unwrap();
|
let url = receiver.recv().unwrap();
|
||||||
|
|
||||||
|
@ -350,13 +357,9 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_window_size(&self) -> WebDriverResult<WebDriverResponse> {
|
fn handle_window_size(&self) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.root_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
|
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
|
try!(self.root_script_command(WebDriverScriptCommand::GetWindowSize(sender)));
|
||||||
WebDriverScriptCommand::GetWindowSize(sender));
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Some(window_size) => {
|
Some(window_size) => {
|
||||||
|
@ -369,14 +372,9 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.root_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
|
|
||||||
let element_id = element.id.clone();
|
try!(self.root_script_command(WebDriverScriptCommand::IsEnabled(element.id.clone(), sender)));
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
|
|
||||||
WebDriverScriptCommand::IsEnabled(element_id, sender));
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(is_enabled) => Ok(WebDriverResponse::Generic(ValueResponse::new(is_enabled.to_json()))),
|
Ok(is_enabled) => Ok(WebDriverResponse::Generic(ValueResponse::new(is_enabled.to_json()))),
|
||||||
|
@ -385,14 +383,9 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_is_selected(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
fn handle_is_selected(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.root_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
|
|
||||||
let element_id = element.id.clone();
|
try!(self.root_script_command(WebDriverScriptCommand::IsSelected(element.id.clone(), sender)));
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
|
|
||||||
WebDriverScriptCommand::IsSelected(element_id, sender));
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(is_selected) => Ok(WebDriverResponse::Generic(ValueResponse::new(is_selected.to_json()))),
|
Ok(is_selected) => Ok(WebDriverResponse::Generic(ValueResponse::new(is_selected.to_json()))),
|
||||||
|
@ -422,12 +415,10 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_title(&self) -> WebDriverResult<WebDriverResponse> {
|
fn handle_title(&self) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.root_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
|
|
||||||
WebDriverScriptCommand::GetTitle(sender));
|
try!(self.root_script_command(WebDriverScriptCommand::GetTitle(sender)));
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
let value = receiver.recv().unwrap();
|
let value = receiver.recv().unwrap();
|
||||||
Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json())))
|
Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json())))
|
||||||
}
|
}
|
||||||
|
@ -447,17 +438,16 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_find_element(&self, parameters: &LocatorParameters) -> WebDriverResult<WebDriverResponse> {
|
fn handle_find_element(&self, parameters: &LocatorParameters) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
if parameters.using != LocatorStrategy::CSSSelector {
|
if parameters.using != LocatorStrategy::CSSSelector {
|
||||||
return Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,
|
return Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,
|
||||||
"Unsupported locator strategy"))
|
"Unsupported locator strategy"))
|
||||||
}
|
}
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::FindElementCSS(parameters.value.clone(), sender);
|
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
try!(self.frame_script_command(WebDriverScriptCommand::FindElementCSS(parameters.value.clone(),
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
sender)));
|
||||||
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(value) => {
|
Ok(value) => {
|
||||||
let value_resp = value.map(|x| WebElement::new(x).to_json()).to_json();
|
let value_resp = value.map(|x| WebElement::new(x).to_json()).to_json();
|
||||||
|
@ -519,17 +509,14 @@ impl Handler {
|
||||||
|
|
||||||
|
|
||||||
fn handle_find_elements(&self, parameters: &LocatorParameters) -> WebDriverResult<WebDriverResponse> {
|
fn handle_find_elements(&self, parameters: &LocatorParameters) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
if parameters.using != LocatorStrategy::CSSSelector {
|
if parameters.using != LocatorStrategy::CSSSelector {
|
||||||
return Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,
|
return Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,
|
||||||
"Unsupported locator strategy"))
|
"Unsupported locator strategy"))
|
||||||
}
|
}
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::FindElementsCSS(parameters.value.clone(), sender);
|
try!(self.frame_script_command(WebDriverScriptCommand::FindElementCSS(parameters.value.clone(),
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
sender)));
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(value) => {
|
Ok(value) => {
|
||||||
let resp_value: Vec<Json> = value.into_iter().map(
|
let resp_value: Vec<Json> = value.into_iter().map(
|
||||||
|
@ -543,12 +530,8 @@ impl Handler {
|
||||||
|
|
||||||
// https://w3c.github.io/webdriver/webdriver-spec.html#get-element-rect
|
// https://w3c.github.io/webdriver/webdriver-spec.html#get-element-rect
|
||||||
fn handle_element_rect(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
fn handle_element_rect(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::GetElementRect(element.id.clone(), sender);
|
try!(self.frame_script_command(WebDriverScriptCommand::GetElementRect(element.id.clone(), sender)));
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(rect) => {
|
Ok(rect) => {
|
||||||
let response = ElementRectResponse::new(rect.origin.x, rect.origin.y,
|
let response = ElementRectResponse::new(rect.origin.x, rect.origin.y,
|
||||||
|
@ -561,12 +544,8 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_element_text(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
fn handle_element_text(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::GetElementText(element.id.clone(), sender);
|
try!(self.frame_script_command(WebDriverScriptCommand::GetElementText(element.id.clone(), sender)));
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
||||||
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
||||||
|
@ -575,23 +554,15 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_active_element(&self) -> WebDriverResult<WebDriverResponse> {
|
fn handle_active_element(&self) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::GetActiveElement(sender);
|
try!(self.frame_script_command(WebDriverScriptCommand::GetActiveElement(sender)));
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
let value = receiver.recv().unwrap().map(|x| WebElement::new(x).to_json());
|
let value = receiver.recv().unwrap().map(|x| WebElement::new(x).to_json());
|
||||||
Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json())))
|
Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json())))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_element_tag_name(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
fn handle_element_tag_name(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::GetElementTagName(element.id.clone(), sender);
|
try!(self.frame_script_command(WebDriverScriptCommand::GetElementTagName(element.id.clone(), sender)));
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
||||||
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
||||||
|
@ -600,12 +571,9 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_element_attribute(&self, element: &WebElement, name: &str) -> WebDriverResult<WebDriverResponse> {
|
fn handle_element_attribute(&self, element: &WebElement, name: &str) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::GetElementAttribute(element.id.clone(), name.to_owned(), sender);
|
try!(self.frame_script_command(WebDriverScriptCommand::GetElementAttribute(element.id.clone(), name.to_owned(),
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
sender)));
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
||||||
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
||||||
|
@ -614,12 +582,9 @@ impl Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_element_css(&self, element: &WebElement, name: &str) -> WebDriverResult<WebDriverResponse> {
|
fn handle_element_css(&self, element: &WebElement, name: &str) -> WebDriverResult<WebDriverResponse> {
|
||||||
let pipeline_id = try!(self.frame_pipeline());
|
|
||||||
|
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let cmd = WebDriverScriptCommand::GetElementCSS(element.id.clone(), name.to_owned(), sender);
|
try!(self.frame_script_command(WebDriverScriptCommand::GetElementCSS(element.id.clone(), name.to_owned(),
|
||||||
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
|
sender)));
|
||||||
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
|
||||||
match receiver.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
|
||||||
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue