| 2018-03-05 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: Also ignore NoSuchwindow errors when waiting for navigation to complete |
| https://bugs.webkit.org/show_bug.cgi?id=183280 |
| |
| Reviewed by Brian Burg. |
| |
| We currently ignore NoSuchFrame, but navigation or previous command might have closed the window too. |
| |
| Fixes: imported/selenium/py/test/selenium/webdriver/common/window_switching_tests.py::testClickingOnAButtonThatClosesAnOpenWindowDoesNotCauseTheBrowserToHang |
| imported/selenium/py/test/selenium/webdriver/common/window_switching_tests.py::testCanCallGetWindowHandlesAfterClosingAWindow |
| |
| * Session.cpp: |
| (WebDriver::Session::waitForNavigationToComplete): Ignore NoSuchWindow errors. |
| |
| 2018-02-14 Brian Burg <bburg@apple.com> |
| |
| Web Automation: combine session commands to resize and move top-level browsing contexts |
| https://bugs.webkit.org/show_bug.cgi?id=182749 |
| <rdar://problem/37515170> |
| |
| Reviewed by Andy Estes. |
| |
| The new command can take either size or origin. Just have one session command for use by endpoints. |
| |
| * Session.cpp: |
| (WebDriver::Session::setWindowRect): |
| (WebDriver::Session::moveToplevelBrowsingContextWindow): Deleted. |
| (WebDriver::Session::resizeToplevelBrowsingContextWindow): Deleted. |
| * Session.h: |
| |
| 2018-01-30 Don Olmstead <don.olmstead@sony.com> |
| |
| [CMake] Make WTF headers copies |
| https://bugs.webkit.org/show_bug.cgi?id=182274 |
| |
| Reviewed by Alex Christensen. |
| |
| * CMakeLists.txt: |
| |
| 2018-01-29 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: evaluateJavaScriptFunction should return null when return value is undefined |
| https://bugs.webkit.org/show_bug.cgi?id=180350 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| Stop handling the empty string as a special case of evaluateJavaScriptFunction result. |
| |
| * Session.cpp: |
| (WebDriver::Session::executeScript): |
| |
| 2018-01-26 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: service hangs after a browser crash |
| https://bugs.webkit.org/show_bug.cgi?id=182170 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| This is currently happening in the GTK+ debug bot. There's a test that makes the browser crash due to an assert, |
| hanging the whole process and preventing the rest of the tests from running. When the browser crashes, we |
| correctly handle the pending requests, by completing them with an error. However, if the client tries to send |
| another command we fail to send the message to the browser and the reply is never sent to the client. In the |
| case of the tests, delete session command is sent, but never gets a reply. |
| |
| * Session.cpp: |
| (WebDriver::Session::isConnected const): Return whether the session is connected to the browser. |
| * Session.h: |
| * SessionHost.cpp: |
| (WebDriver::SessionHost::sendCommandToBackend): Pass the message ID to SessionHost::sendMessageToBackend(). |
| * SessionHost.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::deleteSession): Ignore unknown errors if the session is no longer connected. |
| * glib/SessionHostGlib.cpp: |
| (WebDriver::SessionHost::sendMessageToBackend): Handle errors when sending the command by completing the request |
| with an error. |
| |
| 2018-01-26 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: timeouts value and cookie expiry should be limited to max safe integer |
| https://bugs.webkit.org/show_bug.cgi?id=182167 |
| |
| Reviewed by Žan Doberšek. |
| |
| This changed recently in the spec, but our implementation was wrong in any case since we were limiting to |
| INT_MAX. Use valueAsNumberInRange() to ensure we get a valid double value in the given range, and then convert |
| to unsigned if it's a valid integer. |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/new_session/create_firstMatch.py::test_valid[timeouts-value10] |
| imported/w3c/webdriver/tests/sessions/new_session/create_alwaysMatch.py::test_valid[timeouts-value10] |
| |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::valueAsNumberInRange): |
| (WebDriver::unsignedValue): |
| (WebDriver::deserializeTimeouts): |
| (WebDriver::deserializeCookie): |
| |
| 2018-01-25 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: test imported/w3c/webdriver/tests/sessions/new_session/merge.py::test_merge_browserName fails |
| https://bugs.webkit.org/show_bug.cgi?id=181985 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| The problem is that we are considering a failure when the browser name doesn't match the capabilities, instead |
| of trying with the next merged capabilities. This is happening because when processing capabilities, we only |
| match the ones that we know without having to launch the browser. Browser name and version are provided by the |
| browser during the session initialization. This patch reworks the session creation to make it possible to try |
| with the next merged capabilities when matching fails after the browser is launched. |
| |
| * Session.cpp: |
| (WebDriver::Session::Session): Initialize timeouts from capabilities, because now we have the final capabilities here. |
| (WebDriver::Session::id const): Return the session ID from the SessionHost, since it's now created there. |
| (WebDriver::Session::createTopLevelBrowsingContext): Do not start the session, it has already been started a |
| this point. |
| (WebDriver::Session::createElement): Use id() instead of m_id. |
| * Session.h: |
| * SessionHost.h: |
| (WebDriver::SessionHost::sessionID const): Return the session ID. |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::matchCapabilities const): Remove the error handling, and return a boolean instead, |
| since not mathing is not an error. |
| (WebDriver::WebDriverService::processCapabilities const): Return a list of matched capabilities, instead of the |
| JSON object corresponding to the first match. |
| (WebDriver::WebDriverService::newSession): Use helper connectToBrowser(). |
| (WebDriver::WebDriverService::connectToBrowser): Create a session host for the next merged capabilities and |
| connect to the browser. |
| (WebDriver::WebDriverService::createSession): Start a new automation session. If capabilities didn't match, |
| start the process again calling connectToBrowser(), otherwise create the new session and top level. |
| * WebDriverService.h: |
| * glib/SessionHostGlib.cpp: |
| (WebDriver::matchBrowserOptions): Helper to check browser options. |
| (WebDriver::SessionHost::matchCapabilities): Use matchBrowserOptions() and return true or false instead of an |
| optional error message. |
| (WebDriver::SessionHost::startAutomationSession): Create the session ID here and notify the caller in case |
| capabilities didn't match. |
| (WebDriver::SessionHost::setTargetList): Notify that capabilities did match. |
| * gtk/WebDriverServiceGtk.cpp: |
| (WebDriver::WebDriverService::platformMatchCapability const): Make it return bool. |
| * wpe/WebDriverServiceWPE.cpp: |
| (WebDriver::WebDriverService::platformMatchCapability const): Ditto. |
| |
| 2018-01-25 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: test imported/w3c/webdriver/tests/sessions/new_session/merge.py::test_merge_platformName fails |
| https://bugs.webkit.org/show_bug.cgi?id=181984 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| Platform name is expected to be lower case, so do not compre ignoring case. |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/new_session/merge.py::test_merge_platformName |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::matchCapabilities const): |
| |
| 2018-01-23 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: several tests in imported/w3c/webdriver/tests/sessions/new_session/merge.py are failing |
| https://bugs.webkit.org/show_bug.cgi?id=180407 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| This is actually a bug in the spec, see https://github.com/w3c/webdriver/issues/1203. It seems the idea in any |
| case is that we should check all the firstMatch capabilities before matching them, and return if there's any |
| error. |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::mergeCapabilities const): |
| (WebDriver::WebDriverService::processCapabilities const): |
| |
| 2018-01-23 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: test imported/w3c/webdriver/tests/sessions/new_session/response.py::test_timeouts fails |
| https://bugs.webkit.org/show_bug.cgi?id=180412 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| Include all missing capabilities in the new session response message. |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/new_session/response.py::test_resp_capabilites |
| imported/w3c/webdriver/tests/sessions/new_session/response.py::test_resp_data |
| imported/w3c/webdriver/tests/sessions/new_session/response.py::test_timeouts |
| |
| * Session.h: |
| (WebDriver::Session::scriptTimeout const): |
| (WebDriver::Session::pageLoadTimeout const): |
| (WebDriver::Session::implicitWaitTimeout const): |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::newSession): |
| |
| 2018-01-23 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: matched capabilities should include setWindowRect |
| https://bugs.webkit.org/show_bug.cgi?id=180411 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| Handle setWindowRect in capabilities. It's always true for GTK and false for WPE. |
| |
| * Capabilities.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::parseCapabilities const): |
| (WebDriver::WebDriverService::matchCapabilities const): |
| (WebDriver::WebDriverService::newSession): |
| * gtk/WebDriverServiceGtk.cpp: |
| (WebDriver::WebDriverService::platformCapabilities): |
| * wpe/WebDriverServiceWPE.cpp: |
| (WebDriver::WebDriverService::platformCapabilities): |
| |
| 2018-01-23 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: test imported/selenium/py/test/selenium/webdriver/common/api_example_tests.py::testChangeWindowSize fails |
| https://bugs.webkit.org/show_bug.cgi?id=181728 |
| |
| Reviewed by Sergio Villar Senin. |
| |
| Due to a copy-paste error we are getting the window height using the width variable. |
| |
| Fixes: imported/selenium/py/test/selenium/webdriver/common/api_example_tests.py::testChangeWindowSize |
| imported/selenium/py/test/selenium/webdriver/common/position_and_size_tests.py::testShouldScrollPageAndGetCoordinatesOfAnElementThatIsOutOfViewPort |
| imported/w3c/webdriver/tests/get_window_rect.py::test_payload |
| imported/w3c/webdriver/tests/set_window_rect.py::test_width_height_floats |
| imported/w3c/webdriver/tests/set_window_rect.py::test_height_width |
| imported/w3c/webdriver/tests/set_window_rect.py::test_height_width_larger_than_max |
| imported/w3c/webdriver/tests/contexts/resizing_and_positioning.py::test_window_resize |
| |
| * Session.cpp: |
| (WebDriver::Session::getToplevelBrowsingContextRect): |
| |
| 2018-01-22 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement get element CSS value command |
| https://bugs.webkit.org/show_bug.cgi?id=181736 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| 13.4 Get Element CSS Value |
| https://w3c.github.io/webdriver/webdriver-spec.html#get-element-css-value |
| |
| Fixes: imported/selenium/py/test/selenium/webdriver/common/rendered_webelement_tests.py::testShouldPickUpStyleOfAnElement |
| imported/selenium/py/test/selenium/webdriver/common/rendered_webelement_tests.py::testShouldAllowInheritedStylesToBeUsed |
| |
| * Session.cpp: |
| (WebDriver::Session::getElementProperty): |
| (WebDriver::Session::getElementCSSValue): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::getElementCSSValue): |
| * WebDriverService.h: |
| |
| 2018-01-22 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| [GTK] WebDriver: test imported/w3c/webdriver/tests/sessions/new_session/response.py is crashing in the bots |
| https://bugs.webkit.org/show_bug.cgi?id=181904 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| Handle the case of failing to launch the browser. The test is actually failing because it's sending wrong |
| capabilities, the driver tries to fall back to the default driver, but since WebKit is not installed in the |
| bots, it fails to find the MiniBrowser. The test needs to be fixed, but we shouldn't crash when the browser |
| can't be spawned for whatever reason in any case. This patch handles that case and changes the boolean result of |
| connectToBrowser to be an optional error string instead. This way we can provide more detailed error message |
| when we reject the session creation because the browser failed to start. |
| |
| * SessionHost.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::newSession): |
| * glib/SessionHostGlib.cpp: |
| (WebDriver::SessionHost::connectToBrowser): |
| (WebDriver::ConnectToBrowserAsyncData::ConnectToBrowserAsyncData): |
| (WebDriver::SessionHost::launchBrowser): |
| (WebDriver::SessionHost::setupConnection): |
| |
| 2018-01-11 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement get timeouts command |
| https://bugs.webkit.org/show_bug.cgi?id=181524 |
| |
| Reviewed by Žan Doberšek. |
| |
| 8.4 Get Timeouts |
| https://w3c.github.io/webdriver/webdriver-spec.html#get-timeouts |
| |
| Also simplify the way timeouts are handled in Session. Stop using Timeouts struct, because once the session is |
| created the timeouts are no longer optional, they have a default value. Use individual members instead that are |
| initialized to their default values on construction and only overriden by capabilities or set timeouts command. |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/get_timeouts.py::test_get_timeouts |
| imported/w3c/webdriver/tests/sessions/get_timeouts.py::test_get_default_timeouts |
| imported/w3c/webdriver/tests/sessions/get_timeouts.py::test_get_new_timeouts |
| |
| * Session.cpp: |
| (WebDriver::Session::Session): |
| (WebDriver::Session::getTimeouts): |
| (WebDriver::Session::setTimeouts): |
| (WebDriver::Session::go): |
| (WebDriver::Session::back): |
| (WebDriver::Session::forward): |
| (WebDriver::Session::refresh): |
| (WebDriver::Session::findElements): |
| (WebDriver::Session::waitForNavigationToComplete): |
| (WebDriver::Session::executeScript): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::getTimeouts): |
| * WebDriverService.h: |
| |
| 2018-01-10 Zan Dobersek <zdobersek@igalia.com> |
| |
| WebDriver: deserializeTimeouts() shouldn't reject double timeout values |
| https://bugs.webkit.org/show_bug.cgi?id=181473 |
| |
| Reviewed by Carlos Garcia Campos. |
| |
| With these changes, the following tests are fixed: |
| imported/selenium/py/test/selenium/webdriver/common/executing_async_javascript_tests.py::testShouldTimeoutIfScriptDoesNotInvokeCallbackWithLongTimeout |
| imported/selenium/py/test/selenium/webdriver/common/executing_async_javascript_tests.py::testShouldDetectPageLoadsWhileWaitingOnAnAsyncScriptAndReturnAnError |
| imported/selenium/py/test/selenium/webdriver/common/executing_async_javascript_tests.py::testShouldBeAbleToExecuteAsynchronousScripts |
| imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldImplicitlyWaitForASingleElement |
| imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldStillFailToFindAnElementWhenImplicitWaitsAreEnabled |
| imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldReturnAfterFirstAttemptToFindOneAfterDisablingImplicitWaits |
| imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldImplicitlyWaitUntilAtLeastOneElementIsFoundWhenSearchingForMany |
| imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldStillFailToFindAnElemenstWhenImplicitWaitsAreEnabled |
| imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldReturnAfterFirstAttemptToFindManyAfterDisablingImplicitWaits |
| imported/selenium/py/test/selenium/webdriver/common/page_load_timeout_tests.py::testShouldTimeoutOnPageLoadTakingTooLong |
| imported/selenium/py/test/selenium/webdriver/common/page_load_timeout_tests.py::testShouldTimeoutOnPageLoadTakingTooLong |
| imported/selenium/py/test/selenium/webdriver/common/webdriverwait_tests.py::testShouldWaitOnlyAsLongAsTimeoutSpecifiedWhenImplicitWaitsAreSet |
| |
| The following two tests regress, and will be looked into separately: |
| imported/w3c/webdriver/tests/sessions/new_session/merge.py::test_merge_invalid |
| imported/w3c/webdriver/tests/sessions/new_session/merge.py::test_merge_invalid |
| |
| * WebDriverService.cpp: |
| (WebDriver::integerValue): Helper function that retrieves an integer value |
| from a given JSON::Value object, if possible. |
| (WebDriver::deserializeTimeouts): Timeout JSON value has to be converted to |
| an integer, which is allowed if the value is of either Integer or Double type. |
| Helper integerValue() function retrieves the integer value, in addition to |
| ensuring that possible double value that we convert to an integer is already |
| in integer form to begin with. |
| |
| 2017-12-15 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: add support for accept/dismiss and notify unhandled prompt behavior |
| https://bugs.webkit.org/show_bug.cgi?id=179999 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| They work as accept and dismiss, but unexpected alert open is still reported. |
| |
| 18. User Prompts |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-known-prompt-handling-approaches-table |
| |
| * Capabilities.h: Add DismissAndNotify and AcceptAndNotify to UnhandledPromptBehavior enum. |
| * Session.cpp: |
| (WebDriver::Session::handleUnexpectedAlertOpen): Move default implementation to dismissAndNotifyAlert and |
| acceptAndNotifyAlert and use dismissAndNotifyAlert by default. |
| (WebDriver::Session::dismissAndNotifyAlert): |
| (WebDriver::Session::acceptAndNotifyAlert): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::deserializeUnhandledPromptBehavior): Handle accept/dismiss and notify. |
| (WebDriver::WebDriverService::newSession): Ditto. |
| |
| 2017-12-11 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: get active element should return no such element error when there isn't an active element |
| https://bugs.webkit.org/show_bug.cgi?id=180421 |
| |
| Reviewed by Brian Burg. |
| |
| We currently return unknown error. |
| |
| Fixes: imported/w3c/webdriver/tests/element_retrieval/get_active_element.py::test_missing_document_element |
| |
| * Session.cpp: |
| (WebDriver::Session::getActiveElement): |
| |
| 2017-12-04 Brian Burg <bburg@apple.com> |
| |
| Web Automation: add flag to preserve legacy page screenshot behavior |
| https://bugs.webkit.org/show_bug.cgi?id=180313 |
| <rdar://problem/34379930> |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Set the clipToViewport flag to true when sending Automation.takeScreenshot. |
| This preserves the current behavior for this driver implementation. |
| |
| * Session.cpp: |
| (WebDriver::Session::takeScreenshot): |
| |
| 2017-12-04 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement element property command |
| https://bugs.webkit.org/show_bug.cgi?id=180244 |
| |
| Reviewed by Brian Burg. |
| |
| 13.3 Get Element Property |
| https://w3c.github.io/webdriver/webdriver-spec.html#get-element-property |
| |
| Fixes: imported/w3c/webdriver/tests/state/get_element_property.py::test_no_browsing_context |
| imported/w3c/webdriver/tests/state/get_element_property.py::test_handle_prompt_dismiss |
| imported/w3c/webdriver/tests/state/get_element_property.py::test_handle_prompt_accept |
| imported/w3c/webdriver/tests/state/get_element_property.py::test_handle_prompt_missing_value |
| imported/w3c/webdriver/tests/state/get_element_property.py::test_element_stale |
| |
| * Session.cpp: |
| (WebDriver::Session::getElementAttribute): |
| (WebDriver::Session::getElementProperty): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::getElementProperty): |
| * WebDriverService.h: |
| |
| 2017-12-02 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: handle user prompts shown while executing scripts |
| https://bugs.webkit.org/show_bug.cgi?id=179979 |
| |
| Reviewed by Brian Burg. |
| |
| 15.2 Executing Script |
| https://w3c.github.io/webdriver/webdriver-spec.html#executing-script |
| |
| The rules to execute a function body are as follows. The algorithm will return success with the JSON |
| representation of the function’s return value, or an error if the evaluation of the function results in a |
| JavaScript exception being thrown or at any point during its execution an unhandled user prompt appears. |
| |
| If at any point during the algorithm a user prompt appears, the user prompt handler must be invoked. If its |
| return value is an error, it must immediately return with that error and abort all subsequent substeps of this |
| algorithm. |
| |
| This will be covered by new WPT tests that will be available after the next upgrade. |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): Handle UnexpectedAlertOpen internal error. |
| * Session.cpp: |
| (WebDriver::Session::handleUserPrompts): Move code to handleUnexpectedAlertOpen() and call it instead. |
| (WebDriver::Session::handleUnexpectedAlertOpen): Code moved here to be used also by executeScript(). |
| (WebDriver::Session::executeScript): In case of UnexpectedAlertOpen error, call handleUnexpectedAlertOpen(). |
| * Session.h: |
| |
| 2017-12-01 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement status command |
| https://bugs.webkit.org/show_bug.cgi?id=180133 |
| |
| Reviewed by Brian Burg. |
| |
| 8.3 Status |
| https://w3c.github.io/webdriver/webdriver-spec.html#status |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/status.py::test_get_status_no_session |
| imported/w3c/webdriver/tests/sessions/status.py::test_status_with_session_running_on_endpoint_node |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::status): |
| * WebDriverService.h: |
| |
| 2017-12-01 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: end point nodes are only allowed to have one session |
| https://bugs.webkit.org/show_bug.cgi?id=180131 |
| |
| Reviewed by Brian Burg. |
| |
| We are currently keeping a map of sessions, but our service is always and end point node, so only one session |
| can exist at a time. Make findSessionOrCompleteWithError() return a boolean instead, failing in case the sessionID |
| parameter is not found or it doesn't match the current session. Replace the session map and active session |
| pointer with a single session member and return SessionNotCreated error when new session command is received and |
| there's an active session. |
| |
| 8. Sessions |
| A remote end has an associated maximum active sessions (an integer) that defines the number of active sessions |
| that are supported. This may be “unlimited” for intermediary nodes, but must be exactly one for a remote end |
| that is an endpoint node. |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-maximum-active-sessions |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/new_session/default_values.py::test_repeat_new_session |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::findSessionOrCompleteWithError): |
| (WebDriver::WebDriverService::newSession): |
| (WebDriver::WebDriverService::deleteSession): |
| (WebDriver::WebDriverService::status): |
| (WebDriver::WebDriverService::setTimeouts): |
| (WebDriver::WebDriverService::go): |
| (WebDriver::WebDriverService::getCurrentURL): |
| (WebDriver::WebDriverService::back): |
| (WebDriver::WebDriverService::forward): |
| (WebDriver::WebDriverService::refresh): |
| (WebDriver::WebDriverService::getTitle): |
| (WebDriver::WebDriverService::getWindowHandle): |
| (WebDriver::WebDriverService::setWindowRect): |
| (WebDriver::WebDriverService::closeWindow): |
| (WebDriver::WebDriverService::switchToWindow): |
| (WebDriver::WebDriverService::getWindowHandles): |
| (WebDriver::WebDriverService::switchToFrame): |
| (WebDriver::WebDriverService::switchToParentFrame): |
| (WebDriver::findStrategyAndSelectorOrCompleteWithError): |
| (WebDriver::WebDriverService::findElement): |
| (WebDriver::WebDriverService::findElements): |
| (WebDriver::WebDriverService::findElementFromElement): |
| (WebDriver::WebDriverService::findElementsFromElement): |
| (WebDriver::WebDriverService::getActiveElement): |
| (WebDriver::WebDriverService::isElementSelected): |
| (WebDriver::WebDriverService::getElementAttribute): |
| (WebDriver::WebDriverService::getElementText): |
| (WebDriver::WebDriverService::getElementTagName): |
| (WebDriver::WebDriverService::getElementRect): |
| (WebDriver::WebDriverService::isElementEnabled): |
| (WebDriver::WebDriverService::isElementDisplayed): |
| (WebDriver::WebDriverService::elementClick): |
| (WebDriver::WebDriverService::elementClear): |
| (WebDriver::WebDriverService::elementSendKeys): |
| (WebDriver::findScriptAndArgumentsOrCompleteWithError): |
| (WebDriver::WebDriverService::executeScript): |
| (WebDriver::WebDriverService::executeAsyncScript): |
| (WebDriver::WebDriverService::getAllCookies): |
| (WebDriver::WebDriverService::getNamedCookie): |
| (WebDriver::deserializeCookie): |
| (WebDriver::WebDriverService::addCookie): |
| (WebDriver::WebDriverService::deleteCookie): |
| (WebDriver::WebDriverService::deleteAllCookies): |
| (WebDriver::WebDriverService::dismissAlert): |
| (WebDriver::WebDriverService::acceptAlert): |
| (WebDriver::WebDriverService::getAlertText): |
| (WebDriver::WebDriverService::sendAlertText): |
| (WebDriver::WebDriverService::takeScreenshot): |
| (WebDriver::WebDriverService::takeElementScreenshot): |
| * WebDriverService.h: |
| |
| 2017-11-30 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: locator strategy should be validated before trying to find elements |
| https://bugs.webkit.org/show_bug.cgi?id=180187 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| We currently rely on the js atom to raise an exception in case the locator strategy is not valid, but in case of |
| find element from element, if the element doesn't exist we fail with stale element error instead of invalid |
| argument as expected. So, let's validate the strategies when parsing them, which would also avoid going to the |
| browser in cae of invalid strategy. |
| |
| Fixes: imported/w3c/webdriver/tests/retrieval/find_element_from_element.py::test_invalid_using_argument[a] |
| |
| * WebDriverService.cpp: |
| (WebDriver::isValidStrategy): |
| (WebDriver::findStrategyAndSelectorOrCompleteWithError): |
| |
| 2017-11-30 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: remove elementSubmit command |
| https://bugs.webkit.org/show_bug.cgi?id=180186 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| It's not in the spec, we had it only because selenium used it, but now it uses execute_script with custom code |
| to implement submit, so we can just remove it. |
| |
| * Session.cpp: |
| (WebDriver::Session::elementSubmit): Deleted. |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::elementSubmit): Deleted. |
| * WebDriverService.h: |
| |
| 2017-11-14 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h |
| https://bugs.webkit.org/show_bug.cgi?id=173793 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| * CMakeLists.txt: |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): |
| * CommandResult.h: |
| (WebDriver::CommandResult::success): |
| (WebDriver::CommandResult::fail): |
| (WebDriver::CommandResult::result const): |
| (WebDriver::CommandResult::setAdditionalErrorData): |
| (WebDriver::CommandResult::additionalErrorData const): |
| * Session.cpp: |
| (WebDriver::firstWindowHandleInResult): |
| (WebDriver::Session::handleUserPrompts): |
| (WebDriver::Session::reportUnexpectedAlertOpen): |
| (WebDriver::Session::go): |
| (WebDriver::Session::getCurrentURL): |
| (WebDriver::Session::back): |
| (WebDriver::Session::forward): |
| (WebDriver::Session::refresh): |
| (WebDriver::Session::getTitle): |
| (WebDriver::Session::getWindowHandle): |
| (WebDriver::Session::closeTopLevelBrowsingContext): |
| (WebDriver::Session::switchToWindow): |
| (WebDriver::Session::getWindowHandles): |
| (WebDriver::Session::switchToFrame): |
| (WebDriver::Session::switchToParentFrame): |
| (WebDriver::Session::getToplevelBrowsingContextRect): |
| (WebDriver::Session::moveToplevelBrowsingContextWindow): |
| (WebDriver::Session::resizeToplevelBrowsingContextWindow): |
| (WebDriver::Session::createElement): |
| (WebDriver::Session::extractElement): |
| (WebDriver::Session::extractElementID): |
| (WebDriver::Session::computeElementLayout): |
| (WebDriver::Session::findElements): |
| (WebDriver::Session::isElementSelected): |
| (WebDriver::Session::getElementText): |
| (WebDriver::Session::getElementTagName): |
| (WebDriver::Session::getElementRect): |
| (WebDriver::Session::isElementEnabled): |
| (WebDriver::Session::isElementDisplayed): |
| (WebDriver::Session::getElementAttribute): |
| (WebDriver::Session::waitForNavigationToComplete): |
| (WebDriver::Session::selectOptionElement): |
| (WebDriver::Session::elementClick): |
| (WebDriver::Session::elementClear): |
| (WebDriver::Session::elementSendKeys): |
| (WebDriver::Session::elementSubmit): |
| (WebDriver::Session::handleScriptResult): |
| (WebDriver::Session::executeScript): |
| (WebDriver::Session::performMouseInteraction): |
| (WebDriver::Session::performKeyboardInteractions): |
| (WebDriver::parseAutomationCookie): |
| (WebDriver::builtAutomationCookie): |
| (WebDriver::serializeCookie): |
| (WebDriver::Session::getAllCookies): |
| (WebDriver::Session::getNamedCookie): |
| (WebDriver::Session::addCookie): |
| (WebDriver::Session::deleteCookie): |
| (WebDriver::Session::deleteAllCookies): |
| (WebDriver::Session::dismissAlert): |
| (WebDriver::Session::acceptAlert): |
| (WebDriver::Session::getAlertText): |
| (WebDriver::Session::sendAlertText): |
| (WebDriver::Session::takeScreenshot): |
| * Session.h: |
| * SessionHost.cpp: |
| (WebDriver::SessionHost::sendCommandToBackend): |
| (WebDriver::SessionHost::dispatchMessage): |
| * SessionHost.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::handleRequest): |
| (WebDriver::WebDriverService::sendResponse const): |
| (WebDriver::deserializeTimeouts): |
| (WebDriver::WebDriverService::parseCapabilities const): |
| (WebDriver::WebDriverService::findSessionOrCompleteWithError): |
| (WebDriver::WebDriverService::validatedCapabilities const): |
| (WebDriver::WebDriverService::mergeCapabilities const): |
| (WebDriver::WebDriverService::matchCapabilities const): |
| (WebDriver::WebDriverService::processCapabilities const): |
| (WebDriver::WebDriverService::newSession): |
| (WebDriver::WebDriverService::deleteSession): |
| (WebDriver::WebDriverService::setTimeouts): |
| (WebDriver::WebDriverService::go): |
| (WebDriver::WebDriverService::getCurrentURL): |
| (WebDriver::WebDriverService::back): |
| (WebDriver::WebDriverService::forward): |
| (WebDriver::WebDriverService::refresh): |
| (WebDriver::WebDriverService::getTitle): |
| (WebDriver::WebDriverService::getWindowHandle): |
| (WebDriver::WebDriverService::getWindowRect): |
| (WebDriver::valueAsNumberInRange): |
| (WebDriver::WebDriverService::setWindowRect): |
| (WebDriver::WebDriverService::closeWindow): |
| (WebDriver::WebDriverService::switchToWindow): |
| (WebDriver::WebDriverService::getWindowHandles): |
| (WebDriver::WebDriverService::switchToFrame): |
| (WebDriver::WebDriverService::switchToParentFrame): |
| (WebDriver::findElementOrCompleteWithError): |
| (WebDriver::findStrategyAndSelectorOrCompleteWithError): |
| (WebDriver::WebDriverService::findElement): |
| (WebDriver::WebDriverService::findElements): |
| (WebDriver::WebDriverService::findElementFromElement): |
| (WebDriver::WebDriverService::findElementsFromElement): |
| (WebDriver::WebDriverService::isElementSelected): |
| (WebDriver::WebDriverService::getElementAttribute): |
| (WebDriver::WebDriverService::getElementText): |
| (WebDriver::WebDriverService::getElementTagName): |
| (WebDriver::WebDriverService::getElementRect): |
| (WebDriver::WebDriverService::isElementEnabled): |
| (WebDriver::WebDriverService::isElementDisplayed): |
| (WebDriver::WebDriverService::elementClick): |
| (WebDriver::WebDriverService::elementClear): |
| (WebDriver::WebDriverService::elementSendKeys): |
| (WebDriver::WebDriverService::elementSubmit): |
| (WebDriver::findScriptAndArgumentsOrCompleteWithError): |
| (WebDriver::WebDriverService::executeScript): |
| (WebDriver::WebDriverService::executeAsyncScript): |
| (WebDriver::WebDriverService::getAllCookies): |
| (WebDriver::WebDriverService::getNamedCookie): |
| (WebDriver::deserializeCookie): |
| (WebDriver::WebDriverService::addCookie): |
| (WebDriver::WebDriverService::deleteCookie): |
| (WebDriver::WebDriverService::deleteAllCookies): |
| (WebDriver::WebDriverService::dismissAlert): |
| (WebDriver::WebDriverService::acceptAlert): |
| (WebDriver::WebDriverService::getAlertText): |
| (WebDriver::WebDriverService::sendAlertText): |
| (WebDriver::WebDriverService::takeScreenshot): |
| (WebDriver::WebDriverService::takeElementScreenshot): |
| * WebDriverService.h: |
| * gtk/WebDriverServiceGtk.cpp: |
| (WebDriver::WebDriverService::platformValidateCapability const): |
| (WebDriver::WebDriverService::platformMatchCapability const): |
| (WebDriver::WebDriverService::platformParseCapabilities const): |
| * wpe/WebDriverServiceWPE.cpp: |
| (WebDriver::WebDriverService::platformValidateCapability const): |
| (WebDriver::WebDriverService::platformMatchCapability const): |
| (WebDriver::WebDriverService::platformParseCapabilities const): |
| |
| 2017-11-28 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| [GTK] WebDriver: stop making mandatory to provide a browser path if webkitgtk:browserOptions is present in capabilities |
| https://bugs.webkit.org/show_bug.cgi?id=180012 |
| |
| Reviewed by Carlos Alberto Lopez Perez. |
| |
| Everything should be optional. We might want to disable overlay scrollbars, but still using the default browser, |
| for example, as I'm doing when running the selenium tests. We might also want to provide additional browser |
| arguments, but using the default browser. |
| |
| * gtk/WebDriverServiceGtk.cpp: |
| (WebDriver::WebDriverService::platformValidateCapability const): Do not consider invalid to not provide a |
| browser binary when webkitgtk:browserOptions is present. |
| (WebDriver::WebDriverService::platformParseCapabilities const): Override default capabilities with the ones |
| provided. |
| |
| 2017-11-27 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: Implement get active element command |
| https://bugs.webkit.org/show_bug.cgi?id=180001 |
| |
| Reviewed by Brian Burg. |
| |
| 12.6 Get Active Element |
| https://w3c.github.io/webdriver/webdriver-spec.html#get-active-element |
| |
| Fixes imported/w3c/webdriver/tests/element_retrieval/get_active_element.py. |
| |
| * Session.cpp: |
| (WebDriver::Session::getActiveElement): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::getActiveElement): |
| * WebDriverService.h: |
| |
| 2017-11-21 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: do not try to parse http body if method is not POST |
| https://bugs.webkit.org/show_bug.cgi?id=179918 |
| |
| Reviewed by Darin Adler. |
| |
| As said in the spec: |
| |
| 5. If request’s method is POST: |
| |
| 1. Let parse result be the result of parsing as JSON with request’s body as the argument. If this process |
| throws an exception, return an error with error code invalid argument and jump back to step 1 in this |
| overall algorithm. |
| |
| 2. If parse result is not an Object, send an error with error code invalid argument and jump back to step 1 |
| in this overall algorithm. |
| |
| Otherwise, let parameters be parse result. |
| |
| Otherwise, let parameters be null. |
| |
| 6.3 Processing Model |
| https://w3c.github.io/webdriver/webdriver-spec.html#processing-model |
| |
| Now, w3c tests are sending null as body of delete session command (it used to be just empty), making it fail |
| with invalid argument error. |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::findCommand): |
| (WebDriver::WebDriverService::handleRequest): |
| * WebDriverService.h: |
| |
| 2017-11-21 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: crash in Session::computeElementLayout when called without a current browsing context |
| https://bugs.webkit.org/show_bug.cgi?id=179917 |
| |
| Reviewed by Darin Adler. |
| |
| In the case of computeElementLayout message, the frameHandle parameter is not optional, but we still need to |
| provide a valid value (empty string means the default frame) when m_currentBrowsingContext is std::nullopt. The |
| same applies to selectOptionElement. |
| |
| * Session.cpp: |
| (WebDriver::Session::computeElementLayout): |
| (WebDriver::Session::selectOptionElement): |
| |
| 2017-11-15 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| [WPE] Add initial support for WebDriver |
| https://bugs.webkit.org/show_bug.cgi?id=179727 |
| |
| Reviewed by Michael Catanzaro. |
| |
| Add WPE implementation for platform-specific methods. Move the version handling to a common file |
| WebDriverServiceGLib.cpp. |
| |
| * Capabilities.h: |
| * PlatformGTK.cmake: |
| * PlatformWPE.cmake: |
| * glib/WebDriverServiceGLib.cpp: Added. |
| (WebDriver::parseVersion): |
| (WebDriver::WebDriverService::platformCompareBrowserVersions): |
| * gtk/WebDriverServiceGtk.cpp: |
| * wpe/WebDriverServiceWPE.cpp: Copied from Source/WebDriver/gtk/WebDriverServiceGtk.cpp. |
| (WebDriver::WebDriverService::platformCapabilities): |
| (WebDriver::WebDriverService::platformValidateCapability const): |
| (WebDriver::WebDriverService::platformMatchCapability const): |
| (WebDriver::WebDriverService::platformParseCapabilities const): |
| |
| 2017-11-15 Ryan Haddad <ryanhaddad@apple.com> |
| |
| Unreviewed, rolling out r224863. |
| |
| Introduced LayoutTest crashes on iOS Simulator. |
| |
| Reverted changeset: |
| |
| "Move JSONValues to WTF and convert uses of InspectorValues.h |
| to JSONValues.h" |
| https://bugs.webkit.org/show_bug.cgi?id=173793 |
| https://trac.webkit.org/changeset/224863 |
| |
| 2017-11-14 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h |
| https://bugs.webkit.org/show_bug.cgi?id=173793 |
| |
| Reviewed by Brian Burg. |
| |
| * CMakeLists.txt: |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): |
| * CommandResult.h: |
| (WebDriver::CommandResult::success): |
| (WebDriver::CommandResult::fail): |
| (WebDriver::CommandResult::result const): |
| (WebDriver::CommandResult::setAdditionalErrorData): |
| (WebDriver::CommandResult::additionalErrorData const): |
| * Session.cpp: |
| (WebDriver::firstWindowHandleInResult): |
| (WebDriver::Session::handleUserPrompts): |
| (WebDriver::Session::reportUnexpectedAlertOpen): |
| (WebDriver::Session::go): |
| (WebDriver::Session::getCurrentURL): |
| (WebDriver::Session::back): |
| (WebDriver::Session::forward): |
| (WebDriver::Session::refresh): |
| (WebDriver::Session::getTitle): |
| (WebDriver::Session::getWindowHandle): |
| (WebDriver::Session::closeTopLevelBrowsingContext): |
| (WebDriver::Session::switchToWindow): |
| (WebDriver::Session::getWindowHandles): |
| (WebDriver::Session::switchToFrame): |
| (WebDriver::Session::switchToParentFrame): |
| (WebDriver::Session::getToplevelBrowsingContextRect): |
| (WebDriver::Session::moveToplevelBrowsingContextWindow): |
| (WebDriver::Session::resizeToplevelBrowsingContextWindow): |
| (WebDriver::Session::createElement): |
| (WebDriver::Session::extractElement): |
| (WebDriver::Session::extractElementID): |
| (WebDriver::Session::computeElementLayout): |
| (WebDriver::Session::findElements): |
| (WebDriver::Session::isElementSelected): |
| (WebDriver::Session::getElementText): |
| (WebDriver::Session::getElementTagName): |
| (WebDriver::Session::getElementRect): |
| (WebDriver::Session::isElementEnabled): |
| (WebDriver::Session::isElementDisplayed): |
| (WebDriver::Session::getElementAttribute): |
| (WebDriver::Session::waitForNavigationToComplete): |
| (WebDriver::Session::selectOptionElement): |
| (WebDriver::Session::elementClick): |
| (WebDriver::Session::elementClear): |
| (WebDriver::Session::elementSendKeys): |
| (WebDriver::Session::elementSubmit): |
| (WebDriver::Session::handleScriptResult): |
| (WebDriver::Session::executeScript): |
| (WebDriver::Session::performMouseInteraction): |
| (WebDriver::Session::performKeyboardInteractions): |
| (WebDriver::parseAutomationCookie): |
| (WebDriver::builtAutomationCookie): |
| (WebDriver::serializeCookie): |
| (WebDriver::Session::getAllCookies): |
| (WebDriver::Session::getNamedCookie): |
| (WebDriver::Session::addCookie): |
| (WebDriver::Session::deleteCookie): |
| (WebDriver::Session::deleteAllCookies): |
| (WebDriver::Session::dismissAlert): |
| (WebDriver::Session::acceptAlert): |
| (WebDriver::Session::getAlertText): |
| (WebDriver::Session::sendAlertText): |
| (WebDriver::Session::takeScreenshot): |
| * Session.h: |
| * SessionHost.cpp: |
| (WebDriver::SessionHost::sendCommandToBackend): |
| (WebDriver::SessionHost::dispatchMessage): |
| * SessionHost.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::handleRequest): |
| (WebDriver::WebDriverService::sendResponse const): |
| (WebDriver::deserializeTimeouts): |
| (WebDriver::WebDriverService::parseCapabilities const): |
| (WebDriver::WebDriverService::findSessionOrCompleteWithError): |
| (WebDriver::WebDriverService::validatedCapabilities const): |
| (WebDriver::WebDriverService::mergeCapabilities const): |
| (WebDriver::WebDriverService::matchCapabilities const): |
| (WebDriver::WebDriverService::processCapabilities const): |
| (WebDriver::WebDriverService::newSession): |
| (WebDriver::WebDriverService::deleteSession): |
| (WebDriver::WebDriverService::setTimeouts): |
| (WebDriver::WebDriverService::go): |
| (WebDriver::WebDriverService::getCurrentURL): |
| (WebDriver::WebDriverService::back): |
| (WebDriver::WebDriverService::forward): |
| (WebDriver::WebDriverService::refresh): |
| (WebDriver::WebDriverService::getTitle): |
| (WebDriver::WebDriverService::getWindowHandle): |
| (WebDriver::WebDriverService::getWindowRect): |
| (WebDriver::valueAsNumberInRange): |
| (WebDriver::WebDriverService::setWindowRect): |
| (WebDriver::WebDriverService::closeWindow): |
| (WebDriver::WebDriverService::switchToWindow): |
| (WebDriver::WebDriverService::getWindowHandles): |
| (WebDriver::WebDriverService::switchToFrame): |
| (WebDriver::WebDriverService::switchToParentFrame): |
| (WebDriver::findElementOrCompleteWithError): |
| (WebDriver::findStrategyAndSelectorOrCompleteWithError): |
| (WebDriver::WebDriverService::findElement): |
| (WebDriver::WebDriverService::findElements): |
| (WebDriver::WebDriverService::findElementFromElement): |
| (WebDriver::WebDriverService::findElementsFromElement): |
| (WebDriver::WebDriverService::isElementSelected): |
| (WebDriver::WebDriverService::getElementAttribute): |
| (WebDriver::WebDriverService::getElementText): |
| (WebDriver::WebDriverService::getElementTagName): |
| (WebDriver::WebDriverService::getElementRect): |
| (WebDriver::WebDriverService::isElementEnabled): |
| (WebDriver::WebDriverService::isElementDisplayed): |
| (WebDriver::WebDriverService::elementClick): |
| (WebDriver::WebDriverService::elementClear): |
| (WebDriver::WebDriverService::elementSendKeys): |
| (WebDriver::WebDriverService::elementSubmit): |
| (WebDriver::findScriptAndArgumentsOrCompleteWithError): |
| (WebDriver::WebDriverService::executeScript): |
| (WebDriver::WebDriverService::executeAsyncScript): |
| (WebDriver::WebDriverService::getAllCookies): |
| (WebDriver::WebDriverService::getNamedCookie): |
| (WebDriver::deserializeCookie): |
| (WebDriver::WebDriverService::addCookie): |
| (WebDriver::WebDriverService::deleteCookie): |
| (WebDriver::WebDriverService::deleteAllCookies): |
| (WebDriver::WebDriverService::dismissAlert): |
| (WebDriver::WebDriverService::acceptAlert): |
| (WebDriver::WebDriverService::getAlertText): |
| (WebDriver::WebDriverService::sendAlertText): |
| (WebDriver::WebDriverService::takeScreenshot): |
| (WebDriver::WebDriverService::takeElementScreenshot): |
| * WebDriverService.h: |
| * gtk/WebDriverServiceGtk.cpp: |
| (WebDriver::WebDriverService::platformValidateCapability const): |
| (WebDriver::WebDriverService::platformMatchCapability const): |
| (WebDriver::WebDriverService::platformParseCapabilities const): |
| |
| 2017-11-07 Brian Burg <bburg@apple.com> |
| |
| Web Automation: inViewCenterPoint should not include topContentInset when computed in viewport coordinates |
| https://bugs.webkit.org/show_bug.cgi?id=179129 |
| <rdar://problem/35297038> |
| |
| Reviewed by Simon Fraser. |
| |
| Adjust code to use the proper coordinate system when requesting element layout. |
| |
| * Session.cpp: |
| (WebDriver::Session::computeElementLayout): |
| |
| 2017-11-09 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: WebDriverService::matchCapabilities should follow the spec |
| https://bugs.webkit.org/show_bug.cgi?id=179371 |
| |
| Reviewed by Brian Burg. |
| |
| The returned object should contain all the entries mentioned in the spec, not only the ones already present in |
| the passed in capabilities object. |
| |
| 7.2 Processing Capabilities |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-matching-capabilities |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::matchCapabilities const): |
| (WebDriver::WebDriverService::processCapabilities const): |
| * WebDriverService.h: |
| |
| 2017-11-09 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: capabilities with null value shouldn't be added to the validated capabilities object |
| https://bugs.webkit.org/show_bug.cgi?id=179369 |
| |
| Reviewed by Brian Burg. |
| |
| "4. If deserialized is not null, set a property on result with name name and value deserialized." |
| |
| 7.2 Processing Capabilities |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-validate-capabilities |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/new_session/create_firstMatch.py::test_valid[platformName-None] |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::validatedCapabilities const): |
| |
| 2017-10-27 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: unknown capabilities should produce an InvalidArgument error when validating capabilities |
| https://bugs.webkit.org/show_bug.cgi?id=178868 |
| |
| Reviewed by Brian Burg. |
| |
| 7.2 Processing Capabilities |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-validate-capabilities |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_extensions |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::validatedCapabilities const): |
| |
| 2017-10-27 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: deserializeTimeouts should fail if the value is not integer |
| https://bugs.webkit.org/show_bug.cgi?id=178866 |
| |
| Reviewed by Brian Burg. |
| |
| If value is not an integer, or it is less than 0 or greater than 2^64 – 1, return error with error code invalid |
| argument. |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-deserialize-as-a-timeout |
| |
| Fixes: imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_values[timeouts-value59-body0] |
| imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_values[timeouts-value59-body1] |
| |
| * WebDriverService.cpp: |
| (WebDriver::deserializeTimeouts): |
| |
| 2017-10-27 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: failing to process capabilities should produce InvalidArgument error not SessionNotCreated |
| https://bugs.webkit.org/show_bug.cgi?id=178864 |
| |
| Reviewed by Brian Burg. |
| |
| Fixes most of the tests in imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py. |
| |
| 7.2 Processing Capabilities |
| https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::processCapabilities const): |
| |
| 2017-10-10 Sam Weinig <sam@webkit.org> |
| |
| Replace copyKeysToVector/copyValuesToVector with copyToVector(map.keys())/copyToVector(map.values()) |
| https://bugs.webkit.org/show_bug.cgi?id=178102 |
| |
| Reviewed by Tim Horton. |
| |
| * SessionHost.cpp: |
| (WebDriver::SessionHost::inspectorDisconnected): |
| |
| 2017-10-02 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: HTTP status code is not correct for some of the errors |
| https://bugs.webkit.org/show_bug.cgi?id=177354 |
| |
| Reviewed by Brian Burg. |
| |
| I think this changed in the spec at some point. The thing is that no such alert, frame and window and stale |
| element reference errors should return 404 instead of 400. |
| |
| https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::httpStatusCode const): |
| |
| 2017-09-19 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: Implement commands to get and set the window rect |
| https://bugs.webkit.org/show_bug.cgi?id=177134 |
| |
| Reviewed by Brian Burg. |
| |
| We are currently implementing the selenium legacy ones, we should implement the w3c ones instead. |
| |
| https://w3c.github.io/webdriver/webdriver-spec.html#resizing-and-positioning-windows |
| |
| * Session.cpp: |
| (WebDriver::Session::getToplevelBrowsingContextRect): Helper to get the window rect. This is used by both get |
| and set window rect commands. |
| (WebDriver::Session::moveToplevelBrowsingContextwindow): Helper to ask automation to move the window. |
| (WebDriver::Session::resizeToplevelBrowsingContextwindow): Helper to ask automation to resize the window. |
| (WebDriver::Session::getWindowRect): Handle prompts and then call getToplevelBrowsingContextRect(). |
| (WebDriver::Session::setWindowRect): Handle prompts and then move and resize the window according to the given |
| parameters and finish the operation calling getToplevelBrowsingContextRect(). |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::getWindowRect): Ask the session to get the window rect. |
| (WebDriver::valueAsNumberInRange): Helper to check a value is a valid number in the given range. |
| (WebDriver::WebDriverService::setWindowRect): Get and check size and position from parameters and then ask the |
| session to set the window rect. |
| * WebDriverService.h: |
| |
| 2017-09-19 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: wrong response in case of errors |
| https://bugs.webkit.org/show_bug.cgi?id=177127 |
| |
| Reviewed by Brian Burg. |
| |
| I misunderstood the spec when I implemented this, so we either return a "value" key with the result in case of |
| success or the error object as the body in case of error. We should always add a "value" key to the body and set |
| it with either the result or the error object. |
| |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-send-an-error |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::sendResponse const): |
| |
| 2017-09-18 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: wrong key name for capabilities in new session response |
| https://bugs.webkit.org/show_bug.cgi?id=177074 |
| |
| Reviewed by Brian Burg. |
| |
| We are using "value", it should be "capabilities". |
| https://w3c.github.io/webdriver/webdriver-spec.html#new-session |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::newSession): |
| |
| 2017-09-18 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: HTTP responses should include Cache-Control header with no-cache value |
| https://bugs.webkit.org/show_bug.cgi?id=177073 |
| |
| Reviewed by Sergio Villar Senin. |
| |
| 6.3 Processing Model. |
| Set the response’s header with name and value with the following values: |
| |
| Content-Type "application/json; charset=utf-8" |
| Cache-Control "no-cache" |
| |
| https://w3c.github.io/webdriver/webdriver-spec.html#dfn-send-a-response |
| |
| We were setting the Content-Type, but not the Cache-Control. This is checked by all WPT WebDriver tests. |
| |
| * soup/HTTPServerSoup.cpp: |
| (WebDriver::HTTPServer::listen): Add Cache-Control header. |
| |
| 2017-09-18 Michael Catanzaro <mcatanzaro@igalia.com> |
| |
| [CMake] Rename WebKit target to WebKitLegacy and rename WebKit2 target to WebKit |
| https://bugs.webkit.org/show_bug.cgi?id=174558 |
| |
| Reviewed by Alex Christensen. |
| |
| * CMakeLists.txt: |
| |
| 2017-09-15 JF Bastien <jfbastien@apple.com> |
| |
| WTF: use Forward.h when appropriate instead of Vector.h |
| https://bugs.webkit.org/show_bug.cgi?id=176984 |
| |
| Reviewed by Saam Barati. |
| |
| There's no need to include Vector.h when Forward.h will suffice. All we need is to move the template default parameters from Vector, and then the forward declaration can be used in so many new places: if a header only takes Vector by reference, rvalue reference, pointer, returns any of these, or has them as members then the header doesn't need to see the definition because the declaration will suffice. |
| |
| * Session.h: |
| |
| 2017-09-09 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: ensure we close all windows handles when closing the session |
| https://bugs.webkit.org/show_bug.cgi?id=176508 |
| |
| Reviewed by Brian Burg. |
| |
| The spec says that when closing the session all top level browsing contexts should be closed. We are currently |
| checking if we have an active top level browsing context and then we try to close it before trying with the |
| rest. It can happen that we are in an inconsistent state, for example if the current top level browsing context |
| has been closed by JavaScript or another action and the user didn't switch to another one before closing the |
| session. In such case, closing the session will fail with NoSuchwindow and any other window open will not be |
| closed. It's safer to always ask for all window handles and close them, which is what the spec says too. |
| |
| * Session.cpp: |
| (WebDriver::firstWindowHandleInResult): Helper class to get the first window handle in the result array. |
| (WebDriver::Session::closeAllToplevelBrowsingContexts): Use firstWindowHandleInResult(). |
| (WebDriver::Session::close): Close the current top level browsing context and get all window handles to close |
| them all if needed. |
| |
| 2017-08-28 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement screen capture commands |
| https://bugs.webkit.org/show_bug.cgi?id=174615 |
| |
| Reviewed by Brian Burg. |
| |
| Implement takeScreenshot and takeElementScreenshot commands. |
| |
| 19. Screen Capture. |
| https://w3c.github.io/webdriver/webdriver-spec.html#screen-capture |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): Handle ScreenshotError protocol error. |
| (WebDriver::CommandResult::httpStatusCode const): Add UnableToCaptureScreen. |
| (WebDriver::CommandResult::errorString const): Ditto. |
| * CommandResult.h: |
| * Session.cpp: |
| (WebDriver::Session::takeScreenshot): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::takeScreenshot): |
| (WebDriver::WebDriverService::takeElementScreenshot): |
| * WebDriverService.h: |
| |
| 2017-08-28 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement cookies commands |
| https://bugs.webkit.org/show_bug.cgi?id=174613 |
| |
| Reviewed by Brian Burg. |
| |
| Add cookies commands. |
| |
| 16. Cookies. |
| https://w3c.github.io/webdriver/webdriver-spec.html#cookies |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::httpStatusCode const): Add NoSuchCookie error. |
| (WebDriver::CommandResult::errorString const): Ditto. |
| * CommandResult.h: |
| * Session.cpp: |
| (WebDriver::parseAutomationCookie): Parse JSON cookie object returned by automation and convert it to a Cookie struct. |
| (WebDriver::builtAutomationCookie): Build a JSON cookie object as expected by automation from a Cookie struct. |
| (WebDriver::serializeCookie): Serialize a Cookie struct into a JSON cookie object according to the WebDriver spec. |
| (WebDriver::Session::getAllCookies): |
| (WebDriver::Session::getNamedCookie): |
| (WebDriver::Session::addCookie): |
| (WebDriver::Session::deleteCookie): |
| (WebDriver::Session::deleteAllCookies): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::getAllCookies): |
| (WebDriver::WebDriverService::getNamedCookie): |
| (WebDriver::deserializeCookie): |
| (WebDriver::WebDriverService::addCookie): |
| (WebDriver::WebDriverService::deleteCookie): |
| (WebDriver::WebDriverService::deleteAllCookies): |
| * WebDriverService.h: |
| |
| 2017-07-28 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: fix return value of close window command |
| https://bugs.webkit.org/show_bug.cgi?id=174861 |
| |
| Reviewed by Brian Burg. |
| |
| We are currently returning null, but we should return the list of window handles, and try to close the session |
| if there aren't more window handles. |
| |
| 10.2 Close Window |
| https://w3c.github.io/webdriver/webdriver-spec.html#close-window |
| |
| 3. If there are no more open top-level browsing contexts, then try to close the session. |
| 4. Return the result of running the remote end steps for the Get Window Handles command. |
| |
| * Session.cpp: |
| (WebDriver::Session::closeAllToplevelBrowsingContexts): Helper function to close the given toplevel browsing |
| context and the next one if there are more. |
| (WebDriver::Session::close): Call closeAllToplevelBrowsingContexts() to delete all toplevel browsing contexts of |
| the session. |
| (WebDriver::Session::closeTopLevelBrowsingContext): Close the given toplevel browsing context and call |
| getWindowHandles() when done. |
| (WebDriver::Session::closeWindow): Call closeTopLevelBrowsingContext() passing the current toplevel browsing context. |
| (WebDriver::Session::getWindowHandles): Remove the early return, this command doesn't depend on a current |
| toplevel browsing context. |
| * Session.h: |
| * SessionHost.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::run): Disconnect the server when main loop quits. |
| (WebDriver::WebDriverService::deleteSession): Do not fail if the given session is not active. |
| (WebDriver::WebDriverService::closeWindow): Remove the session if the closed window was the last one. |
| * WebDriverService.h: Remove unused quit() method. |
| * glib/SessionHostGlib.cpp: |
| (WebDriver::SessionHost::isConnected): Return whether host is connected to a browser instance. |
| (WebDriver::SessionHost::dbusConnectionClosedCallback): Delete m_browser. |
| |
| 2017-08-14 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: handle click events on option elements |
| https://bugs.webkit.org/show_bug.cgi?id=174710 |
| <rdar://problem/33459305> |
| |
| Reviewed by Brian Burg. |
| |
| Option elements are considered as a special case by the specification. When clicking an option element, we |
| should get its container and use it when scrolling into view and calculating in-view center point instead of the |
| option element itself. Then, we should not emulate a click, but change the selected status of the option element |
| like if it were done by a user action, firing the corresponding events. Now we check whether the element is an |
| option to call selectOptionElement() or performMouseInteraction(). |
| |
| This fixes more than 20 selenium tests. |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): Handle ElementNotSelectable protocol error. |
| (WebDriver::CommandResult::httpStatusCode const): Add ElementNotSelectable. |
| (WebDriver::CommandResult::errorString const): Ditto. |
| * CommandResult.h: |
| * Session.cpp: |
| (WebDriver::Session::selectOptionElement): Ask automation to select the given option element. |
| (WebDriver::Session::elementClick): Call selectOptionElement() or performMouseInteraction() depending on whether |
| the element is an option or not. |
| * Session.h: |
| |
| 2017-08-11 Carlos Alberto Lopez Perez <clopez@igalia.com> |
| |
| Fix build warning in WebDriverService.h |
| https://bugs.webkit.org/show_bug.cgi?id=166682 |
| |
| Unreviewed build fix. |
| |
| * WebDriverService.h: Fixes the warning: class 'Capabilities' was previously declared as a struct [-Wmismatched-tags] |
| |
| 2017-08-08 Michael Catanzaro <mcatanzaro@igalia.com> |
| |
| Unreviewed, fix Ubuntu LTS build |
| https://bugs.webkit.org/show_bug.cgi?id=174490 |
| |
| * glib/SessionHostGlib.cpp: |
| |
| 2017-08-08 Michael Catanzaro <mcatanzaro@igalia.com> |
| |
| [CMake] Properly test if compiler supports compiler flags |
| https://bugs.webkit.org/show_bug.cgi?id=174490 |
| |
| Reviewed by Konstantin Tokarev. |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::run): |
| * glib/SessionHostGlib.cpp: |
| |
| 2017-08-07 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| Web Automation: setUserInputForCurrentJavaScriptPrompt should fail if current dialog is not a prompt |
| https://bugs.webkit.org/show_bug.cgi?id=175261 |
| |
| Reviewed by Brian Burg. |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): Handle ElementNotInteractable protocol error. |
| |
| 2017-08-07 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement unhandled prompt behavior |
| https://bugs.webkit.org/show_bug.cgi?id=175184 |
| |
| Reviewed by Brian Burg. |
| |
| Handle user prompts before running some of the commands according to the specification. |
| |
| * Capabilities.h: Add UnhandledPromptBehavior capability. |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::httpStatusCode const): Add UnexpectedAlertOpen error. |
| (WebDriver::CommandResult::errorString const): Ditto. |
| * CommandResult.h: |
| (WebDriver::CommandResult::setAdditonalErrorData): New method to set an additional data object that will be sent |
| as part of the result error message. |
| (WebDriver::CommandResult::additionalErrorData const): Return the additional data object. |
| * Session.cpp: |
| (WebDriver::Session::handleUserPrompts): Check if there's an active JavaScript dialog and deal with it depeding |
| on the unhandled prompt behavior. |
| (WebDriver::Session::reportUnexpectedAlertOpen): Generate an error message with UnexpectedAlertOpen error and |
| including the alert text as additional error data. |
| (WebDriver::Session::go): Handle user prompts before running the command. |
| (WebDriver::Session::getCurrentURL): Ditto. |
| (WebDriver::Session::back): Ditto. |
| (WebDriver::Session::forward): Ditto. |
| (WebDriver::Session::refresh): Ditto. |
| (WebDriver::Session::getTitle): Ditto. |
| (WebDriver::Session::closeWindow): Ditto. |
| (WebDriver::Session::switchToFrame): Ditto. |
| (WebDriver::Session::switchToParentFrame): Ditto. |
| (WebDriver::Session::isElementSelected): Ditto. |
| (WebDriver::Session::getElementText): Ditto. |
| (WebDriver::Session::getElementTagName): Ditto. |
| (WebDriver::Session::getElementRect): Ditto. |
| (WebDriver::Session::isElementEnabled): Ditto. |
| (WebDriver::Session::isElementDisplayed): Ditto. |
| (WebDriver::Session::getElementAttribute): Ditto. |
| (WebDriver::Session::elementSendKeys): Ditto. |
| (WebDriver::Session::elementSubmit): Ditto. |
| (WebDriver::Session::executeScript): Ditto. |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::sendResponse const): Send data object as part of the result error message if present. |
| (WebDriver::deserializeUnhandledPromptBehavior): |
| (WebDriver::WebDriverService::parseCapabilities const): |
| (WebDriver::WebDriverService::validatedCapabilities const): |
| (WebDriver::WebDriverService::newSession): |
| |
| 2017-08-07 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement user prompt commands |
| https://bugs.webkit.org/show_bug.cgi?id=174614 |
| |
| Reviewed by Brian Burg. |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): Handle NoJavaScriptDialog protocol error. |
| (WebDriver::CommandResult::httpStatusCode const): Add NoSuchAlert. |
| (WebDriver::CommandResult::errorString const): Ditto. |
| * CommandResult.h: |
| * Session.cpp: |
| (WebDriver::Session::dismissAlert): |
| (WebDriver::Session::acceptAlert): |
| (WebDriver::Session::getAlertText): |
| (WebDriver::Session::sendAlertText): |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::dismissAlert): |
| (WebDriver::WebDriverService::acceptAlert): |
| (WebDriver::WebDriverService::getAlertText): |
| (WebDriver::WebDriverService::sendAlertText): |
| * WebDriverService.h: |
| |
| 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| [GTK][WPE] Add API to provide browser information required by automation |
| https://bugs.webkit.org/show_bug.cgi?id=175130 |
| |
| Reviewed by Brian Burg. |
| |
| * Session.cpp: |
| (WebDriver::Session::createTopLevelBrowsingContext): Check if startAutomationSession and complete the command |
| with error in that case. |
| * SessionHost.h: |
| * glib/SessionHostGlib.cpp: |
| (WebDriver::SessionHost::matchCapabilities): Match the capabilities that are known only after the browser has |
| been launched. |
| (WebDriver::SessionHost::startAutomationSession): Handle the StartAutomationSession response, extracting the |
| capabilities and calling matchCapabilities() to match them. |
| (WebDriver::SessionHost::setTargetList): Return early if the session was rejected before due to invalid |
| capabilities. |
| |
| 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: Implement page load strategy |
| https://bugs.webkit.org/show_bug.cgi?id=175183 |
| |
| Reviewed by Brian Burg. |
| |
| Validate and parse page load strategy when processing capabilities. |
| |
| * Capabilities.h: |
| * Session.cpp: |
| (WebDriver::Session::pageLoadStrategyString const): Helper to get the page load strategy as a String to be |
| passed to Automation. |
| (WebDriver::Session::go): Pass page load strategy if present. |
| (WebDriver::Session::back): Ditto. |
| (WebDriver::Session::forward): Ditto. |
| (WebDriver::Session::refresh): Ditto. |
| (WebDriver::Session::waitForNavigationToComplete): Ditto. |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::deserializePageLoadStrategy): |
| (WebDriver::WebDriverService::parseCapabilities const): |
| (WebDriver::WebDriverService::validatedCapabilities const): |
| (WebDriver::WebDriverService::newSession): |
| |
| 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| Unreviewed. Try to fix build with clang after r220315. |
| |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::validatedCapabilities const): |
| (WebDriver::WebDriverService::mergeCapabilities const): |
| |
| 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: properly handle capabilities and process firstMatch too |
| https://bugs.webkit.org/show_bug.cgi?id=174618 |
| |
| Reviewed by Brian Burg. |
| |
| Implement processing of capabilities following the spec. This patch adds validation, merging and matching of |
| capabilities. |
| |
| 7.2 Processing Capabilities. |
| https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities |
| |
| * Capabilities.h: Make all capabilities optional and move Timeouts struct here. |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::deserializeTimeouts): Helper to extract timeouts from JSON object. |
| (WebDriver::WebDriverService::parseCapabilities const): At this point capabilities have already been validated, |
| so we just need to get them without checking the value type. |
| (WebDriver::WebDriverService::validatedCapabilities const): Validate the given capabilities, ensuring types of |
| values are the expected one. |
| (WebDriver::WebDriverService::mergeCapabilities const): Merge the alwaysMatch and firstMatch capabilities into a |
| single object ensuring that the same capability is not in both. |
| (WebDriver::WebDriverService::matchCapabilities const): Try to match the merged capabilities againt the platform |
| expected capabilities. |
| (WebDriver::WebDriverService::processCapabilities const): Validate, merge and match the capabilities. |
| (WebDriver::WebDriverService::newSession): Use processCapabilities(). Also initialize the timeouts from |
| capabilities and add all capabilities to the command result. |
| (WebDriver::WebDriverService::setTimeouts): Use deserializeTimeouts(). |
| * WebDriverService.h: |
| * glib/SessionHostGlib.cpp: |
| (WebDriver::SessionHost::launchBrowser): Updated to properly access the capabilities that are now optional. |
| (WebDriver::SessionHost::startAutomationSession): Add FIXME. |
| * gtk/WebDriverServiceGtk.cpp: |
| (WebDriver::WebDriverService::platformCapabilities): Return the Capabilities with the known required ones filled. |
| (WebDriver::WebDriverService::platformValidateCapability const): Validate webkitgtk:browserOptions. |
| (WebDriver::WebDriverService::platformMatchCapability const): This does nothing for now. |
| (WebDriver::WebDriverService::platformCompareBrowserVersions): Compare the given browser versions. |
| (WebDriver::WebDriverService::platformParseCapabilities const): Updated now that capabilites have already been |
| validated before. |
| |
| 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: use in-view center point for clicks instead of bounding box center point |
| https://bugs.webkit.org/show_bug.cgi?id=174863 |
| |
| Reviewed by Simon Fraser. |
| |
| The center of the element bounding box is not always part of the element, like in multiline links, for example. |
| |
| 11.1 Element Interactability. |
| https://www.w3.org/TR/webdriver/#dfn-in-view-center-point |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::httpStatusCode): Add ElementClickIntercepted and ElementNotInteractable errors. |
| (WebDriver::CommandResult::errorString): Ditto. |
| * CommandResult.h: Ditto. |
| * Session.cpp: |
| (WebDriver::Session::computeElementLayout): Get the in-view center point and isObscured from the result too. |
| (WebDriver::Session::getElementRect): Ignore in-view center point and isObscured. |
| (WebDriver::Session::elementClick): Fail in case the element is not interactable or is obscured. |
| * Session.h: |
| |
| 2017-08-01 Michael Catanzaro <mcatanzaro@igalia.com> |
| |
| [CMake] WebKitFS.cmake depends on options set in Option cmake files that are included later |
| https://bugs.webkit.org/show_bug.cgi?id=174855 |
| |
| Reviewed by Carlos Garcia Campos. |
| |
| Don't create derived sources directory here anymore. |
| |
| * PlatformGTK.cmake: |
| |
| 2017-07-26 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| Unreviewed. Fix GTK distcheck. |
| |
| Ensure WebDriver derived sources directory is created, WebKitFS.cmake is useless for this. |
| |
| * PlatformGTK.cmake: |
| |
| 2017-07-24 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: rename m_browsingContext as m_currentBrowsingContext in Session |
| https://bugs.webkit.org/show_bug.cgi?id=174783 |
| |
| Reviewed by Brian Burg. |
| |
| We have m_toplevelBrowsingContext and m_browsingContext, which is confusing. m_browsingContext is actually the |
| current browsing context, and the spec also refers to it as the current browsing context, so better use |
| m_currentBrowsingContext. |
| |
| * Session.cpp: |
| (WebDriver::Session::switchToTopLevelBrowsingContext): |
| (WebDriver::Session::switchToBrowsingContext): |
| (WebDriver::Session::switchToFrame): |
| (WebDriver::Session::switchToParentFrame): |
| (WebDriver::Session::computeElementLayout): |
| (WebDriver::Session::findElements): |
| (WebDriver::Session::isElementSelected): |
| (WebDriver::Session::getElementText): |
| (WebDriver::Session::getElementTagName): |
| (WebDriver::Session::isElementEnabled): |
| (WebDriver::Session::isElementDisplayed): |
| (WebDriver::Session::getElementAttribute): |
| (WebDriver::Session::waitForNavigationToComplete): |
| (WebDriver::Session::elementClear): |
| (WebDriver::Session::elementSendKeys): |
| (WebDriver::Session::elementSubmit): |
| (WebDriver::Session::executeScript): |
| * Session.h: |
| |
| 2017-07-20 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: implement page load timeout |
| https://bugs.webkit.org/show_bug.cgi?id=174672 |
| |
| Reviewed by Brian Burg. |
| |
| Handle timeout errors and pass the page load timeout to waitForNavigationToComplete and all other navigation |
| commands. Also fix the setTimeouts command that was still using the legacy name of the page load timeout, |
| instead of the one in the spec. |
| |
| 8. Sessions |
| https://www.w3.org/TR/webdriver/#dfn-session-page-load-timeout |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): |
| (WebDriver::CommandResult::httpStatusCode): |
| (WebDriver::CommandResult::errorString): |
| * CommandResult.h: |
| * Session.cpp: |
| (WebDriver::Session::go): |
| (WebDriver::Session::back): |
| (WebDriver::Session::forward): |
| (WebDriver::Session::refresh): |
| (WebDriver::Session::waitForNavigationToComplete): |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::setTimeouts): |
| |
| 2017-07-21 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: wait until navigation is complete before running new commands and after a click |
| https://bugs.webkit.org/show_bug.cgi?id=174670 |
| |
| Reviewed by Brian Burg. |
| |
| We are already waiting for navigation to complete after navigation commands (go, back, forward, refresh), but |
| the spec says we should always wait before executing a new command and also after a click. This is causing test |
| testShouldBeAbleToNavigateBackInTheBrowserHistoryInPresenceOfIframes to sometimes fail, because it does .click() |
| + .title and expects the title to tbe the one of the page loaded by the click. Since the load happens very fast, |
| the test usually passes, but in a real case with a slower load, the title of the previous page will be returned |
| most of the times. |
| |
| 6.3 Processing Model. Step 7. Wait for navigation to complete. If this returns an error return its value and |
| jump to step 1 in this overall algorithm, otherwise continue. |
| https://www.w3.org/TR/webdriver/#processing-model |
| |
| 14.1 Element Click. Step 10. If the click causes navigation: 1. Run the post-navigation checks and return its |
| value if it is an error. 2. Try to wait for navigation to complete. |
| https://www.w3.org/TR/webdriver/#element-click |
| |
| * Session.cpp: |
| (WebDriver::Session::waitForNavigationToComplete): Send waitForNavigationToComplete message to the browser to |
| wait for any pending navigation of current browsing context to complete. |
| (WebDriver::Session::elementClick): Call waitForNavigationToComplete() after the click. |
| * Session.h: |
| * WebDriverService.cpp: |
| (WebDriver::WebDriverService::go): Wait for navigations to complete before running the command. |
| (WebDriver::WebDriverService::getCurrentURL): Ditto. |
| (WebDriver::WebDriverService::back): Ditto. |
| (WebDriver::WebDriverService::forward): Ditto. |
| (WebDriver::WebDriverService::refresh): Ditto. |
| (WebDriver::WebDriverService::getTitle): Ditto. |
| (WebDriver::WebDriverService::switchToFrame): Ditto. |
| (WebDriver::WebDriverService::switchToParentFrame): Ditto. |
| (WebDriver::WebDriverService::findElement): Ditto. |
| (WebDriver::WebDriverService::findElements): Ditto. |
| (WebDriver::WebDriverService::executeScript): Ditto. |
| (WebDriver::WebDriverService::executeAsyncScript): Ditto. |
| |
| 2017-07-21 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: correctly handle main frame handles |
| https://bugs.webkit.org/show_bug.cgi?id=174668 |
| |
| Reviewed by Brian Burg. |
| |
| When I switched to use std::optional instead of empty strings for the browsing contexts in WebDriver, I forgot |
| that automation uses empty string for frames to refer to the main frame. We should handle that case, because we |
| are currently considering empty strings as valid browsing context. It's not a big deal because Automation |
| converts back the empty string received to the main frame, though. We should also ensure we close the current |
| browsing context when switching to a new top level browsing context. This patch adds to helper private methods |
| to switch browsing contexts that deal with the special cases. |
| |
| * Session.cpp: |
| (WebDriver::Session::close): |
| (WebDriver::Session::switchToTopLevelBrowsingContext): |
| (WebDriver::Session::switchToBrowsingContext): |
| (WebDriver::Session::createTopLevelBrowsingContext): |
| (WebDriver::Session::go): |
| (WebDriver::Session::back): |
| (WebDriver::Session::forward): |
| (WebDriver::Session::refresh): |
| (WebDriver::Session::switchToWindow): |
| (WebDriver::Session::switchToFrame): |
| (WebDriver::Session::switchToParentFrame): |
| * Session.h: |
| |
| 2017-07-18 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| WebDriver: handle invalid selector errors |
| https://bugs.webkit.org/show_bug.cgi?id=174619 |
| |
| Reviewed by Brian Burg. |
| |
| Add InvalidSelector error and handle it in case of protocol server error. |
| |
| * CommandResult.cpp: |
| (WebDriver::CommandResult::CommandResult): |
| (WebDriver::CommandResult::httpStatusCode): |
| (WebDriver::CommandResult::errorString): |
| * CommandResult.h: |
| |
| 2017-07-18 Carlos Alberto Lopez Perez <clopez@igalia.com> |
| |
| [GTK] Fix build with Clang after r219605. |
| https://bugs.webkit.org/show_bug.cgi?id=166682 |
| |
| Unreviewed build fix. |
| |
| Clang-3.8 complains with the following error: |
| non-constant-expression cannot be narrowed from type 'gboolean' (aka 'int') to 'bool' in initializer list [-Wc++11-narrowing] |
| |
| * glib/SessionHostGlib.cpp: insert an explicit cast to silence this issue. |
| |
| 2017-07-13 Carlos Garcia Campos <cgarcia@igalia.com> |
| |
| Add initial implementation of WebDriver process to run the HTTP server |
| https://bugs.webkit.org/show_bug.cgi?id=166682 |
| |
| Reviewed by Brian Burg. |
| |
| Add WebDriver process that runs the HTTP server and implements an initial set of commands. Most of the code is |
| cross-platform, only the HTTP server implementation, the code to launch the browser and the communication with |
| the remote inspector requires platform specific code. This patch includes the GTK port implementation, using |
| libsoup for the HTTP server, and GLib for launching the browser and communicating with the remote |
| inspector. This implementation follows the w3c spec (https://www.w3.org/TR/webdriver) as close as possible, but |
| using the official selenium python tests as reference. |
| |
| * CMakeLists.txt: Added. |
| * Capabilities.h: Added. |
| * CommandResult.cpp: Added. |
| * CommandResult.h: Added. |
| * HTTPServer.cpp: Added. |
| * HTTPServer.h: Added. |
| * PlatformGTK.cmake: Added. |
| * Session.cpp: Added. |
| * Session.h: Added. |
| * SessionHost.cpp: Added. |
| * SessionHost.h: Added. |
| * WebDriverMain.cpp: Added. |
| * WebDriverService.cpp: Added. |
| * WebDriverService.h: Added. |
| * config.h: Added. |
| * glib/SessionHostGlib.cpp: Added. |
| * gtk/WebDriverServiceGtk.cpp: Added. |
| * soup/HTTPServerSoup.cpp: Added. |