diff options
Diffstat (limited to 'components/webdriver_server/lib.rs')
-rw-r--r-- | components/webdriver_server/lib.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index 2979609c295..aa1e6ae4135 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -51,7 +51,8 @@ use webdriver::command::{WebDriverCommand, WebDriverExtensionCommand, WebDriverM use webdriver::common::{LocatorStrategy, WebElement}; use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult}; use webdriver::httpapi::{WebDriverExtensionRoute}; -use webdriver::response::{NewSessionResponse, ValueResponse, WebDriverResponse, WindowSizeResponse}; +use webdriver::response::{ElementRectResponse, NewSessionResponse, ValueResponse}; +use webdriver::response::{WebDriverResponse, WindowSizeResponse}; use webdriver::server::{self, Session, WebDriverHandler}; fn extension_routes() -> Vec<(Method, &'static str, ServoExtensionRoute)> { @@ -540,6 +541,25 @@ impl Handler { } } + // https://w3c.github.io/webdriver/webdriver-spec.html#get-element-rect + fn handle_element_rect(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> { + let pipeline_id = try!(self.frame_pipeline()); + + let (sender, receiver) = ipc::channel().unwrap(); + let cmd = 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() { + Ok(rect) => { + let response = ElementRectResponse::new(rect.origin.x, rect.origin.y, + rect.size.width, rect.size.height); + Ok(WebDriverResponse::ElementRect(response)) + }, + Err(_) => Err(WebDriverError::new(ErrorStatus::StaleElementReference, + "Unable to find element in document")) + } + } + fn handle_element_text(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> { let pipeline_id = try!(self.frame_pipeline()); @@ -798,6 +818,7 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler { WebDriverCommand::FindElement(ref parameters) => self.handle_find_element(parameters), WebDriverCommand::FindElements(ref parameters) => self.handle_find_elements(parameters), WebDriverCommand::GetActiveElement => self.handle_active_element(), + WebDriverCommand::GetElementRect(ref element) => self.handle_element_rect(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) => |