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;
+ }
+ }
+ });
});
}