1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace Facebook\WebDriver\Exception; 4*04fd306cSNickeau 5*04fd306cSNickeauuse Exception; 6*04fd306cSNickeau 7*04fd306cSNickeau/** 8*04fd306cSNickeau * @see https://w3c.github.io/webdriver/#errors 9*04fd306cSNickeau */ 10*04fd306cSNickeauclass WebDriverException extends Exception 11*04fd306cSNickeau{ 12*04fd306cSNickeau private $results; 13*04fd306cSNickeau 14*04fd306cSNickeau /** 15*04fd306cSNickeau * @param string $message 16*04fd306cSNickeau * @param mixed $results 17*04fd306cSNickeau */ 18*04fd306cSNickeau public function __construct($message, $results = null) 19*04fd306cSNickeau { 20*04fd306cSNickeau parent::__construct($message); 21*04fd306cSNickeau $this->results = $results; 22*04fd306cSNickeau } 23*04fd306cSNickeau 24*04fd306cSNickeau /** 25*04fd306cSNickeau * @return mixed 26*04fd306cSNickeau */ 27*04fd306cSNickeau public function getResults() 28*04fd306cSNickeau { 29*04fd306cSNickeau return $this->results; 30*04fd306cSNickeau } 31*04fd306cSNickeau 32*04fd306cSNickeau /** 33*04fd306cSNickeau * Throw WebDriverExceptions based on WebDriver status code. 34*04fd306cSNickeau * 35*04fd306cSNickeau * @param int|string $status_code 36*04fd306cSNickeau * @param string $message 37*04fd306cSNickeau * @param mixed $results 38*04fd306cSNickeau * 39*04fd306cSNickeau * @throws ElementClickInterceptedException 40*04fd306cSNickeau * @throws ElementNotInteractableException 41*04fd306cSNickeau * @throws ElementNotSelectableException 42*04fd306cSNickeau * @throws ElementNotVisibleException 43*04fd306cSNickeau * @throws ExpectedException 44*04fd306cSNickeau * @throws IMEEngineActivationFailedException 45*04fd306cSNickeau * @throws IMENotAvailableException 46*04fd306cSNickeau * @throws IndexOutOfBoundsException 47*04fd306cSNickeau * @throws InsecureCertificateException 48*04fd306cSNickeau * @throws InvalidArgumentException 49*04fd306cSNickeau * @throws InvalidCookieDomainException 50*04fd306cSNickeau * @throws InvalidCoordinatesException 51*04fd306cSNickeau * @throws InvalidElementStateException 52*04fd306cSNickeau * @throws InvalidSelectorException 53*04fd306cSNickeau * @throws InvalidSessionIdException 54*04fd306cSNickeau * @throws JavascriptErrorException 55*04fd306cSNickeau * @throws MoveTargetOutOfBoundsException 56*04fd306cSNickeau * @throws NoAlertOpenException 57*04fd306cSNickeau * @throws NoCollectionException 58*04fd306cSNickeau * @throws NoScriptResultException 59*04fd306cSNickeau * @throws NoStringException 60*04fd306cSNickeau * @throws NoStringLengthException 61*04fd306cSNickeau * @throws NoStringWrapperException 62*04fd306cSNickeau * @throws NoSuchAlertException 63*04fd306cSNickeau * @throws NoSuchCollectionException 64*04fd306cSNickeau * @throws NoSuchCookieException 65*04fd306cSNickeau * @throws NoSuchDocumentException 66*04fd306cSNickeau * @throws NoSuchDriverException 67*04fd306cSNickeau * @throws NoSuchElementException 68*04fd306cSNickeau * @throws NoSuchFrameException 69*04fd306cSNickeau * @throws NoSuchWindowException 70*04fd306cSNickeau * @throws NullPointerException 71*04fd306cSNickeau * @throws ScriptTimeoutException 72*04fd306cSNickeau * @throws SessionNotCreatedException 73*04fd306cSNickeau * @throws StaleElementReferenceException 74*04fd306cSNickeau * @throws TimeoutException 75*04fd306cSNickeau * @throws UnableToCaptureScreenException 76*04fd306cSNickeau * @throws UnableToSetCookieException 77*04fd306cSNickeau * @throws UnexpectedAlertOpenException 78*04fd306cSNickeau * @throws UnexpectedJavascriptException 79*04fd306cSNickeau * @throws UnknownCommandException 80*04fd306cSNickeau * @throws UnknownErrorException 81*04fd306cSNickeau * @throws UnknownMethodException 82*04fd306cSNickeau * @throws UnknownServerException 83*04fd306cSNickeau * @throws UnrecognizedExceptionException 84*04fd306cSNickeau * @throws UnsupportedOperationException 85*04fd306cSNickeau * @throws XPathLookupException 86*04fd306cSNickeau */ 87*04fd306cSNickeau public static function throwException($status_code, $message, $results) 88*04fd306cSNickeau { 89*04fd306cSNickeau if (is_string($status_code)) { 90*04fd306cSNickeau // @see https://w3c.github.io/webdriver/#errors 91*04fd306cSNickeau switch ($status_code) { 92*04fd306cSNickeau case 'element click intercepted': 93*04fd306cSNickeau throw new ElementClickInterceptedException($message, $results); 94*04fd306cSNickeau case 'element not interactable': 95*04fd306cSNickeau throw new ElementNotInteractableException($message, $results); 96*04fd306cSNickeau case 'insecure certificate': 97*04fd306cSNickeau throw new InsecureCertificateException($message, $results); 98*04fd306cSNickeau case 'invalid argument': 99*04fd306cSNickeau throw new InvalidArgumentException($message, $results); 100*04fd306cSNickeau case 'invalid cookie domain': 101*04fd306cSNickeau throw new InvalidCookieDomainException($message, $results); 102*04fd306cSNickeau case 'invalid element state': 103*04fd306cSNickeau throw new InvalidElementStateException($message, $results); 104*04fd306cSNickeau case 'invalid selector': 105*04fd306cSNickeau throw new InvalidSelectorException($message, $results); 106*04fd306cSNickeau case 'invalid session id': 107*04fd306cSNickeau throw new InvalidSessionIdException($message, $results); 108*04fd306cSNickeau case 'javascript error': 109*04fd306cSNickeau throw new JavascriptErrorException($message, $results); 110*04fd306cSNickeau case 'move target out of bounds': 111*04fd306cSNickeau throw new MoveTargetOutOfBoundsException($message, $results); 112*04fd306cSNickeau case 'no such alert': 113*04fd306cSNickeau throw new NoSuchAlertException($message, $results); 114*04fd306cSNickeau case 'no such cookie': 115*04fd306cSNickeau throw new NoSuchCookieException($message, $results); 116*04fd306cSNickeau case 'no such element': 117*04fd306cSNickeau throw new NoSuchElementException($message, $results); 118*04fd306cSNickeau case 'no such frame': 119*04fd306cSNickeau throw new NoSuchFrameException($message, $results); 120*04fd306cSNickeau case 'no such window': 121*04fd306cSNickeau throw new NoSuchWindowException($message, $results); 122*04fd306cSNickeau case 'script timeout': 123*04fd306cSNickeau throw new ScriptTimeoutException($message, $results); 124*04fd306cSNickeau case 'session not created': 125*04fd306cSNickeau throw new SessionNotCreatedException($message, $results); 126*04fd306cSNickeau case 'stale element reference': 127*04fd306cSNickeau throw new StaleElementReferenceException($message, $results); 128*04fd306cSNickeau case 'timeout': 129*04fd306cSNickeau throw new TimeoutException($message, $results); 130*04fd306cSNickeau case 'unable to set cookie': 131*04fd306cSNickeau throw new UnableToSetCookieException($message, $results); 132*04fd306cSNickeau case 'unable to capture screen': 133*04fd306cSNickeau throw new UnableToCaptureScreenException($message, $results); 134*04fd306cSNickeau case 'unexpected alert open': 135*04fd306cSNickeau throw new UnexpectedAlertOpenException($message, $results); 136*04fd306cSNickeau case 'unknown command': 137*04fd306cSNickeau throw new UnknownCommandException($message, $results); 138*04fd306cSNickeau case 'unknown error': 139*04fd306cSNickeau throw new UnknownErrorException($message, $results); 140*04fd306cSNickeau case 'unknown method': 141*04fd306cSNickeau throw new UnknownMethodException($message, $results); 142*04fd306cSNickeau case 'unsupported operation': 143*04fd306cSNickeau throw new UnsupportedOperationException($message, $results); 144*04fd306cSNickeau default: 145*04fd306cSNickeau throw new UnrecognizedExceptionException($message, $results); 146*04fd306cSNickeau } 147*04fd306cSNickeau } 148*04fd306cSNickeau 149*04fd306cSNickeau switch ($status_code) { 150*04fd306cSNickeau case 1: 151*04fd306cSNickeau throw new IndexOutOfBoundsException($message, $results); 152*04fd306cSNickeau case 2: 153*04fd306cSNickeau throw new NoCollectionException($message, $results); 154*04fd306cSNickeau case 3: 155*04fd306cSNickeau throw new NoStringException($message, $results); 156*04fd306cSNickeau case 4: 157*04fd306cSNickeau throw new NoStringLengthException($message, $results); 158*04fd306cSNickeau case 5: 159*04fd306cSNickeau throw new NoStringWrapperException($message, $results); 160*04fd306cSNickeau case 6: 161*04fd306cSNickeau throw new NoSuchDriverException($message, $results); 162*04fd306cSNickeau case 7: 163*04fd306cSNickeau throw new NoSuchElementException($message, $results); 164*04fd306cSNickeau case 8: 165*04fd306cSNickeau throw new NoSuchFrameException($message, $results); 166*04fd306cSNickeau case 9: 167*04fd306cSNickeau throw new UnknownCommandException($message, $results); 168*04fd306cSNickeau case 10: 169*04fd306cSNickeau throw new StaleElementReferenceException($message, $results); 170*04fd306cSNickeau case 11: 171*04fd306cSNickeau throw new ElementNotVisibleException($message, $results); 172*04fd306cSNickeau case 12: 173*04fd306cSNickeau throw new InvalidElementStateException($message, $results); 174*04fd306cSNickeau case 13: 175*04fd306cSNickeau throw new UnknownServerException($message, $results); 176*04fd306cSNickeau case 14: 177*04fd306cSNickeau throw new ExpectedException($message, $results); 178*04fd306cSNickeau case 15: 179*04fd306cSNickeau throw new ElementNotSelectableException($message, $results); 180*04fd306cSNickeau case 16: 181*04fd306cSNickeau throw new NoSuchDocumentException($message, $results); 182*04fd306cSNickeau case 17: 183*04fd306cSNickeau throw new UnexpectedJavascriptException($message, $results); 184*04fd306cSNickeau case 18: 185*04fd306cSNickeau throw new NoScriptResultException($message, $results); 186*04fd306cSNickeau case 19: 187*04fd306cSNickeau throw new XPathLookupException($message, $results); 188*04fd306cSNickeau case 20: 189*04fd306cSNickeau throw new NoSuchCollectionException($message, $results); 190*04fd306cSNickeau case 21: 191*04fd306cSNickeau throw new TimeoutException($message, $results); 192*04fd306cSNickeau case 22: 193*04fd306cSNickeau throw new NullPointerException($message, $results); 194*04fd306cSNickeau case 23: 195*04fd306cSNickeau throw new NoSuchWindowException($message, $results); 196*04fd306cSNickeau case 24: 197*04fd306cSNickeau throw new InvalidCookieDomainException($message, $results); 198*04fd306cSNickeau case 25: 199*04fd306cSNickeau throw new UnableToSetCookieException($message, $results); 200*04fd306cSNickeau case 26: 201*04fd306cSNickeau throw new UnexpectedAlertOpenException($message, $results); 202*04fd306cSNickeau case 27: 203*04fd306cSNickeau throw new NoAlertOpenException($message, $results); 204*04fd306cSNickeau case 28: 205*04fd306cSNickeau throw new ScriptTimeoutException($message, $results); 206*04fd306cSNickeau case 29: 207*04fd306cSNickeau throw new InvalidCoordinatesException($message, $results); 208*04fd306cSNickeau case 30: 209*04fd306cSNickeau throw new IMENotAvailableException($message, $results); 210*04fd306cSNickeau case 31: 211*04fd306cSNickeau throw new IMEEngineActivationFailedException($message, $results); 212*04fd306cSNickeau case 32: 213*04fd306cSNickeau throw new InvalidSelectorException($message, $results); 214*04fd306cSNickeau case 33: 215*04fd306cSNickeau throw new SessionNotCreatedException($message, $results); 216*04fd306cSNickeau case 34: 217*04fd306cSNickeau throw new MoveTargetOutOfBoundsException($message, $results); 218*04fd306cSNickeau default: 219*04fd306cSNickeau throw new UnrecognizedExceptionException($message, $results); 220*04fd306cSNickeau } 221*04fd306cSNickeau } 222*04fd306cSNickeau} 223