Title: [239445] trunk/Source/WebDriver
Revision
239445
Author
commit-qu...@webkit.org
Date
2018-12-20 09:45:18 -0800 (Thu, 20 Dec 2018)

Log Message

WebDriver: Session::findElements should handle user prompts
https://bugs.webkit.org/show_bug.cgi?id=192928

Patch by Carlos Garcia Campos <cgar...@igalia.com> on 2018-12-20
Reviewed by Michael Catanzaro.

All user prompt tests for commands using Session::findElements are failing because of this.

* Session.cpp:
(WebDriver::Session::findElements):

Modified Paths

Diff

Modified: trunk/Source/WebDriver/ChangeLog (239444 => 239445)


--- trunk/Source/WebDriver/ChangeLog	2018-12-20 17:44:39 UTC (rev 239444)
+++ trunk/Source/WebDriver/ChangeLog	2018-12-20 17:45:18 UTC (rev 239445)
@@ -1,5 +1,17 @@
 2018-12-20  Carlos Garcia Campos  <cgar...@igalia.com>
 
+        WebDriver: Session::findElements should handle user prompts
+        https://bugs.webkit.org/show_bug.cgi?id=192928
+
+        Reviewed by Michael Catanzaro.
+
+        All user prompt tests for commands using Session::findElements are failing because of this.
+
+        * Session.cpp:
+        (WebDriver::Session::findElements):
+
+2018-12-20  Carlos Garcia Campos  <cgar...@igalia.com>
+
         [GTK] WebDriver: tests in imported/w3c/webdriver/tests/element_clear/user_prompts.py are failing
         https://bugs.webkit.org/show_bug.cgi?id=192927
 

Modified: trunk/Source/WebDriver/Session.cpp (239444 => 239445)


--- trunk/Source/WebDriver/Session.cpp	2018-12-20 17:44:39 UTC (rev 239444)
+++ trunk/Source/WebDriver/Session.cpp	2018-12-20 17:45:18 UTC (rev 239445)
@@ -983,69 +983,75 @@
         return;
     }
 
