mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Implement GetElementRect webdriver command
Implement the webdriver Get Element Rect command
This commit is contained in:
parent
875f1e92cc
commit
83b2388ef4
4 changed files with 67 additions and 1 deletions
|
@ -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) =>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue