annotate vendor/instaclick/php-webdriver/lib/WebDriver/Session.php @ 5:12f9dff5fda9 tip

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