xref: /plugin/combo/vendor/php-webdriver/webdriver/lib/Support/Events/EventFiringWebDriverNavigation.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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