/** * Set the default timeout for WaitUntil * @param int $timeout the new default timeout */ public static function setDefaultWaitUntilTimeout($timeout) { $timeout = (int) $timeout; self::$defaultWaitUntilTimeout = $timeout > 0 ? $timeout : 0; }
/** * @param $callback Callback to run until it returns not null or timeout occurs * @param null|int $timeout * @param null|int $sleepInterval the delay between 2 iterations of the callback * @return mixed * @throws PHPUnit_Extensions_Selenium2TestCase_Exception * @throws PHPUnit_Extensions_Selenium2TestCase_WebDriverException */ public function run($callback, $timeout = NULL, $sleepInterval = NULL) { if (!is_callable($callback)) { throw new PHPUnit_Extensions_Selenium2TestCase_Exception('The valid callback is expected'); } // if there was an implicit timeout specified - remember it and temporarily turn it off $implicitWait = $this->_testCase->timeouts()->getLastImplicitWaitValue(); if ($implicitWait) { $this->_testCase->timeouts()->implicitWait(0); } if (is_null($sleepInterval)) { $sleepInterval = PHPUnit_Extensions_Selenium2TestCase::defaultWaitUntilSleepInterval(); } $sleepInterval *= 1000; if (is_null($timeout)) { $timeout = PHPUnit_Extensions_Selenium2TestCase::defaultWaitUntilTimeout(); } $timeout /= 1000; $endTime = microtime(TRUE) + $timeout; $lastException = NULL; while (TRUE) { try { $result = call_user_func($callback, $this->_testCase); if (!is_null($result)) { if ($implicitWait) { $this->_testCase->timeouts()->implicitWait($implicitWait); } return $result; } } catch (Exception $e) { $lastException = $e; } if (microtime(TRUE) > $endTime) { if ($implicitWait) { $this->_testCase->timeouts()->implicitWait($implicitWait); } $message = "Timed out after {$timeout} second" . ($timeout != 1 ? 's' : ''); throw new PHPUnit_Extensions_Selenium2TestCase_WebDriverException($message, PHPUnit_Extensions_Selenium2TestCase_WebDriverException::Timeout, $lastException); } usleep($sleepInterval); } }
public function testWaitUntilDefaultTimeout() { $this->assertEquals(0, PHPUnit_Extensions_Selenium2TestCase::defaultWaitUntilTimeout()); PHPUnit_Extensions_Selenium2TestCase::setDefaultWaitUntilTimeout(100); $this->assertEquals(100, PHPUnit_Extensions_Selenium2TestCase::defaultWaitUntilTimeout()); }