mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
[WebDriver] Properly report error for find_element
& find_elements
; Get correct visible text when matching links (#37452)
1. Properly report new types of errors for `find_element` and `find_elements`. Previously never reported. 1.1. `InvalidSelector` 1.2. `NoSuchElement` 1.3. `InvalidArgument` 2. Get the visible text for `<a>` correctly in `script::webdriver_handler` so that matching would work. Testing: `./mach test-wpt -r --log-raw "D:\servo test log\all.txt" webdriver/tests/classic/find_element/find.py webdriver/tests/classic/find_elements/find.py --product servodriver` --------- Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
This commit is contained in:
parent
62b078dd62
commit
f8f7c6ebd1
5 changed files with 138 additions and 122 deletions
|
@ -929,10 +929,15 @@ impl Handler {
|
|||
)))
|
||||
}
|
||||
|
||||
/// <https://w3c.github.io/webdriver/#find-element>
|
||||
fn handle_find_element(
|
||||
&self,
|
||||
parameters: &LocatorParameters,
|
||||
) -> WebDriverResult<WebDriverResponse> {
|
||||
// Step 4. If selector is undefined, return error with error code invalid argument.
|
||||
if parameters.value.is_empty() {
|
||||
return Err(WebDriverError::new(ErrorStatus::InvalidArgument, ""));
|
||||
}
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
|
||||
match parameters.using {
|
||||
|
@ -961,12 +966,15 @@ impl Handler {
|
|||
},
|
||||
}
|
||||
|
||||
// Step 10. If result is empty, return error with error code no such element.
|
||||
// Otherwise, return the first element of result.
|
||||
match wait_for_script_response(receiver)? {
|
||||
Ok(value) => {
|
||||
let value_resp = serde_json::to_value(
|
||||
value.map(|x| serde_json::to_value(WebElement(x)).unwrap()),
|
||||
)?;
|
||||
Ok(WebDriverResponse::Generic(ValueResponse(value_resp)))
|
||||
Ok(value) => match value {
|
||||
Some(value) => {
|
||||
let value_resp = serde_json::to_value(WebElement(value)).unwrap();
|
||||
Ok(WebDriverResponse::Generic(ValueResponse(value_resp)))
|
||||
},
|
||||
None => Err(WebDriverError::new(ErrorStatus::NoSuchElement, "")),
|
||||
},
|
||||
Err(error) => Err(WebDriverError::new(error, "")),
|
||||
}
|
||||
|
@ -1121,13 +1129,16 @@ impl Handler {
|
|||
}
|
||||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#find-elements
|
||||
/// <https://w3c.github.io/webdriver/#find-elements>
|
||||
fn handle_find_elements(
|
||||
&self,
|
||||
parameters: &LocatorParameters,
|
||||
) -> WebDriverResult<WebDriverResponse> {
|
||||
// Step 4. If selector is undefined, return error with error code invalid argument.
|
||||
if parameters.value.is_empty() {
|
||||
return Err(WebDriverError::new(ErrorStatus::InvalidArgument, ""));
|
||||
}
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
|
||||
match parameters.using {
|
||||
LocatorStrategy::CSSSelector => {
|
||||
let cmd = WebDriverScriptCommand::FindElementsCSS(parameters.value.clone(), sender);
|
||||
|
@ -1156,10 +1167,7 @@ impl Handler {
|
|||
|
||||
match wait_for_script_response(receiver)? {
|
||||
Ok(value) => {
|
||||
let resp_value: Vec<Value> = value
|
||||
.into_iter()
|
||||
.map(|x| serde_json::to_value(WebElement(x)).unwrap())
|
||||
.collect();
|
||||
let resp_value: Vec<WebElement> = value.into_iter().map(WebElement).collect();
|
||||
Ok(WebDriverResponse::Generic(ValueResponse(
|
||||
serde_json::to_value(resp_value)?,
|
||||
)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue