diff --git a/Userland/Libraries/LibWeb/WebDriver/ElementReference.cpp b/Userland/Libraries/LibWeb/WebDriver/ElementReference.cpp index b927d0a61b5..05f8e7aaadd 100644 --- a/Userland/Libraries/LibWeb/WebDriver/ElementReference.cpp +++ b/Userland/Libraries/LibWeb/WebDriver/ElementReference.cpp @@ -64,7 +64,7 @@ ErrorOr, WebDriver::Error> deserialize_web_e auto reference = extract_web_element_reference(object); // 3. Let element be the result of trying to get a known element with session and reference. - auto* element = TRY(get_known_connected_element(reference)); + auto element = TRY(get_known_connected_element(reference)); // 4. Return success with data element. return *element; @@ -90,14 +90,14 @@ ErrorOr, Web::WebDriver::Error> get_web_elem // 1. Assert: browsing context is the current browsing context. // 2. Let element be equal to the result of trying to get a known element with session and origin. - auto* element = TRY(get_known_connected_element(origin)); + auto element = TRY(get_known_connected_element(origin)); // 3. Return success with data element. - return *element; + return element; } // https://w3c.github.io/webdriver/#dfn-get-a-known-element -ErrorOr get_known_connected_element(StringView element_id) +ErrorOr, Web::WebDriver::Error> get_known_connected_element(StringView element_id) { // NOTE: The whole concept of "connected elements" is not implemented yet. See get_or_create_a_web_element_reference(). // For now the element is only represented by its ID. @@ -120,7 +120,7 @@ ErrorOr get_known_connected_element(S return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::StaleElementReference, ByteString::formatted("Element with ID: {} is stale", element_id)); // 5. Return success with data node. - return static_cast(node); + return static_cast(*node); } // https://w3c.github.io/webdriver/#dfn-is-stale @@ -283,7 +283,7 @@ JsonObject shadow_root_reference_object(Web::DOM::ShadowRoot const& shadow_root) } // https://w3c.github.io/webdriver/#dfn-get-a-known-shadow-root -ErrorOr get_known_shadow_root(StringView shadow_id) +ErrorOr, Web::WebDriver::Error> get_known_shadow_root(StringView shadow_id) { // NOTE: The whole concept of "known shadow roots" is not implemented yet. See get_or_create_a_shadow_root_reference(). // For now the shadow root is only represented by its ID. @@ -296,7 +296,7 @@ ErrorOr get_known_shadow_root(Stri if (!node || !node->is_shadow_root()) return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchElement, ByteString::formatted("Could not find shadow root with ID: {}", shadow_id)); - return static_cast(node); + return static_cast(*node); } // https://w3c.github.io/webdriver/#dfn-center-point diff --git a/Userland/Libraries/LibWeb/WebDriver/ElementReference.h b/Userland/Libraries/LibWeb/WebDriver/ElementReference.h index 04f4b0fec85..ed38ef4e989 100644 --- a/Userland/Libraries/LibWeb/WebDriver/ElementReference.h +++ b/Userland/Libraries/LibWeb/WebDriver/ElementReference.h @@ -22,7 +22,7 @@ ErrorOr, WebDriver::Error> deserialize_web_e ByteString extract_web_element_reference(JsonObject const&); bool represents_a_web_element(JsonValue const& value); ErrorOr, Web::WebDriver::Error> get_web_element_origin(StringView origin); -ErrorOr get_known_connected_element(StringView element_id); +ErrorOr, Web::WebDriver::Error> get_known_connected_element(StringView element_id); bool is_element_stale(Web::DOM::Node const& element); bool is_element_interactable(Web::HTML::BrowsingContext const&, Web::DOM::Element const&); @@ -36,7 +36,7 @@ bool is_element_non_typeable_form_control(Web::DOM::Element const&); ByteString get_or_create_a_shadow_root_reference(Web::DOM::ShadowRoot const& shadow_root); JsonObject shadow_root_reference_object(Web::DOM::ShadowRoot const& shadow_root); -ErrorOr get_known_shadow_root(StringView shadow_id); +ErrorOr, Web::WebDriver::Error> get_known_shadow_root(StringView shadow_id); CSSPixelPoint in_view_center_point(DOM::Element const& element, CSSPixelRect viewport); diff --git a/Userland/Services/WebContent/WebDriverConnection.cpp b/Userland/Services/WebContent/WebDriverConnection.cpp index e1661fb9edf..9d145f0baf4 100644 --- a/Userland/Services/WebContent/WebDriverConnection.cpp +++ b/Userland/Services/WebContent/WebDriverConnection.cpp @@ -543,11 +543,11 @@ Messages::WebDriverClient::SwitchToFrameResponse WebDriverConnection::switch_to_ TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known element with session and id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. If element is not a frame or iframe element, return error with error code no such frame. - bool is_frame = is(element); - bool is_iframe = is(element); + bool is_frame = is(*element); + bool is_iframe = is(*element); if (!is_frame && !is_iframe) return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchFrame, "element is not a frame"sv); @@ -808,7 +808,7 @@ Messages::WebDriverClient::FindElementResponse WebDriverConnection::find_element if (!start_node) return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchElement, "document element does not exist"sv); - return start_node; + return *start_node; }; // 9. Let result be the result of trying to Find with start node, location strategy, and selector. @@ -850,7 +850,7 @@ Messages::WebDriverClient::FindElementsResponse WebDriverConnection::find_elemen if (!start_node) return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchElement, "document element does not exist"sv); - return start_node; + return *start_node; }; // 9. Return the result of trying to Find with start node, location strategy, and selector. @@ -1019,7 +1019,7 @@ Messages::WebDriverClient::GetElementShadowRootResponse WebDriverConnection::get TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let shadow root be element's shadow root. auto shadow_root = element->shadow_root(); @@ -1045,7 +1045,7 @@ Messages::WebDriverClient::IsElementSelectedResponse WebDriverConnection::is_ele TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let selected be the value corresponding to the first matching statement: bool selected = false; @@ -1081,7 +1081,7 @@ Messages::WebDriverClient::GetElementAttributeResponse WebDriverConnection::get_ TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let result be the result of the first matching condition: Optional result; @@ -1115,7 +1115,7 @@ Messages::WebDriverClient::GetElementPropertyResponse WebDriverConnection::get_e TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); Optional result; @@ -1148,7 +1148,7 @@ Messages::WebDriverClient::GetElementCssValueResponse WebDriverConnection::get_e TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let computed value be the result of the first matching condition: ByteString computed_value; @@ -1181,7 +1181,7 @@ Messages::WebDriverClient::GetElementTextResponse WebDriverConnection::get_eleme TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let rendered text be the result of performing implementation-specific steps whose result is exactly the same as the result of a Function.[[Call]](null, element) with bot.dom.getVisibleText as the this value. auto rendered_text = element->text_content(); @@ -1200,7 +1200,7 @@ Messages::WebDriverClient::GetElementTagNameResponse WebDriverConnection::get_el TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let qualified name be the result of getting element’s tagName IDL attribute. auto qualified_name = element->tag_name(); @@ -1219,7 +1219,7 @@ Messages::WebDriverClient::GetElementRectResponse WebDriverConnection::get_eleme TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Calculate the absolute position of element and let it be coordinates. // 5. Let rect be element’s bounding rectangle. @@ -1250,7 +1250,7 @@ Messages::WebDriverClient::IsElementEnabledResponse WebDriverConnection::is_elem TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let enabled be a boolean initially set to true if the current browsing context’s active document’s type is not "xml". // 5. Otherwise, let enabled to false and jump to the last step of this algorithm. @@ -1276,7 +1276,7 @@ Messages::WebDriverClient::GetComputedRoleResponse WebDriverConnection::get_comp TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let role be the result of computing the WAI-ARIA role of element. auto role = element->role_or_default(); @@ -1297,7 +1297,7 @@ Messages::WebDriverClient::GetComputedLabelResponse WebDriverConnection::get_com TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Let label be the result of a Accessible Name and Description Computation for the Accessible Name of the element. auto label = element->accessible_name(element->document()).release_value_but_fixme_should_propagate_errors(); @@ -1316,7 +1316,7 @@ Messages::WebDriverClient::ElementClickResponse WebDriverConnection::element_cli TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known element with element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. If the element is an input element in the file upload state return error with error code invalid argument. if (is(*element)) { @@ -1539,7 +1539,7 @@ Messages::WebDriverClient::ElementClearResponse WebDriverConnection::element_cle TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known element with session and element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. If element is not editable, return an error with error code invalid element state. if (!Web::WebDriver::is_element_editable(*element)) @@ -1595,7 +1595,7 @@ Messages::WebDriverClient::ElementSendKeysResponse WebDriverConnection::element_ TRY(handle_any_user_prompts()); // 5. Let element be the result of trying to get a known element with session and URL variables[element id]. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 6. Let file be true if element is input element in the file upload state, or false otherwise. auto file = is(*element) && static_cast(*element).type_state() == Web::HTML::HTMLInputElement::TypeAttributeState::FileUpload; @@ -2236,7 +2236,7 @@ Messages::WebDriverClient::TakeElementScreenshotResponse WebDriverConnection::ta TRY(handle_any_user_prompts()); // 3. Let element be the result of trying to get a known connected element with url variable element id. - auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id)); + auto element = TRY(Web::WebDriver::get_known_connected_element(element_id)); // 4. Scroll into view the element. (void)scroll_element_into_view(*element); diff --git a/Userland/Services/WebContent/WebDriverConnection.h b/Userland/Services/WebContent/WebDriverConnection.h index 4057551bb82..f20ac72dcc3 100644 --- a/Userland/Services/WebContent/WebDriverConnection.h +++ b/Userland/Services/WebContent/WebDriverConnection.h @@ -124,7 +124,7 @@ private: Gfx::IntPoint calculate_absolute_position_of_element(JS::NonnullGCPtr rect); Gfx::IntRect calculate_absolute_rect_of_element(Web::DOM::Element const& element); - using StartNodeGetter = Function()>; + using StartNodeGetter = Function, Web::WebDriver::Error>()>; ErrorOr find(StartNodeGetter&& start_node_getter, Web::WebDriver::LocationStrategy using_, StringView value); struct ScriptArguments {