diff options
-rw-r--r-- | components/script/script_thread.rs | 8 | ||||
-rw-r--r-- | components/script/webdriver_handlers.rs | 19 | ||||
-rw-r--r-- | components/script_traits/webdriver_msg.rs | 1 | ||||
-rw-r--r-- | components/webdriver_server/lib.rs | 26 | ||||
-rw-r--r-- | tests/wpt/metadata/webdriver/tests/find_element/find.py.ini | 6 |
5 files changed, 45 insertions, 15 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index ba1741ba321..6263628ea3a 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -2019,6 +2019,14 @@ impl ScriptThread { reply, ) }, + WebDriverScriptCommand::FindElementTagName(selector, reply) => { + webdriver_handlers::handle_find_element_tag_name( + &*documents, + pipeline_id, + selector, + reply, + ) + }, WebDriverScriptCommand::FindElementsCSS(selector, reply) => { webdriver_handlers::handle_find_elements_css( &*documents, diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs index 5574451bd5b..05f02cebe93 100644 --- a/components/script/webdriver_handlers.rs +++ b/components/script/webdriver_handlers.rs @@ -182,6 +182,25 @@ pub fn handle_find_element_css( reply.send(node_id).unwrap(); } +pub fn handle_find_element_tag_name( + documents: &Documents, + pipeline: PipelineId, + selector: String, + reply: IpcSender<Result<Option<String>, ()>>, +) { + let node_id = documents + .find_document(pipeline) + .ok_or(()) + .and_then(|doc| { + Ok(doc + .GetElementsByTagName(DOMString::from(selector)) + .elements_iter() + .next()) + }) + .map(|node| node.map(|x| x.upcast::<Node>().unique_id())); + reply.send(node_id).unwrap(); +} + pub fn handle_find_elements_css( documents: &Documents, pipeline: PipelineId, diff --git a/components/script_traits/webdriver_msg.rs b/components/script_traits/webdriver_msg.rs index 02a2190f0cd..98e99afd14c 100644 --- a/components/script_traits/webdriver_msg.rs +++ b/components/script_traits/webdriver_msg.rs @@ -25,6 +25,7 @@ pub enum WebDriverScriptCommand { ExecuteScript(String, IpcSender<WebDriverJSResult>), ExecuteAsyncScript(String, IpcSender<WebDriverJSResult>), FindElementCSS(String, IpcSender<Result<Option<String>, ()>>), + FindElementTagName(String, IpcSender<Result<Option<String>, ()>>), FindElementsCSS(String, IpcSender<Result<Vec<String>, ()>>), FindElementElementCSS(String, String, IpcSender<Result<Option<String>, ()>>), FindElementElementsCSS(String, String, IpcSender<Result<Option<String>, ()>>), diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index 4df9e0d56b6..b714520c8be 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -804,17 +804,25 @@ impl Handler { &self, parameters: &LocatorParameters, ) -> WebDriverResult<WebDriverResponse> { - if parameters.using != LocatorStrategy::CSSSelector { - return Err(WebDriverError::new( - ErrorStatus::UnsupportedOperation, - "Unsupported locator strategy", - )); - } - let (sender, receiver) = ipc::channel().unwrap(); - let cmd = WebDriverScriptCommand::FindElementCSS(parameters.value.clone(), sender); - self.browsing_context_script_command(cmd)?; + match parameters.using { + LocatorStrategy::CSSSelector => { + let cmd = WebDriverScriptCommand::FindElementCSS(parameters.value.clone(), sender); + self.browsing_context_script_command(cmd)?; + }, + LocatorStrategy::TagName => { + let cmd = + WebDriverScriptCommand::FindElementTagName(parameters.value.clone(), sender); + self.browsing_context_script_command(cmd)?; + }, + _ => { + return Err(WebDriverError::new( + ErrorStatus::UnsupportedOperation, + "Unsupported locator strategy", + )); + }, + } match receiver.recv().unwrap() { Ok(value) => { diff --git a/tests/wpt/metadata/webdriver/tests/find_element/find.py.ini b/tests/wpt/metadata/webdriver/tests/find_element/find.py.ini index e6839484fca..7bdd2a78362 100644 --- a/tests/wpt/metadata/webdriver/tests/find_element/find.py.ini +++ b/tests/wpt/metadata/webdriver/tests/find_element/find.py.ini @@ -11,9 +11,6 @@ [test_find_element_partial_link_text[<a href=#> partial link text </a>-link\]] expected: FAIL - [test_htmldocument[tag name-html\]] - expected: FAIL - [test_find_element_link_text[<a href=#>link<br>text</a>-link\ntext\]] expected: FAIL @@ -62,9 +59,6 @@ [test_find_element_partial_link_text[<a href=#>partial link text</a>-k t\]] expected: FAIL - [test_find_element[tag name-a\]] - expected: FAIL - [test_xhtml_namespace[partial link text-link text\]] expected: FAIL |