1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace Facebook\WebDriver\Support\Events; 4*04fd306cSNickeau 5*04fd306cSNickeauuse Facebook\WebDriver\Exception\WebDriverException; 6*04fd306cSNickeauuse Facebook\WebDriver\WebDriverDispatcher; 7*04fd306cSNickeauuse Facebook\WebDriver\WebDriverNavigationInterface; 8*04fd306cSNickeau 9*04fd306cSNickeauclass EventFiringWebDriverNavigation implements WebDriverNavigationInterface 10*04fd306cSNickeau{ 11*04fd306cSNickeau /** 12*04fd306cSNickeau * @var WebDriverNavigationInterface 13*04fd306cSNickeau */ 14*04fd306cSNickeau protected $navigator; 15*04fd306cSNickeau /** 16*04fd306cSNickeau * @var WebDriverDispatcher 17*04fd306cSNickeau */ 18*04fd306cSNickeau protected $dispatcher; 19*04fd306cSNickeau 20*04fd306cSNickeau /** 21*04fd306cSNickeau * @param WebDriverNavigationInterface $navigator 22*04fd306cSNickeau * @param WebDriverDispatcher $dispatcher 23*04fd306cSNickeau */ 24*04fd306cSNickeau public function __construct(WebDriverNavigationInterface $navigator, WebDriverDispatcher $dispatcher) 25*04fd306cSNickeau { 26*04fd306cSNickeau $this->navigator = $navigator; 27*04fd306cSNickeau $this->dispatcher = $dispatcher; 28*04fd306cSNickeau } 29*04fd306cSNickeau 30*04fd306cSNickeau /** 31*04fd306cSNickeau * @return WebDriverDispatcher 32*04fd306cSNickeau */ 33*04fd306cSNickeau public function getDispatcher() 34*04fd306cSNickeau { 35*04fd306cSNickeau return $this->dispatcher; 36*04fd306cSNickeau } 37*04fd306cSNickeau 38*04fd306cSNickeau /** 39*04fd306cSNickeau * @return WebDriverNavigationInterface 40*04fd306cSNickeau */ 41*04fd306cSNickeau public function getNavigator() 42*04fd306cSNickeau { 43*04fd306cSNickeau return $this->navigator; 44*04fd306cSNickeau } 45*04fd306cSNickeau 46*04fd306cSNickeau public function back() 47*04fd306cSNickeau { 48*04fd306cSNickeau $this->dispatch( 49*04fd306cSNickeau 'beforeNavigateBack', 50*04fd306cSNickeau $this->getDispatcher()->getDefaultDriver() 51*04fd306cSNickeau ); 52*04fd306cSNickeau 53*04fd306cSNickeau try { 54*04fd306cSNickeau $this->navigator->back(); 55*04fd306cSNickeau } catch (WebDriverException $exception) { 56*04fd306cSNickeau $this->dispatchOnException($exception); 57*04fd306cSNickeau } 58*04fd306cSNickeau $this->dispatch( 59*04fd306cSNickeau 'afterNavigateBack', 60*04fd306cSNickeau $this->getDispatcher()->getDefaultDriver() 61*04fd306cSNickeau ); 62*04fd306cSNickeau 63*04fd306cSNickeau return $this; 64*04fd306cSNickeau } 65*04fd306cSNickeau 66*04fd306cSNickeau public function forward() 67*04fd306cSNickeau { 68*04fd306cSNickeau $this->dispatch( 69*04fd306cSNickeau 'beforeNavigateForward', 70*04fd306cSNickeau $this->getDispatcher()->getDefaultDriver() 71*04fd306cSNickeau ); 72*04fd306cSNickeau 73*04fd306cSNickeau try { 74*04fd306cSNickeau $this->navigator->forward(); 75*04fd306cSNickeau } catch (WebDriverException $exception) { 76*04fd306cSNickeau $this->dispatchOnException($exception); 77*04fd306cSNickeau } 78*04fd306cSNickeau $this->dispatch( 79*04fd306cSNickeau 'afterNavigateForward', 80*04fd306cSNickeau $this->getDispatcher()->getDefaultDriver() 81*04fd306cSNickeau ); 82*04fd306cSNickeau 83*04fd306cSNickeau return $this; 84*04fd306cSNickeau } 85*04fd306cSNickeau 86*04fd306cSNickeau public function refresh() 87*04fd306cSNickeau { 88*04fd306cSNickeau try { 89*04fd306cSNickeau $this->navigator->refresh(); 90*04fd306cSNickeau 91*04fd306cSNickeau return $this; 92*04fd306cSNickeau } catch (WebDriverException $exception) { 93*04fd306cSNickeau $this->dispatchOnException($exception); 94*04fd306cSNickeau throw $exception; 95*04fd306cSNickeau } 96*04fd306cSNickeau } 97*04fd306cSNickeau 98*04fd306cSNickeau public function to($url) 99*04fd306cSNickeau { 100*04fd306cSNickeau $this->dispatch( 101*04fd306cSNickeau 'beforeNavigateTo', 102*04fd306cSNickeau $url, 103*04fd306cSNickeau $this->getDispatcher()->getDefaultDriver() 104*04fd306cSNickeau ); 105*04fd306cSNickeau 106*04fd306cSNickeau try { 107*04fd306cSNickeau $this->navigator->to($url); 108*04fd306cSNickeau } catch (WebDriverException $exception) { 109*04fd306cSNickeau $this->dispatchOnException($exception); 110*04fd306cSNickeau throw $exception; 111*04fd306cSNickeau } 112*04fd306cSNickeau 113*04fd306cSNickeau $this->dispatch( 114*04fd306cSNickeau 'afterNavigateTo', 115*04fd306cSNickeau $url, 116*04fd306cSNickeau $this->getDispatcher()->getDefaultDriver() 117*04fd306cSNickeau ); 118*04fd306cSNickeau 119*04fd306cSNickeau return $this; 120*04fd306cSNickeau } 121*04fd306cSNickeau 122*04fd306cSNickeau /** 123*04fd306cSNickeau * @param mixed $method 124*04fd306cSNickeau * @param mixed ...$arguments 125*04fd306cSNickeau */ 126*04fd306cSNickeau protected function dispatch($method, ...$arguments) 127*04fd306cSNickeau { 128*04fd306cSNickeau if (!$this->dispatcher) { 129*04fd306cSNickeau return; 130*04fd306cSNickeau } 131*04fd306cSNickeau 132*04fd306cSNickeau $this->dispatcher->dispatch($method, $arguments); 133*04fd306cSNickeau } 134*04fd306cSNickeau 135*04fd306cSNickeau /** 136*04fd306cSNickeau * @param WebDriverException $exception 137*04fd306cSNickeau */ 138*04fd306cSNickeau protected function dispatchOnException(WebDriverException $exception) 139*04fd306cSNickeau { 140*04fd306cSNickeau $this->dispatch('onException', $exception); 141*04fd306cSNickeau } 142*04fd306cSNickeau} 143