aboutsummaryrefslogtreecommitdiffstats
path: root/components/webdriver_server
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2015-11-19 23:16:25 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2015-11-19 23:16:25 +0530
commit7f95693288eac546b7b31a51a6fcf80883ae533b (patch)
tree3b11e1b2d5afcd24415fd6b23a66b161f362efa9 /components/webdriver_server
parentced8763b25df54f7820563200003dd79c05d0ec3 (diff)
parent6446cc3db8ae42c6a24498ddd2293d271c204753 (diff)
downloadservo-7f95693288eac546b7b31a51a6fcf80883ae533b.tar.gz
servo-7f95693288eac546b7b31a51a6fcf80883ae533b.zip
Auto merge of #8564 - jgraham:webdriver_attr, r=Ms2ger
Implement Get Element Attribute WebDriver command This intentionally doesn't implement the special handling for boolean attributes yet, since that requires some kind of exhaustive list of all such attributes <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8564) <!-- Reviewable:end -->
Diffstat (limited to 'components/webdriver_server')
-rw-r--r--components/webdriver_server/lib.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs
index 71c6dea5f84..a899da65137 100644
--- a/components/webdriver_server/lib.rs
+++ b/components/webdriver_server/lib.rs
@@ -538,6 +538,21 @@ impl Handler {
}
}
+ fn handle_element_attribute(&self, element: &WebElement, name: &String) -> WebDriverResult<WebDriverResponse> {
+ let pipeline_id = try!(self.frame_pipeline());
+
+ let (sender, receiver) = ipc::channel().unwrap();
+ let ConstellationChan(ref const_chan) = self.constellation_chan;
+ let cmd = WebDriverScriptCommand::GetElementAttribute(element.id.clone(), name.clone(), sender);
+ let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
+ const_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
+ match receiver.recv().unwrap() {
+ Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse::new(value.to_json()))),
+ Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference,
+ "Unable to find element in document"))
+ }
+ }
+
fn handle_set_timeouts(&mut self, parameters: &TimeoutsParameters) -> WebDriverResult<WebDriverResponse> {
//TODO: this conversion is crazy, spec should limit these to u32 and check upstream
let value = parameters.ms as u32;
@@ -731,6 +746,8 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
WebDriverCommand::GetActiveElement => self.handle_active_element(),
WebDriverCommand::GetElementText(ref element) => self.handle_element_text(element),
WebDriverCommand::GetElementTagName(ref element) => self.handle_element_tag_name(element),
+ WebDriverCommand::GetElementAttribute(ref element, ref name) =>
+ self.handle_element_attribute(element, name),
WebDriverCommand::ExecuteScript(ref x) => self.handle_execute_script(x),
WebDriverCommand::ExecuteAsyncScript(ref x) => self.handle_execute_async_script(x),
WebDriverCommand::ElementSendKeys(ref element, ref keys) =>