2cd280847d14703051c8c5038799fb892680e36a
[WebKit-https.git] / Source / WebDriver / ChangeLog
1 2017-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>
2
3         Unreviewed. Fix GTK distcheck.
4
5         Ensure WebDriver derived sources directory is created, WebKitFS.cmake is useless for this.
6
7         * PlatformGTK.cmake:
8
9 2017-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>
10
11         WebDriver: rename m_browsingContext as m_currentBrowsingContext in Session
12         https://bugs.webkit.org/show_bug.cgi?id=174783
13
14         Reviewed by Brian Burg.
15
16         We have m_toplevelBrowsingContext and m_browsingContext, which is confusing. m_browsingContext is actually the
17         current browsing context, and the spec also refers to it as the current browsing context, so better use
18         m_currentBrowsingContext.
19
20         * Session.cpp:
21         (WebDriver::Session::switchToTopLevelBrowsingContext):
22         (WebDriver::Session::switchToBrowsingContext):
23         (WebDriver::Session::switchToFrame):
24         (WebDriver::Session::switchToParentFrame):
25         (WebDriver::Session::computeElementLayout):
26         (WebDriver::Session::findElements):
27         (WebDriver::Session::isElementSelected):
28         (WebDriver::Session::getElementText):
29         (WebDriver::Session::getElementTagName):
30         (WebDriver::Session::isElementEnabled):
31         (WebDriver::Session::isElementDisplayed):
32         (WebDriver::Session::getElementAttribute):
33         (WebDriver::Session::waitForNavigationToComplete):
34         (WebDriver::Session::elementClear):
35         (WebDriver::Session::elementSendKeys):
36         (WebDriver::Session::elementSubmit):
37         (WebDriver::Session::executeScript):
38         * Session.h:
39
40 2017-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>
41
42         WebDriver: implement page load timeout
43         https://bugs.webkit.org/show_bug.cgi?id=174672
44
45         Reviewed by Brian Burg.
46
47         Handle timeout errors and pass the page load timeout to waitForNavigationToComplete and all other navigation
48         commands. Also fix the setTimeouts command that was still using the legacy name of the page load timeout,
49         instead of the one in the spec.
50
51         8. Sessions
52         https://www.w3.org/TR/webdriver/#dfn-session-page-load-timeout
53
54         * CommandResult.cpp:
55         (WebDriver::CommandResult::CommandResult):
56         (WebDriver::CommandResult::httpStatusCode):
57         (WebDriver::CommandResult::errorString):
58         * CommandResult.h:
59         * Session.cpp:
60         (WebDriver::Session::go):
61         (WebDriver::Session::back):
62         (WebDriver::Session::forward):
63         (WebDriver::Session::refresh):
64         (WebDriver::Session::waitForNavigationToComplete):
65         * WebDriverService.cpp:
66         (WebDriver::WebDriverService::setTimeouts):
67
68 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
69
70         WebDriver: wait until navigation is complete before running new commands and after a click
71         https://bugs.webkit.org/show_bug.cgi?id=174670
72
73         Reviewed by Brian Burg.
74
75         We are already waiting for navigation to complete after navigation commands (go, back, forward, refresh), but
76         the spec says we should always wait before executing a new command and also after a click. This is causing test
77         testShouldBeAbleToNavigateBackInTheBrowserHistoryInPresenceOfIframes to sometimes fail, because it does .click()
78         + .title and expects the title to tbe the one of the page loaded by the click. Since the load happens very fast,
79         the test usually passes, but in a real case with a slower load, the title of the previous page will be returned
80         most of the times.
81
82         6.3 Processing Model. Step 7. Wait for navigation to complete. If this returns an error return its value and
83         jump to step 1 in this overall algorithm, otherwise continue.
84         https://www.w3.org/TR/webdriver/#processing-model
85
86         14.1 Element Click. Step 10. If the click causes navigation: 1. Run the post-navigation checks and return its
87         value if it is an error. 2. Try to wait for navigation to complete.
88         https://www.w3.org/TR/webdriver/#element-click
89
90         * Session.cpp:
91         (WebDriver::Session::waitForNavigationToComplete): Send waitForNavigationToComplete message to the browser to
92         wait for any pending navigation of current browsing context to complete.
93         (WebDriver::Session::elementClick): Call waitForNavigationToComplete() after the click.
94         * Session.h:
95         * WebDriverService.cpp:
96         (WebDriver::WebDriverService::go): Wait for navigations to complete before running the command.
97         (WebDriver::WebDriverService::getCurrentURL): Ditto.
98         (WebDriver::WebDriverService::back): Ditto.
99         (WebDriver::WebDriverService::forward): Ditto.
100         (WebDriver::WebDriverService::refresh): Ditto.
101         (WebDriver::WebDriverService::getTitle): Ditto.
102         (WebDriver::WebDriverService::switchToFrame): Ditto.
103         (WebDriver::WebDriverService::switchToParentFrame): Ditto.
104         (WebDriver::WebDriverService::findElement): Ditto.
105         (WebDriver::WebDriverService::findElements): Ditto.
106         (WebDriver::WebDriverService::executeScript): Ditto.
107         (WebDriver::WebDriverService::executeAsyncScript): Ditto.
108
109 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
110
111         WebDriver: correctly handle main frame handles
112         https://bugs.webkit.org/show_bug.cgi?id=174668
113
114         Reviewed by Brian Burg.
115
116         When I switched to use std::optional instead of empty strings for the browsing contexts in WebDriver, I forgot
117         that automation uses empty string for frames to refer to the main frame. We should handle that case, because we
118         are currently considering empty strings as valid browsing context. It's not a big deal because Automation
119         converts back the empty string received to the main frame, though. We should also ensure we close the current
120         browsing context when switching to a new top level browsing context. This patch adds to helper private methods
121         to switch browsing contexts that deal with the special cases.
122
123         * Session.cpp:
124         (WebDriver::Session::close):
125         (WebDriver::Session::switchToTopLevelBrowsingContext):
126         (WebDriver::Session::switchToBrowsingContext):
127         (WebDriver::Session::createTopLevelBrowsingContext):
128         (WebDriver::Session::go):
129         (WebDriver::Session::back):
130         (WebDriver::Session::forward):
131         (WebDriver::Session::refresh):
132         (WebDriver::Session::switchToWindow):
133         (WebDriver::Session::switchToFrame):
134         (WebDriver::Session::switchToParentFrame):
135         * Session.h:
136
137 2017-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>
138
139         WebDriver: handle invalid selector errors
140         https://bugs.webkit.org/show_bug.cgi?id=174619
141
142         Reviewed by Brian Burg.
143
144         Add InvalidSelector error and handle it in case of protocol server error.
145
146         * CommandResult.cpp:
147         (WebDriver::CommandResult::CommandResult):
148         (WebDriver::CommandResult::httpStatusCode):
149         (WebDriver::CommandResult::errorString):
150         * CommandResult.h:
151
152 2017-07-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>
153
154         [GTK] Fix build with Clang after r219605.
155         https://bugs.webkit.org/show_bug.cgi?id=166682
156
157         Unreviewed build fix.
158
159         Clang-3.8 complains with the following error:
160         non-constant-expression cannot be narrowed from type 'gboolean' (aka 'int') to 'bool' in initializer list [-Wc++11-narrowing]
161
162         * glib/SessionHostGlib.cpp: insert an explicit cast to silence this issue.
163
164 2017-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>
165
166         Add initial implementation of WebDriver process to run the HTTP server
167         https://bugs.webkit.org/show_bug.cgi?id=166682
168
169         Reviewed by Brian Burg.
170
171         Add WebDriver process that runs the HTTP server and implements an initial set of commands. Most of the code is
172         cross-platform, only the HTTP server implementation, the code to launch the browser and the communication with
173         the remote inspector requires platform specific code. This patch includes the GTK port implementation, using
174         libsoup for the HTTP server, and GLib for launching the browser and communicating with the remote
175         inspector. This implementation follows the w3c spec (https://www.w3.org/TR/webdriver) as close as possible, but
176         using the official selenium python tests as reference.
177
178         * CMakeLists.txt: Added.
179         * Capabilities.h: Added.
180         * CommandResult.cpp: Added.
181         * CommandResult.h: Added.
182         * HTTPServer.cpp: Added.
183         * HTTPServer.h: Added.
184         * PlatformGTK.cmake: Added.
185         * Session.cpp: Added.
186         * Session.h: Added.
187         * SessionHost.cpp: Added.
188         * SessionHost.h: Added.
189         * WebDriverMain.cpp: Added.
190         * WebDriverService.cpp: Added.
191         * WebDriverService.h: Added.
192         * config.h: Added.
193         * glib/SessionHostGlib.cpp: Added.
194         * gtk/WebDriverServiceGtk.cpp: Added.
195         * soup/HTTPServerSoup.cpp: Added.