Browse Source

LibWeb: Form the correct representation of a WebDriver element reference

We are currently returning a JSON object of the form:

    {
        "name": "element-6066-11e4-a52e-4f735466cecf",
        "value": "foo"
    }

Instead, we are expected to return an object of the form:

    {
        "element-6066-11e4-a52e-4f735466cecf": "foo"
    }
Timothy Flynn 9 months ago
parent
commit
157d41bb0d

+ 8 - 10
Userland/Libraries/LibWeb/WebDriver/ElementReference.cpp

@@ -40,23 +40,22 @@ JsonObject web_element_reference_object(Web::DOM::Node const& element)
 
 
     // 3. Return a JSON Object initialized with a property with name identifier and value reference.
     // 3. Return a JSON Object initialized with a property with name identifier and value reference.
     JsonObject object;
     JsonObject object;
-    object.set("name"sv, identifier);
-    object.set("value"sv, reference);
+    object.set(identifier, reference);
     return object;
     return object;
 }
 }
 
 
+ByteString extract_web_element_reference(JsonObject const& object)
+{
+    return object.get_byte_string(web_element_identifier).release_value();
+}
+
 // https://w3c.github.io/webdriver/#dfn-represents-a-web-element
 // https://w3c.github.io/webdriver/#dfn-represents-a-web-element
 bool represents_a_web_element(JsonValue const& value)
 bool represents_a_web_element(JsonValue const& value)
 {
 {
     // An ECMAScript Object represents a web element if it has a web element identifier own property.
     // An ECMAScript Object represents a web element if it has a web element identifier own property.
     if (!value.is_object())
     if (!value.is_object())
         return false;
         return false;
-
-    auto const& object = value.as_object();
-    if (!object.has_string("name"sv) || !object.has_string("value"sv))
-        return false;
-
-    return object.get_byte_string("name"sv) == web_element_identifier;
+    return value.as_object().has_string(web_element_identifier);
 }
 }
 
 
 // https://w3c.github.io/webdriver/#dfn-get-a-known-connected-element
 // https://w3c.github.io/webdriver/#dfn-get-a-known-connected-element
@@ -105,8 +104,7 @@ JsonObject shadow_root_reference_object(Web::DOM::ShadowRoot const& shadow_root)
 
 
     // 3. Return a JSON Object initialized with a property with name identifier and value reference.
     // 3. Return a JSON Object initialized with a property with name identifier and value reference.
     JsonObject object;
     JsonObject object;
-    object.set("name"sv, identifier);
-    object.set("value"sv, reference);
+    object.set(identifier, reference);
     return object;
     return object;
 }
 }
 
 

+ 1 - 0
Userland/Libraries/LibWeb/WebDriver/ElementReference.h

@@ -16,6 +16,7 @@ namespace Web::WebDriver {
 
 
 ByteString get_or_create_a_web_element_reference(Web::DOM::Node const& element);
 ByteString get_or_create_a_web_element_reference(Web::DOM::Node const& element);
 JsonObject web_element_reference_object(Web::DOM::Node const& element);
 JsonObject web_element_reference_object(Web::DOM::Node const& element);
+ByteString extract_web_element_reference(JsonObject const&);
 bool represents_a_web_element(JsonValue const& value);
 bool represents_a_web_element(JsonValue const& value);
 ErrorOr<Web::DOM::Element*, Web::WebDriver::Error> get_known_connected_element(StringView element_id);
 ErrorOr<Web::DOM::Element*, Web::WebDriver::Error> get_known_connected_element(StringView element_id);
 bool is_element_stale(Web::DOM::Node const& element);
 bool is_element_stale(Web::DOM::Node const& element);

+ 1 - 1
Userland/Services/WebContent/WebDriverConnection.cpp

@@ -550,7 +550,7 @@ Messages::WebDriverClient::SwitchToFrameResponse WebDriverConnection::switch_to_
 
 
     // -> id represents a web element
     // -> id represents a web element
     else if (id.is_object()) {
     else if (id.is_object()) {
-        auto element_id = id.as_object().get_byte_string("value"sv).release_value();
+        auto element_id = Web::WebDriver::extract_web_element_reference(id.as_object());
 
 
         // 1. If session's current browsing context is no longer open, return error with error code no such window.
         // 1. If session's current browsing context is no longer open, return error with error code no such window.
         TRY(ensure_current_browsing_context_is_open());
         TRY(ensure_current_browsing_context_is_open());