-    RefPtr<JSON::Array> arguments = JSON::Array::create();
-    arguments->pushString(JSON::Value::create(strategy)->toJSONString());
-    if (rootElementID.isEmpty())
-        arguments->pushString(JSON::Value::null()->toJSONString());
-    else
-        arguments->pushString(createElement(rootElementID)->toJSONString());
-    arguments->pushString(JSON::Value::create(selector)->toJSONString());
-    arguments->pushString(JSON::Value::create(mode == FindElementsMode::Single)->toJSONString());
-    arguments->pushString(JSON::Value::create(m_implicitWaitTimeout.milliseconds())->toJSONString());
-
-    RefPtr<JSON::Object> parameters = JSON::Object::create();
-    parameters->setString("browsingContextHandle"_s, m_toplevelBrowsingContext.value());
-    if (m_currentBrowsingContext)
-        parameters->setString("frameHandle"_s, m_currentBrowsingContext.value());
-    parameters->setString("function"_s, FindNodesJavaScript);
-    parameters->setArray("arguments"_s, WTFMove(arguments));
-    parameters->setBoolean("expectsImplicitCallbackArgument"_s, true);
-    // If there's an implicit wait, use one second more as callback timeout.
-    if (m_implicitWaitTimeout)
-        parameters->setInteger("callbackTimeout"_s, Seconds(m_implicitWaitTimeout + 1_s).millisecondsAs<int>());
-
-    m_host->sendCommandToBackend("evaluateJavaScriptFunction"_s, WTFMove(parameters), [this, protectedThis = makeRef(*this), mode, completionHandler = WTFMove(completionHandler)](SessionHost::CommandResponse&& response) {
-        if (response.isError || !response.responseObject) {
-            completionHandler(CommandResult::fail(WTFMove(response.responseObject)));
+    handleUserPrompts([this, strategy, selector, mode, rootElementID, completionHandler = WTFMove(completionHandler)](CommandResult&& result) mutable {
+        if (result.isError()) {
+            completionHandler(WTFMove(result));
             return;
         }
-        String valueString;
-        if (!response.responseObject->getString("result"_s, valueString)) {
-            completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError));
-            return;
-        }
-        RefPtr<JSON::Value> resultValue;
-        if (!JSON::Value::parseJSON(valueString, resultValue)) {
-            completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError));
-            return;
-        }
+        RefPtr<JSON::Array> arguments = JSON::Array::create();
+        arguments->pushString(JSON::Value::create(strategy)->toJSONString());
+        if (rootElementID.isEmpty())
+            arguments->pushString(JSON::Value::null()->toJSONString());
+        else
+            arguments->pushString(createElement(rootElementID)->toJSONString());
+        arguments->pushString(JSON::Value::create(selector)->toJSONString());
+        arguments->pushString(JSON::Value::create(mode == FindElementsMode::Single)->toJSONString());
+        arguments->pushString(JSON::Value::create(m_implicitWaitTimeout.milliseconds())->toJSONString());
 
-        switch (mode) {
-        case FindElementsMode::Single: {
-            RefPtr<JSON::Object> elementObject = createElement(WTFMove(resultValue));
-            if (!elementObject) {
-                completionHandler(CommandResult::fail(CommandResult::ErrorCode::NoSuchElement));
+        RefPtr<JSON::Object> parameters = JSON::Object::create();
+        parameters->setString("browsingContextHandle"_s, m_toplevelBrowsingContext.value());
+        if (m_currentBrowsingContext)
+            parameters->setString("frameHandle"_s, m_currentBrowsingContext.value());
+        parameters->setString("function"_s, FindNodesJavaScript);
+        parameters->setArray("arguments"_s, WTFMove(arguments));
+        parameters->setBoolean("expectsImplicitCallbackArgument"_s, true);
+        // If there's an implicit wait, use one second more as callback timeout.
+        if (m_implicitWaitTimeout)
+            parameters->setInteger("callbackTimeout"_s, Seconds(m_implicitWaitTimeout + 1_s).millisecondsAs<int>());
+
+        m_host->sendCommandToBackend("evaluateJavaScriptFunction"_s, WTFMove(parameters), [this, protectedThis = makeRef(*this), mode, completionHandler = WTFMove(completionHandler)](SessionHost::CommandResponse&& response) {
+            if (response.isError || !response.responseObject) {
+                completionHandler(CommandResult::fail(WTFMove(response.responseObject)));
                 return;
             }
-            completionHandler(CommandResult::success(WTFMove(elementObject)));
-            break;
-        }
-        case FindElementsMode::Multiple: {
-            RefPtr<JSON::Array> elementsArray;
-            if (!resultValue->asArray(elementsArray)) {
-                completionHandler(CommandResult::fail(CommandResult::ErrorCode::NoSuchElement));
+            String valueString;
+            if (!response.responseObject->getString("result"_s, valueString)) {
+                completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError));
                 return;
             }
-            RefPtr<JSON::Array> elementObjectsArray = JSON::Array::create();
-            unsigned elementsArrayLength = elementsArray->length();
-            for (unsigned i = 0; i < elementsArrayLength; ++i) {
-                if (auto elementObject = createElement(elementsArray->get(i)))
-                    elementObjectsArray->pushObject(WTFMove(elementObject));
+            RefPtr<JSON::Value> resultValue;
+            if (!JSON::Value::parseJSON(valueString, resultValue)) {
+                completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError));
+                return;
             }
-            completionHandler(CommandResult::success(WTFMove(elementObjectsArray)));
-            break;
-        }
-        }
+
+            switch (mode) {
+            case FindElementsMode::Single: {
+                RefPtr<JSON::Object> elementObject = createElement(WTFMove(resultValue));
+                if (!elementObject) {
+                    completionHandler(CommandResult::fail(CommandResult::ErrorCode::NoSuchElement));
+                    return;
+                }
+                completionHandler(CommandResult::success(WTFMove(elementObject)));
+                break;
+            }
+            case FindElementsMode::Multiple: {
+                RefPtr<JSON::Array> elementsArray;
+                if (!resultValue->asArray(elementsArray)) {
+                    completionHandler(CommandResult::fail(CommandResult::ErrorCode::NoSuchElement));
+                    return;
+                }
+                RefPtr<JSON::Array> elementObjectsArray = JSON::Array::create();
+                unsigned elementsArrayLength = elementsArray->length();
+                for (unsigned i = 0; i < elementsArrayLength; ++i) {
+                    if (auto elementObject = createElement(elementsArray->get(i)))
+                        elementObjectsArray->pushObject(WTFMove(elementObject));
+                }
+                completionHandler(CommandResult::success(WTFMove(elementObjectsArray)));
+                break;
+            }
+            }
+        });
     });
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to