annotate vendor/behat/mink/src/Session.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Mink package.
Chris@0 5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
Chris@0 6 *
Chris@0 7 * For the full copyright and license information, please view the LICENSE
Chris@0 8 * file that was distributed with this source code.
Chris@0 9 */
Chris@0 10
Chris@0 11 namespace Behat\Mink;
Chris@0 12
Chris@0 13 use Behat\Mink\Driver\DriverInterface;
Chris@0 14 use Behat\Mink\Selector\SelectorsHandler;
Chris@0 15 use Behat\Mink\Element\DocumentElement;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * Mink session.
Chris@0 19 *
Chris@0 20 * @author Konstantin Kudryashov <ever.zet@gmail.com>
Chris@0 21 */
Chris@0 22 class Session
Chris@0 23 {
Chris@0 24 private $driver;
Chris@0 25 private $page;
Chris@0 26 private $selectorsHandler;
Chris@0 27
Chris@0 28 /**
Chris@0 29 * Initializes session.
Chris@0 30 *
Chris@0 31 * @param DriverInterface $driver
Chris@0 32 * @param SelectorsHandler $selectorsHandler
Chris@0 33 */
Chris@0 34 public function __construct(DriverInterface $driver, SelectorsHandler $selectorsHandler = null)
Chris@0 35 {
Chris@0 36 $driver->setSession($this);
Chris@0 37
Chris@0 38 if (null === $selectorsHandler) {
Chris@0 39 $selectorsHandler = new SelectorsHandler();
Chris@0 40 }
Chris@0 41
Chris@0 42 $this->driver = $driver;
Chris@0 43 $this->selectorsHandler = $selectorsHandler;
Chris@0 44 $this->page = new DocumentElement($this);
Chris@0 45 }
Chris@0 46
Chris@0 47 /**
Chris@0 48 * Checks whether session (driver) was started.
Chris@0 49 *
Chris@0 50 * @return Boolean
Chris@0 51 */
Chris@0 52 public function isStarted()
Chris@0 53 {
Chris@0 54 return $this->driver->isStarted();
Chris@0 55 }
Chris@0 56
Chris@0 57 /**
Chris@0 58 * Starts session driver.
Chris@0 59 *
Chris@0 60 * Calling any action before visiting a page is an undefined behavior.
Chris@0 61 * The only supported method calls on a fresh driver are
Chris@0 62 * - visit()
Chris@0 63 * - setRequestHeader()
Chris@0 64 * - setBasicAuth()
Chris@0 65 * - reset()
Chris@0 66 * - stop()
Chris@0 67 */
Chris@0 68 public function start()
Chris@0 69 {
Chris@0 70 $this->driver->start();
Chris@0 71 }
Chris@0 72
Chris@0 73 /**
Chris@0 74 * Stops session driver.
Chris@0 75 */
Chris@0 76 public function stop()
Chris@0 77 {
Chris@0 78 $this->driver->stop();
Chris@0 79 }
Chris@0 80
Chris@0 81 /**
Chris@0 82 * Restart session driver.
Chris@0 83 */
Chris@0 84 public function restart()
Chris@0 85 {
Chris@0 86 $this->driver->stop();
Chris@0 87 $this->driver->start();
Chris@0 88 }
Chris@0 89
Chris@0 90 /**
Chris@0 91 * Reset session driver state.
Chris@0 92 *
Chris@0 93 * Calling any action before visiting a page is an undefined behavior.
Chris@0 94 * The only supported method calls on a fresh driver are
Chris@0 95 * - visit()
Chris@0 96 * - setRequestHeader()
Chris@0 97 * - setBasicAuth()
Chris@0 98 * - reset()
Chris@0 99 * - stop()
Chris@0 100 */
Chris@0 101 public function reset()
Chris@0 102 {
Chris@0 103 $this->driver->reset();
Chris@0 104 }
Chris@0 105
Chris@0 106 /**
Chris@0 107 * Returns session driver.
Chris@0 108 *
Chris@0 109 * @return DriverInterface
Chris@0 110 */
Chris@0 111 public function getDriver()
Chris@0 112 {
Chris@0 113 return $this->driver;
Chris@0 114 }
Chris@0 115
Chris@0 116 /**
Chris@0 117 * Returns page element.
Chris@0 118 *
Chris@0 119 * @return DocumentElement
Chris@0 120 */
Chris@0 121 public function getPage()
Chris@0 122 {
Chris@0 123 return $this->page;
Chris@0 124 }
Chris@0 125
Chris@0 126 /**
Chris@0 127 * Returns selectors handler.
Chris@0 128 *
Chris@0 129 * @return SelectorsHandler
Chris@0 130 */
Chris@0 131 public function getSelectorsHandler()
Chris@0 132 {
Chris@0 133 return $this->selectorsHandler;
Chris@0 134 }
Chris@0 135
Chris@0 136 /**
Chris@0 137 * Visit specified URL and automatically start session if not already running.
Chris@0 138 *
Chris@0 139 * @param string $url url of the page
Chris@0 140 */
Chris@0 141 public function visit($url)
Chris@0 142 {
Chris@0 143 // start session if needed
Chris@0 144 if (!$this->isStarted()) {
Chris@0 145 $this->start();
Chris@0 146 }
Chris@0 147
Chris@0 148 $this->driver->visit($url);
Chris@0 149 }
Chris@0 150
Chris@0 151 /**
Chris@0 152 * Sets HTTP Basic authentication parameters.
Chris@0 153 *
Chris@0 154 * @param string|Boolean $user user name or false to disable authentication
Chris@0 155 * @param string $password password
Chris@0 156 */
Chris@0 157 public function setBasicAuth($user, $password = '')
Chris@0 158 {
Chris@0 159 $this->driver->setBasicAuth($user, $password);
Chris@0 160 }
Chris@0 161
Chris@0 162 /**
Chris@0 163 * Sets specific request header.
Chris@0 164 *
Chris@0 165 * @param string $name
Chris@0 166 * @param string $value
Chris@0 167 */
Chris@0 168 public function setRequestHeader($name, $value)
Chris@0 169 {
Chris@0 170 $this->driver->setRequestHeader($name, $value);
Chris@0 171 }
Chris@0 172
Chris@0 173 /**
Chris@0 174 * Returns all response headers.
Chris@0 175 *
Chris@0 176 * @return array
Chris@0 177 */
Chris@0 178 public function getResponseHeaders()
Chris@0 179 {
Chris@0 180 return $this->driver->getResponseHeaders();
Chris@0 181 }
Chris@0 182
Chris@0 183 /**
Chris@0 184 * Returns specific response header.
Chris@0 185 *
Chris@0 186 * @param string $name
Chris@0 187 *
Chris@0 188 * @return string|null
Chris@0 189 */
Chris@0 190 public function getResponseHeader($name)
Chris@0 191 {
Chris@0 192 $headers = $this->driver->getResponseHeaders();
Chris@0 193
Chris@0 194 $name = strtolower($name);
Chris@0 195 $headers = array_change_key_case($headers, CASE_LOWER);
Chris@0 196
Chris@0 197 if (!isset($headers[$name])) {
Chris@0 198 return null;
Chris@0 199 }
Chris@0 200
Chris@0 201 return is_array($headers[$name]) ? $headers[$name][0] : $headers[$name];
Chris@0 202 }
Chris@0 203
Chris@0 204 /**
Chris@0 205 * Sets cookie.
Chris@0 206 *
Chris@0 207 * @param string $name
Chris@0 208 * @param string $value
Chris@0 209 */
Chris@0 210 public function setCookie($name, $value = null)
Chris@0 211 {
Chris@0 212 $this->driver->setCookie($name, $value);
Chris@0 213 }
Chris@0 214
Chris@0 215 /**
Chris@0 216 * Returns cookie by name.
Chris@0 217 *
Chris@0 218 * @param string $name
Chris@0 219 *
Chris@0 220 * @return string|null
Chris@0 221 */
Chris@0 222 public function getCookie($name)
Chris@0 223 {
Chris@0 224 return $this->driver->getCookie($name);
Chris@0 225 }
Chris@0 226
Chris@0 227 /**
Chris@0 228 * Returns response status code.
Chris@0 229 *
Chris@0 230 * @return int
Chris@0 231 */
Chris@0 232 public function getStatusCode()
Chris@0 233 {
Chris@0 234 return $this->driver->getStatusCode();
Chris@0 235 }
Chris@0 236
Chris@0 237 /**
Chris@0 238 * Returns current URL address.
Chris@0 239 *
Chris@0 240 * @return string
Chris@0 241 */
Chris@0 242 public function getCurrentUrl()
Chris@0 243 {
Chris@0 244 return $this->driver->getCurrentUrl();
Chris@0 245 }
Chris@0 246
Chris@0 247 /**
Chris@0 248 * Capture a screenshot of the current window.
Chris@0 249 *
Chris@0 250 * @return string screenshot of MIME type image/* depending
Chris@0 251 * on driver (e.g., image/png, image/jpeg)
Chris@0 252 */
Chris@0 253 public function getScreenshot()
Chris@0 254 {
Chris@0 255 return $this->driver->getScreenshot();
Chris@0 256 }
Chris@0 257
Chris@0 258 /**
Chris@0 259 * Return the names of all open windows.
Chris@0 260 *
Chris@0 261 * @return array Array of all open window's names.
Chris@0 262 */
Chris@0 263 public function getWindowNames()
Chris@0 264 {
Chris@0 265 return $this->driver->getWindowNames();
Chris@0 266 }
Chris@0 267
Chris@0 268 /**
Chris@0 269 * Return the name of the currently active window.
Chris@0 270 *
Chris@0 271 * @return string The name of the current window.
Chris@0 272 */
Chris@0 273 public function getWindowName()
Chris@0 274 {
Chris@0 275 return $this->driver->getWindowName();
Chris@0 276 }
Chris@0 277
Chris@0 278 /**
Chris@0 279 * Reloads current session page.
Chris@0 280 */
Chris@0 281 public function reload()
Chris@0 282 {
Chris@0 283 $this->driver->reload();
Chris@0 284 }
Chris@0 285
Chris@0 286 /**
Chris@0 287 * Moves backward 1 page in history.
Chris@0 288 */
Chris@0 289 public function back()
Chris@0 290 {
Chris@0 291 $this->driver->back();
Chris@0 292 }
Chris@0 293
Chris@0 294 /**
Chris@0 295 * Moves forward 1 page in history.
Chris@0 296 */
Chris@0 297 public function forward()
Chris@0 298 {
Chris@0 299 $this->driver->forward();
Chris@0 300 }
Chris@0 301
Chris@0 302 /**
Chris@0 303 * Switches to specific browser window.
Chris@0 304 *
Chris@0 305 * @param string $name window name (null for switching back to main window)
Chris@0 306 */
Chris@0 307 public function switchToWindow($name = null)
Chris@0 308 {
Chris@0 309 $this->driver->switchToWindow($name);
Chris@0 310 }
Chris@0 311
Chris@0 312 /**
Chris@0 313 * Switches to specific iFrame.
Chris@0 314 *
Chris@0 315 * @param string $name iframe name (null for switching back)
Chris@0 316 */
Chris@0 317 public function switchToIFrame($name = null)
Chris@0 318 {
Chris@0 319 $this->driver->switchToIFrame($name);
Chris@0 320 }
Chris@0 321
Chris@0 322 /**
Chris@0 323 * Execute JS in browser.
Chris@0 324 *
Chris@0 325 * @param string $script javascript
Chris@0 326 */
Chris@0 327 public function executeScript($script)
Chris@0 328 {
Chris@0 329 $this->driver->executeScript($script);
Chris@0 330 }
Chris@0 331
Chris@0 332 /**
Chris@0 333 * Execute JS in browser and return it's response.
Chris@0 334 *
Chris@0 335 * @param string $script javascript
Chris@0 336 *
Chris@0 337 * @return string
Chris@0 338 */
Chris@0 339 public function evaluateScript($script)
Chris@0 340 {
Chris@0 341 return $this->driver->evaluateScript($script);
Chris@0 342 }
Chris@0 343
Chris@0 344 /**
Chris@0 345 * Waits some time or until JS condition turns true.
Chris@0 346 *
Chris@0 347 * @param int $time time in milliseconds
Chris@0 348 * @param string $condition JS condition
Chris@0 349 *
Chris@0 350 * @return bool
Chris@0 351 */
Chris@0 352 public function wait($time, $condition = 'false')
Chris@0 353 {
Chris@0 354 return $this->driver->wait($time, $condition);
Chris@0 355 }
Chris@0 356
Chris@0 357 /**
Chris@0 358 * Set the dimensions of the window.
Chris@0 359 *
Chris@0 360 * @param int $width set the window width, measured in pixels
Chris@0 361 * @param int $height set the window height, measured in pixels
Chris@0 362 * @param string $name window name (null for the main window)
Chris@0 363 */
Chris@0 364 public function resizeWindow($width, $height, $name = null)
Chris@0 365 {
Chris@0 366 $this->driver->resizeWindow($width, $height, $name);
Chris@0 367 }
Chris@0 368
Chris@0 369 /**
Chris@0 370 * Maximize the window if it is not maximized already.
Chris@0 371 *
Chris@0 372 * @param string $name window name (null for the main window)
Chris@0 373 */
Chris@0 374 public function maximizeWindow($name = null)
Chris@0 375 {
Chris@0 376 $this->driver->maximizeWindow($name);
Chris@0 377 }
Chris@0 378 }