From 5d42ab05fbcf03a05f0bf2c0a50a378441a3ca2e Mon Sep 17 00:00:00 2001 From: Euclid Ye Date: Sun, 15 Jun 2025 13:17:59 +0800 Subject: [PATCH] [WebDriver] Improve get active element (#37425) Report `NoSuchElement` if the active element is null, according to spec. Testing: `./mach test-wpt -r --log-raw "D:\servo test log\all.txt" .\tests\wpt\tests\webdriver\tests\classic\get_active_element --product servodriver` Partly fixes: #37420. We can pass `get_active_element` test once #37424 is done. Signed-off-by: Euclid Ye --- components/webdriver_server/lib.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index c2df2d100a8..c9d27fe7574 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -1330,15 +1330,26 @@ impl Handler { } } + /// fn handle_active_element(&self) -> WebDriverResult { let (sender, receiver) = ipc::channel().unwrap(); let cmd = WebDriverScriptCommand::GetActiveElement(sender); self.browsing_context_script_command(cmd)?; let value = wait_for_script_response(receiver)? .map(|x| serde_json::to_value(WebElement(x)).unwrap()); - Ok(WebDriverResponse::Generic(ValueResponse( - serde_json::to_value(value)?, - ))) + // Step 4. If active element is a non-null element, return success + // with data set to web element reference object for session and active element. + // Otherwise, return error with error code no such element. + if value.is_some() { + Ok(WebDriverResponse::Generic(ValueResponse( + serde_json::to_value(value)?, + ))) + } else { + Err(WebDriverError::new( + ErrorStatus::NoSuchElement, + "No active element found", + )) + } } fn handle_computed_role(&self, element: &WebElement) -> WebDriverResult {