Mercurial > hg > cmmr2012-drupal-site
comparison vendor/instaclick/php-webdriver/lib/WebDriver/Session.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
1 <?php | |
2 /** | |
3 * Copyright 2004-2017 Facebook. All Rights Reserved. | |
4 * | |
5 * Licensed under the Apache License, Version 2.0 (the "License"); | |
6 * you may not use this file except in compliance with the License. | |
7 * You may obtain a copy of the License at | |
8 * | |
9 * http://www.apache.org/licenses/LICENSE-2.0 | |
10 * | |
11 * Unless required by applicable law or agreed to in writing, software | |
12 * distributed under the License is distributed on an "AS IS" BASIS, | |
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 * See the License for the specific language governing permissions and | |
15 * limitations under the License. | |
16 * | |
17 * @package WebDriver | |
18 * | |
19 * @author Justin Bishop <jubishop@gmail.com> | |
20 * @author Anthon Pang <apang@softwaredevelopment.ca> | |
21 */ | |
22 | |
23 namespace WebDriver; | |
24 | |
25 /** | |
26 * WebDriver\Session class | |
27 * | |
28 * @package WebDriver | |
29 * | |
30 * @method string window_handle() Retrieve the current window handle. | |
31 * @method array window_handles() Retrieve the list of all window handles available to the session. | |
32 * @method string url() Retrieve the URL of the current page | |
33 * @method void postUrl($jsonUrl) Navigate to a new URL | |
34 * @method void forward() Navigates forward in the browser history, if possible. | |
35 * @method void back() Navigates backward in the browser history, if possible. | |
36 * @method void refresh() Refresh the current page. | |
37 * @method mixed execute($jsonScript) Inject a snippet of JavaScript into the page for execution in the context of the currently selected frame. (synchronous) | |
38 * @method mixed execute_async($jsonScript) Inject a snippet of JavaScript into the page for execution in the context of the currently selected frame. (asynchronous) | |
39 * @method string screenshot() Take a screenshot of the current page. | |
40 * @method array getCookie() Retrieve all cookies visible to the current page. | |
41 * @method array postCookie($jsonCookie) Set a cookie. | |
42 * @method string source() Get the current page source. | |
43 * @method string title() Get the current page title. | |
44 * @method void keys($jsonKeys) Send a sequence of key strokes to the active element. | |
45 * @method string getOrientation() Get the current browser orientation. | |
46 * @method void postOrientation($jsonOrientation) Set the current browser orientation. | |
47 * @method string getAlert_text() Gets the text of the currently displayed JavaScript alert(), confirm(), or prompt() dialog. | |
48 * @method void postAlert_text($jsonText) Sends keystrokes to a JavaScript prompt() dialog. | |
49 * @method void accept_alert() Accepts the currently displayed alert dialog. | |
50 * @method void dismiss_alert() Dismisses the currently displayed alert dialog. | |
51 * @method void moveto($jsonCoordinates) Move the mouse by an offset of the specified element (or current mouse cursor). | |
52 * @method void click($jsonButton) Click any mouse button (at the coordinates set by the last moveto command). | |
53 * @method void buttondown() Click and hold the left mouse button (at the coordinates set by the last moveto command). | |
54 * @method void buttonup() Releases the mouse button previously held (where the mouse is currently at). | |
55 * @method void doubleclick() Double-clicks at the current mouse coordinates (set by moveto). | |
56 * @method array execute_sql($jsonQuery) Execute SQL. | |
57 * @method array getLocation() Get the current geo location. | |
58 * @method void postLocation($jsonCoordinates) Set the current geo location. | |
59 * @method boolean getBrowser_connection() Is browser online? | |
60 * @method void postBrowser_connection($jsonState) Set browser online. | |
61 */ | |
62 final class Session extends Container | |
63 { | |
64 /** | |
65 * @var array | |
66 */ | |
67 private $capabilities = null; | |
68 | |
69 /** | |
70 * {@inheritdoc} | |
71 */ | |
72 protected function methods() | |
73 { | |
74 return array( | |
75 'window_handle' => array('GET'), | |
76 'window_handles' => array('GET'), | |
77 'url' => array('GET', 'POST'), // alternate for POST, use open($url) | |
78 'forward' => array('POST'), | |
79 'back' => array('POST'), | |
80 'refresh' => array('POST'), | |
81 'execute' => array('POST'), | |
82 'execute_async' => array('POST'), | |
83 'screenshot' => array('GET'), | |
84 'cookie' => array('GET', 'POST'), // for DELETE, use deleteAllCookies() | |
85 'source' => array('GET'), | |
86 'title' => array('GET'), | |
87 'keys' => array('POST'), | |
88 'orientation' => array('GET', 'POST'), | |
89 'alert_text' => array('GET', 'POST'), | |
90 'accept_alert' => array('POST'), | |
91 'dismiss_alert' => array('POST'), | |
92 'moveto' => array('POST'), | |
93 'click' => array('POST'), | |
94 'buttondown' => 'POST', | |
95 'buttonup' => array('POST'), | |
96 'doubleclick' => array('POST'), | |
97 'execute_sql' => array('POST'), | |
98 'location' => array('GET', 'POST'), | |
99 'browser_connection' => array('GET', 'POST'), | |
100 | |
101 // specific to Java SeleniumServer | |
102 'file' => array('POST'), | |
103 ); | |
104 } | |
105 | |
106 /** | |
107 * {@inheritdoc} | |
108 */ | |
109 protected function obsoleteMethods() | |
110 { | |
111 return array( | |
112 'modifier' => array('POST'), | |
113 'speed' => array('GET', 'POST'), | |
114 'alert' => array('GET'), | |
115 'visible' => array('GET', 'POST'), | |
116 ); | |
117 } | |
118 | |
119 /** | |
120 * Open URL: /session/:sessionId/url (POST) | |
121 * An alternative to $session->url($url); | |
122 * | |
123 * @param string $url | |
124 * | |
125 * @return \WebDriver\Session | |
126 */ | |
127 public function open($url) | |
128 { | |
129 $this->curl('POST', '/url', array('url' => $url)); | |
130 | |
131 return $this; | |
132 } | |
133 | |
134 /** | |
135 * Get browser capabilities: /session/:sessionId (GET) | |
136 * | |
137 * @return mixed | |
138 */ | |
139 public function capabilities() | |
140 { | |
141 if (! isset($this->capabilities)) { | |
142 $result = $this->curl('GET', ''); | |
143 | |
144 $this->capabilities = $result['value']; | |
145 } | |
146 | |
147 return $this->capabilities; | |
148 } | |
149 | |
150 /** | |
151 * Close session: /session/:sessionId (DELETE) | |
152 * | |
153 * @return mixed | |
154 */ | |
155 public function close() | |
156 { | |
157 $result = $this->curl('DELETE', ''); | |
158 | |
159 return $result['value']; | |
160 } | |
161 | |
162 // There's a limit to our ability to exploit the dynamic nature of PHP when it | |
163 // comes to the cookie methods because GET and DELETE request methods are indistinguishable | |
164 // from each other: neither takes parameters. | |
165 | |
166 /** | |
167 * Get all cookies: /session/:sessionId/cookie (GET) | |
168 * Alternative to: $session->cookie(); | |
169 * | |
170 * Note: get cookie by name not implemented in API | |
171 * | |
172 * @return mixed | |
173 */ | |
174 public function getAllCookies() | |
175 { | |
176 $result = $this->curl('GET', '/cookie'); | |
177 | |
178 return $result['value']; | |
179 } | |
180 | |
181 /** | |
182 * Set cookie: /session/:sessionId/cookie (POST) | |
183 * Alternative to: $session->cookie($cookie_json); | |
184 * | |
185 * @param array $cookieJson | |
186 * | |
187 * @return \WebDriver\Session | |
188 */ | |
189 public function setCookie($cookieJson) | |
190 { | |
191 $this->curl('POST', '/cookie', array('cookie' => $cookieJson)); | |
192 | |
193 return $this; | |
194 } | |
195 | |
196 /** | |
197 * Delete all cookies: /session/:sessionId/cookie (DELETE) | |
198 * | |
199 * @return \WebDriver\Session | |
200 */ | |
201 public function deleteAllCookies() | |
202 { | |
203 $this->curl('DELETE', '/cookie'); | |
204 | |
205 return $this; | |
206 } | |
207 | |
208 /** | |
209 * Delete a cookie: /session/:sessionId/cookie/:name (DELETE) | |
210 * | |
211 * @param string $cookieName | |
212 * | |
213 * @return \WebDriver\Session | |
214 */ | |
215 public function deleteCookie($cookieName) | |
216 { | |
217 $this->curl('DELETE', '/cookie/' . $cookieName); | |
218 | |
219 return $this; | |
220 } | |
221 | |
222 /** | |
223 * window methods: /session/:sessionId/window (POST, DELETE) | |
224 * - $session->window() - close current window | |
225 * - $session->window($name) - set focus | |
226 * - $session->window($window_handle)->method() - chaining | |
227 * | |
228 * @return \WebDriver\Window|\WebDriver\Session | |
229 */ | |
230 public function window() | |
231 { | |
232 // close current window | |
233 if (func_num_args() === 0) { | |
234 $this->curl('DELETE', '/window'); | |
235 | |
236 return $this; | |
237 } | |
238 | |
239 // set focus | |
240 $arg = func_get_arg(0); // window handle or name attribute | |
241 | |
242 if (is_array($arg)) { | |
243 $this->curl('POST', '/window', $arg); | |
244 | |
245 return $this; | |
246 } | |
247 | |
248 // chaining | |
249 return new Window($this->url . '/window', $arg); | |
250 } | |
251 | |
252 /** | |
253 * Delete window: /session/:sessionId/window (DELETE) | |
254 * | |
255 * @return \WebDriver\Session | |
256 */ | |
257 public function deleteWindow() | |
258 { | |
259 $this->curl('DELETE', '/window'); | |
260 | |
261 return $this; | |
262 } | |
263 | |
264 /** | |
265 * Set focus to window: /session/:sessionId/window (POST) | |
266 * | |
267 * @param mixed $name window handler or name attribute | |
268 * | |
269 * @return \WebDriver\Session | |
270 */ | |
271 public function focusWindow($name) | |
272 { | |
273 $this->curl('POST', '/window', array('name' => $name)); | |
274 | |
275 return $this; | |
276 } | |
277 | |
278 /** | |
279 * frame methods: /session/:sessionId/frame (POST) | |
280 * - $session->frame($json) - change focus to another frame on the page | |
281 * - $session->frame()->method() - chaining | |
282 * | |
283 * @return \WebDriver\Session|\WebDriver\Frame | |
284 */ | |
285 public function frame() | |
286 { | |
287 if (func_num_args() === 1) { | |
288 $arg = func_get_arg(0); // json | |
289 | |
290 $this->curl('POST', '/frame', $arg); | |
291 | |
292 return $this; | |
293 } | |
294 | |
295 // chaining | |
296 return new Frame($this->url . '/frame'); | |
297 } | |
298 | |
299 /** | |
300 * timeouts methods: /session/:sessionId/timeouts (POST) | |
301 * - $session->timeouts($json) - set timeout for an operation | |
302 * - $session->timeouts()->method() - chaining | |
303 * | |
304 * @return \WebDriver\Session|\WebDriver\Timeouts | |
305 */ | |
306 public function timeouts() | |
307 { | |
308 // set timeouts | |
309 if (func_num_args() === 1) { | |
310 $arg = func_get_arg(0); // json | |
311 | |
312 $this->curl('POST', '/timeouts', $arg); | |
313 | |
314 return $this; | |
315 } | |
316 | |
317 if (func_num_args() === 2) { | |
318 $arg = array( | |
319 'type' => func_get_arg(0), // 'script' or 'implicit' | |
320 'ms' => func_get_arg(1), // timeout in milliseconds | |
321 ); | |
322 | |
323 $this->curl('POST', '/timeouts', $arg); | |
324 | |
325 return $this; | |
326 } | |
327 | |
328 // chaining | |
329 return new Timeouts($this->url . '/timeouts'); | |
330 } | |
331 | |
332 /** | |
333 * ime method chaining, e.g., | |
334 * - $session->ime()->method() | |
335 * | |
336 * @return \WebDriver\Ime | |
337 */ | |
338 public function ime() | |
339 { | |
340 return new Ime($this->url . '/ime'); | |
341 } | |
342 | |
343 /** | |
344 * Get active element (i.e., has focus): /session/:sessionId/element/active (POST) | |
345 * - $session->activeElement() | |
346 * | |
347 * @return mixed | |
348 */ | |
349 public function activeElement() | |
350 { | |
351 $result = $this->curl('POST', '/element/active'); | |
352 | |
353 return $this->webDriverElement($result['value']); | |
354 } | |
355 | |
356 /** | |
357 * touch method chaining, e.g., | |
358 * - $session->touch()->method() | |
359 * | |
360 * @return \WebDriver\Touch | |
361 * | |
362 */ | |
363 public function touch() | |
364 { | |
365 return new Touch($this->url . '/touch'); | |
366 } | |
367 | |
368 /** | |
369 * local_storage method chaining, e.g., | |
370 * - $session->local_storage()->method() | |
371 * | |
372 * @return \WebDriver\Storage | |
373 */ | |
374 public function local_storage() | |
375 { | |
376 return Storage::factory('local', $this->url . '/local_storage'); | |
377 } | |
378 | |
379 /** | |
380 * session_storage method chaining, e.g., | |
381 * - $session->session_storage()->method() | |
382 * | |
383 * @return \WebDriver\Storage | |
384 */ | |
385 public function session_storage() | |
386 { | |
387 return Storage::factory('session', $this->url . '/session_storage'); | |
388 } | |
389 | |
390 /** | |
391 * application cache chaining, e.g., | |
392 * - $session->application_cache()->status() | |
393 * | |
394 * @return \WebDriver\ApplicationCache | |
395 */ | |
396 public function application_cache() | |
397 { | |
398 return new ApplicationCache($this->url . '/application_cache'); | |
399 } | |
400 | |
401 /** | |
402 * log methods: /session/:sessionId/log (POST) | |
403 * - $session->log($type) - get log for given log type | |
404 * - $session->log()->method() - chaining | |
405 * | |
406 * @return mixed | |
407 */ | |
408 public function log() | |
409 { | |
410 // get log for given log type | |
411 if (func_num_args() === 1) { | |
412 $arg = func_get_arg(0); | |
413 | |
414 if (is_string($arg)) { | |
415 $arg = array( | |
416 'type' => $arg, | |
417 ); | |
418 } | |
419 | |
420 $result = $this->curl('POST', '/log', $arg); | |
421 | |
422 return $result['value']; | |
423 } | |
424 | |
425 // chaining | |
426 return new Log($this->url . '/log'); | |
427 } | |
428 | |
429 /** | |
430 * {@inheritdoc} | |
431 */ | |
432 protected function getElementPath($elementId) | |
433 { | |
434 return sprintf('%s/element/%s', $this->url, $elementId); | |
435 } | |
436 } |