1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace Facebook\WebDriver\Remote\Service; 4*04fd306cSNickeau 5*04fd306cSNickeauuse Facebook\WebDriver\Exception\DriverServerDiedException; 6*04fd306cSNickeauuse Facebook\WebDriver\Exception\WebDriverException; 7*04fd306cSNickeauuse Facebook\WebDriver\Remote\DriverCommand; 8*04fd306cSNickeauuse Facebook\WebDriver\Remote\HttpCommandExecutor; 9*04fd306cSNickeauuse Facebook\WebDriver\Remote\WebDriverCommand; 10*04fd306cSNickeauuse Facebook\WebDriver\Remote\WebDriverResponse; 11*04fd306cSNickeau 12*04fd306cSNickeau/** 13*04fd306cSNickeau * A HttpCommandExecutor that talks to a local driver service instead of a remote server. 14*04fd306cSNickeau */ 15*04fd306cSNickeauclass DriverCommandExecutor extends HttpCommandExecutor 16*04fd306cSNickeau{ 17*04fd306cSNickeau /** 18*04fd306cSNickeau * @var DriverService 19*04fd306cSNickeau */ 20*04fd306cSNickeau private $service; 21*04fd306cSNickeau 22*04fd306cSNickeau public function __construct(DriverService $service) 23*04fd306cSNickeau { 24*04fd306cSNickeau parent::__construct($service->getURL()); 25*04fd306cSNickeau $this->service = $service; 26*04fd306cSNickeau } 27*04fd306cSNickeau 28*04fd306cSNickeau /** 29*04fd306cSNickeau * @param WebDriverCommand $command 30*04fd306cSNickeau * 31*04fd306cSNickeau * @throws \Exception 32*04fd306cSNickeau * @throws WebDriverException 33*04fd306cSNickeau * @return WebDriverResponse 34*04fd306cSNickeau */ 35*04fd306cSNickeau public function execute(WebDriverCommand $command) 36*04fd306cSNickeau { 37*04fd306cSNickeau if ($command->getName() === DriverCommand::NEW_SESSION) { 38*04fd306cSNickeau $this->service->start(); 39*04fd306cSNickeau } 40*04fd306cSNickeau 41*04fd306cSNickeau try { 42*04fd306cSNickeau $value = parent::execute($command); 43*04fd306cSNickeau if ($command->getName() === DriverCommand::QUIT) { 44*04fd306cSNickeau $this->service->stop(); 45*04fd306cSNickeau } 46*04fd306cSNickeau 47*04fd306cSNickeau return $value; 48*04fd306cSNickeau } catch (\Exception $e) { 49*04fd306cSNickeau if (!$this->service->isRunning()) { 50*04fd306cSNickeau throw new DriverServerDiedException($e); 51*04fd306cSNickeau } 52*04fd306cSNickeau throw $e; 53*04fd306cSNickeau } 54*04fd306cSNickeau } 55*04fd306cSNickeau} 56