1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace Facebook\WebDriver; 4*04fd306cSNickeau 5*04fd306cSNickeauuse Facebook\WebDriver\Remote\DriverCommand; 6*04fd306cSNickeauuse Facebook\WebDriver\Remote\ExecuteMethod; 7*04fd306cSNickeau 8*04fd306cSNickeau/** 9*04fd306cSNickeau * Managing timeout behavior for WebDriver instances. 10*04fd306cSNickeau */ 11*04fd306cSNickeauclass WebDriverTimeouts 12*04fd306cSNickeau{ 13*04fd306cSNickeau /** 14*04fd306cSNickeau * @var ExecuteMethod 15*04fd306cSNickeau */ 16*04fd306cSNickeau protected $executor; 17*04fd306cSNickeau /** 18*04fd306cSNickeau * @var bool 19*04fd306cSNickeau */ 20*04fd306cSNickeau protected $isW3cCompliant; 21*04fd306cSNickeau 22*04fd306cSNickeau public function __construct(ExecuteMethod $executor, $isW3cCompliant = false) 23*04fd306cSNickeau { 24*04fd306cSNickeau $this->executor = $executor; 25*04fd306cSNickeau $this->isW3cCompliant = $isW3cCompliant; 26*04fd306cSNickeau } 27*04fd306cSNickeau 28*04fd306cSNickeau /** 29*04fd306cSNickeau * Specify the amount of time the driver should wait when searching for an element if it is not immediately present. 30*04fd306cSNickeau * 31*04fd306cSNickeau * @param int $seconds Wait time in second. 32*04fd306cSNickeau * @return WebDriverTimeouts The current instance. 33*04fd306cSNickeau */ 34*04fd306cSNickeau public function implicitlyWait($seconds) 35*04fd306cSNickeau { 36*04fd306cSNickeau if ($this->isW3cCompliant) { 37*04fd306cSNickeau $this->executor->execute( 38*04fd306cSNickeau DriverCommand::IMPLICITLY_WAIT, 39*04fd306cSNickeau ['implicit' => $seconds * 1000] 40*04fd306cSNickeau ); 41*04fd306cSNickeau 42*04fd306cSNickeau return $this; 43*04fd306cSNickeau } 44*04fd306cSNickeau 45*04fd306cSNickeau $this->executor->execute( 46*04fd306cSNickeau DriverCommand::IMPLICITLY_WAIT, 47*04fd306cSNickeau ['ms' => $seconds * 1000] 48*04fd306cSNickeau ); 49*04fd306cSNickeau 50*04fd306cSNickeau return $this; 51*04fd306cSNickeau } 52*04fd306cSNickeau 53*04fd306cSNickeau /** 54*04fd306cSNickeau * Set the amount of time to wait for an asynchronous script to finish execution before throwing an error. 55*04fd306cSNickeau * 56*04fd306cSNickeau * @param int $seconds Wait time in second. 57*04fd306cSNickeau * @return WebDriverTimeouts The current instance. 58*04fd306cSNickeau */ 59*04fd306cSNickeau public function setScriptTimeout($seconds) 60*04fd306cSNickeau { 61*04fd306cSNickeau if ($this->isW3cCompliant) { 62*04fd306cSNickeau $this->executor->execute( 63*04fd306cSNickeau DriverCommand::SET_SCRIPT_TIMEOUT, 64*04fd306cSNickeau ['script' => $seconds * 1000] 65*04fd306cSNickeau ); 66*04fd306cSNickeau 67*04fd306cSNickeau return $this; 68*04fd306cSNickeau } 69*04fd306cSNickeau 70*04fd306cSNickeau $this->executor->execute( 71*04fd306cSNickeau DriverCommand::SET_SCRIPT_TIMEOUT, 72*04fd306cSNickeau ['ms' => $seconds * 1000] 73*04fd306cSNickeau ); 74*04fd306cSNickeau 75*04fd306cSNickeau return $this; 76*04fd306cSNickeau } 77*04fd306cSNickeau 78*04fd306cSNickeau /** 79*04fd306cSNickeau * Set the amount of time to wait for a page load to complete before throwing an error. 80*04fd306cSNickeau * 81*04fd306cSNickeau * @param int $seconds Wait time in second. 82*04fd306cSNickeau * @return WebDriverTimeouts The current instance. 83*04fd306cSNickeau */ 84*04fd306cSNickeau public function pageLoadTimeout($seconds) 85*04fd306cSNickeau { 86*04fd306cSNickeau if ($this->isW3cCompliant) { 87*04fd306cSNickeau $this->executor->execute( 88*04fd306cSNickeau DriverCommand::SET_SCRIPT_TIMEOUT, 89*04fd306cSNickeau ['pageLoad' => $seconds * 1000] 90*04fd306cSNickeau ); 91*04fd306cSNickeau 92*04fd306cSNickeau return $this; 93*04fd306cSNickeau } 94*04fd306cSNickeau 95*04fd306cSNickeau $this->executor->execute(DriverCommand::SET_TIMEOUT, [ 96*04fd306cSNickeau 'type' => 'page load', 97*04fd306cSNickeau 'ms' => $seconds * 1000, 98*04fd306cSNickeau ]); 99*04fd306cSNickeau 100*04fd306cSNickeau return $this; 101*04fd306cSNickeau } 102*04fd306cSNickeau} 103