1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace Facebook\WebDriver\Remote; 4*04fd306cSNickeau 5*04fd306cSNickeauuse Facebook\WebDriver\Exception\WebDriverException; 6*04fd306cSNickeau 7*04fd306cSNickeauclass CustomWebDriverCommand extends WebDriverCommand 8*04fd306cSNickeau{ 9*04fd306cSNickeau const METHOD_GET = 'GET'; 10*04fd306cSNickeau const METHOD_POST = 'POST'; 11*04fd306cSNickeau 12*04fd306cSNickeau /** @var string */ 13*04fd306cSNickeau private $customUrl; 14*04fd306cSNickeau /** @var string */ 15*04fd306cSNickeau private $customMethod; 16*04fd306cSNickeau 17*04fd306cSNickeau /** 18*04fd306cSNickeau * @param string $session_id 19*04fd306cSNickeau * @param string $url 20*04fd306cSNickeau * @param string $method 21*04fd306cSNickeau * @param array $parameters 22*04fd306cSNickeau */ 23*04fd306cSNickeau public function __construct($session_id, $url, $method, array $parameters) 24*04fd306cSNickeau { 25*04fd306cSNickeau $this->setCustomRequestParameters($url, $method); 26*04fd306cSNickeau 27*04fd306cSNickeau parent::__construct($session_id, DriverCommand::CUSTOM_COMMAND, $parameters); 28*04fd306cSNickeau } 29*04fd306cSNickeau 30*04fd306cSNickeau /** 31*04fd306cSNickeau * @throws WebDriverException 32*04fd306cSNickeau * @return string 33*04fd306cSNickeau */ 34*04fd306cSNickeau public function getCustomUrl() 35*04fd306cSNickeau { 36*04fd306cSNickeau if ($this->customUrl === null) { 37*04fd306cSNickeau throw new WebDriverException('URL of custom command is not set'); 38*04fd306cSNickeau } 39*04fd306cSNickeau 40*04fd306cSNickeau return $this->customUrl; 41*04fd306cSNickeau } 42*04fd306cSNickeau 43*04fd306cSNickeau /** 44*04fd306cSNickeau * @throws WebDriverException 45*04fd306cSNickeau * @return string 46*04fd306cSNickeau */ 47*04fd306cSNickeau public function getCustomMethod() 48*04fd306cSNickeau { 49*04fd306cSNickeau if ($this->customMethod === null) { 50*04fd306cSNickeau throw new WebDriverException('Method of custom command is not set'); 51*04fd306cSNickeau } 52*04fd306cSNickeau 53*04fd306cSNickeau return $this->customMethod; 54*04fd306cSNickeau } 55*04fd306cSNickeau 56*04fd306cSNickeau /** 57*04fd306cSNickeau * @param string $custom_url 58*04fd306cSNickeau * @param string $custom_method 59*04fd306cSNickeau * @throws WebDriverException 60*04fd306cSNickeau */ 61*04fd306cSNickeau protected function setCustomRequestParameters($custom_url, $custom_method) 62*04fd306cSNickeau { 63*04fd306cSNickeau $allowedMethods = [static::METHOD_GET, static::METHOD_POST]; 64*04fd306cSNickeau if (!in_array($custom_method, $allowedMethods, true)) { 65*04fd306cSNickeau throw new WebDriverException( 66*04fd306cSNickeau sprintf( 67*04fd306cSNickeau 'Invalid custom method "%s", must be one of [%s]', 68*04fd306cSNickeau $custom_method, 69*04fd306cSNickeau implode(', ', $allowedMethods) 70*04fd306cSNickeau ) 71*04fd306cSNickeau ); 72*04fd306cSNickeau } 73*04fd306cSNickeau $this->customMethod = $custom_method; 74*04fd306cSNickeau 75*04fd306cSNickeau if (mb_strpos($custom_url, '/') !== 0) { 76*04fd306cSNickeau throw new WebDriverException( 77*04fd306cSNickeau sprintf('URL of custom command has to start with / but is "%s"', $custom_url) 78*04fd306cSNickeau ); 79*04fd306cSNickeau } 80*04fd306cSNickeau $this->customUrl = $custom_url; 81*04fd306cSNickeau } 82*04fd306cSNickeau} 83