Skip to content
This repository was archived by the owner on Mar 4, 2020. It is now read-only.

Commit dfefb6d

Browse files
committed
Merge pull request #76 from ashleydw/master
Implement EventFiringWebDriver and EventFiringWebElement
2 parents 65b336a + b54174d commit dfefb6d

7 files changed

+1036
-1
lines changed

lib/EventFiringWebDriver.php

Lines changed: 345 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,345 @@
1+
<?php
2+
3+
class EventFiringWebDriver {
4+
5+
/**
6+
* @var WebDriver
7+
*/
8+
protected $_webdriver;
9+
10+
/**
11+
* @var WebDriverDispatcher
12+
*/
13+
protected $_dispatcher;
14+
15+
/**
16+
* @param WebDriver $webdriver
17+
* @param WebDriverDispatcher $dispatcher
18+
*/
19+
public function __construct(WebDriver $webdriver, WebDriverDispatcher $dispatcher = null) {
20+
21+
$this->_dispatcher = $dispatcher ? $dispatcher : new WebDriverDispatcher;
22+
if(!$this->_dispatcher->getDefaultDriver())
23+
$this->_dispatcher->setDefaultDriver($this);
24+
25+
$this->_webdriver = $webdriver;
26+
27+
return $this;
28+
29+
}
30+
31+
/**
32+
* @return WebDriverDispatcher
33+
*/
34+
public function getDispatcher() {
35+
return $this->_dispatcher;
36+
}
37+
38+
/**
39+
* @param $method
40+
*/
41+
protected function _dispatch($method) {
42+
43+
if(!$this->_dispatcher)
44+
return;
45+
46+
$arguments = func_get_args();
47+
unset($arguments[0]);
48+
$this->_dispatcher->dispatch($method, $arguments);
49+
50+
}
51+
52+
/**
53+
* @return WebDriver
54+
*/
55+
public function getWebDriver() {
56+
return $this->_webdriver;
57+
}
58+
59+
/**
60+
* @param WebDriverElement $element
61+
* @return EventFiringWebElement
62+
*/
63+
private function newElement(WebDriverElement $element) {
64+
return new EventFiringWebElement($element, $this->getDispatcher());
65+
}
66+
67+
/**
68+
* @param $url
69+
* @return $this
70+
* @throws WebDriverException
71+
*/
72+
public function get($url) {
73+
74+
$this->_dispatch('beforeNavigateTo', $url, $this);
75+
try {
76+
$this->_webdriver->get($url);
77+
} catch (WebDriverException $exception) {
78+
79+
$this->_dispatch('onException', $exception, $this);
80+
throw $exception;
81+
82+
}
83+
$this->_dispatch('afterNavigateTo', $url, $this);
84+
85+
return $this;
86+
87+
}
88+
89+
/**
90+
* @param WebDriverBy $by
91+
* @return array
92+
* @throws WebDriverException
93+
*/
94+
public function findElements(WebDriverBy $by) {
95+
96+
$this->_dispatch('beforeFindBy', $by, null, $this);
97+
98+
try {
99+
100+
$elements = array();
101+
foreach($this->_webdriver->findElements($by) as $element)
102+
$elements[] = $this->newElement($element);
103+
104+
} catch (WebDriverException $exception) {
105+
106+
$this->_dispatch('onException', $exception, $this);
107+
throw $exception;
108+
109+
}
110+
111+
$this->_dispatch('afterFindBy', $by, null, $this);
112+
113+
return $elements;
114+
115+
}
116+
117+
/**
118+
* @param WebDriverBy $by
119+
* @return EventFiringWebElement
120+
* @throws WebDriverException
121+
*/
122+
public function findElement(WebDriverBy $by) {
123+
124+
$this->_dispatch('beforeFindBy', $by, null, $this);
125+
try {
126+
$element = $this->newElement($this->_webdriver->findElement($by));
127+
} catch (WebDriverException $exception) {
128+
129+
$this->_dispatch('onException', $exception, $this);
130+
throw $exception;
131+
132+
}
133+
$this->_dispatch('afterFindBy', $by, null, $this);
134+
135+
return $element;
136+
137+
}
138+
139+
/**
140+
* @param $script
141+
* @param array $arguments
142+
* @return mixed
143+
* @throws WebDriverException
144+
*/
145+
public function executeScript($script, array $arguments = array()) {
146+
147+
$this->_dispatch('beforeScript', $script, $this);
148+
try {
149+
$result = $this->_webdriver->executeScript($script, $arguments);
150+
} catch (WebDriverException $exception) {
151+
152+
$this->_dispatch('onException', $exception, $this);
153+
throw $exception;
154+
155+
}
156+
$this->_dispatch('afterScript', $script, $this);
157+
158+
return $result;
159+
160+
}
161+
162+
/**
163+
* @return $this
164+
* @throws WebDriverException
165+
*/
166+
public function close() {
167+
try {
168+
$this->_webdriver->close();
169+
return $this;
170+
} catch (WebDriverException $exception) {
171+
172+
$this->_dispatch('onException', $exception, $this);
173+
throw $exception;
174+
175+
}
176+
}
177+
178+
/**
179+
* @return string
180+
* @throws WebDriverException
181+
*/
182+
public function getCurrentURL() {
183+
try {
184+
return $this->_webdriver->getCurrentURL();
185+
} catch (WebDriverException $exception) {
186+
187+
$this->_dispatch('onException', $exception, $this);
188+
throw $exception;
189+
190+
}
191+
}
192+
193+
/**
194+
* @return string
195+
* @throws WebDriverException
196+
*/
197+
public function getPageSource() {
198+
try {
199+
return $this->_webdriver->getPageSource();
200+
} catch (WebDriverException $exception) {
201+
202+
$this->_dispatch('onException', $exception, $this);
203+
throw $exception;
204+
205+
}
206+
}
207+
208+
/**
209+
* @return string
210+
* @throws WebDriverException
211+
*/
212+
public function getTitle() {
213+
try {
214+
return $this->_webdriver->getTitle();
215+
} catch (WebDriverException $exception) {
216+
217+
$this->_dispatch('onException', $exception, $this);
218+
throw $exception;
219+
220+
}
221+
}
222+
223+
/**
224+
* @return string
225+
* @throws WebDriverException
226+
*/
227+
public function getWindowHandle() {
228+
try {
229+
return $this->_webdriver->getWindowHandle();
230+
} catch (WebDriverException $exception) {
231+
232+
$this->_dispatch('onException', $exception, $this);
233+
throw $exception;
234+
235+
}
236+
}
237+
238+
/**
239+
* @return array
240+
* @throws WebDriverException
241+
*/
242+
public function getWindowHandles() {
243+
try {
244+
return $this->_webdriver->getWindowHandles();
245+
} catch (WebDriverException $exception) {
246+
247+
$this->_dispatch('onException', $exception, $this);
248+
throw $exception;
249+
250+
}
251+
}
252+
253+
/**
254+
* @throws WebDriverException
255+
*/
256+
public function quit() {
257+
try {
258+
$this->_webdriver->quit();
259+
} catch (WebDriverException $exception) {
260+
261+
$this->_dispatch('onException', $exception, $this);
262+
throw $exception;
263+
264+
}
265+
}
266+
267+
/**
268+
* @param null $save_as
269+
* @return string
270+
* @throws WebDriverException
271+
*/
272+
public function takeScreenshot($save_as = null) {
273+
try {
274+
return $this->_webdriver->takeScreenshot($save_as);
275+
} catch (WebDriverException $exception) {
276+
277+
$this->_dispatch('onException', $exception, $this);
278+
throw $exception;
279+
280+
}
281+
}
282+
283+
/**
284+
* @param int $timeout_in_second
285+
* @param int $interval_in_millisecond
286+
* @return WebDriverWait
287+
* @throws WebDriverException
288+
*/
289+
public function wait($timeout_in_second = 30, $interval_in_millisecond = 250) {
290+
try {
291+
return $this->_webdriver->wait($timeout_in_second, $interval_in_millisecond);
292+
} catch (WebDriverException $exception) {
293+
294+
$this->_dispatch('onException', $exception, $this);
295+
throw $exception;
296+
297+
}
298+
}
299+
300+
/**
301+
* @return WebDriverOptions
302+
* @throws WebDriverException
303+
*/
304+
public function manage() {
305+
try {
306+
return $this->_webdriver->manage();
307+
} catch (WebDriverException $exception) {
308+
309+
$this->_dispatch('onException', $exception, $this);
310+
throw $exception;
311+
312+
}
313+
}
314+
315+
/**
316+
* @return EventFiringWebDriverNavigation
317+
* @throws WebDriverException
318+
*/
319+
public function navigate() {
320+
try {
321+
return new EventFiringWebDriverNavigation($this->_webdriver->navigate(), $this->getDispatcher());
322+
} catch (WebDriverException $exception) {
323+
324+
$this->_dispatch('onException', $exception, $this);
325+
throw $exception;
326+
327+
}
328+
}
329+
330+
/**
331+
* @return WebDriverTargetLocator
332+
* @throws WebDriverException
333+
*/
334+
public function switchTo() {
335+
try {
336+
return $this->_webdriver->switchTo();
337+
} catch (WebDriverException $exception) {
338+
339+
$this->_dispatch('onException', $exception, $this);
340+
throw $exception;
341+
342+
}
343+
}
344+
345+
}

0 commit comments

Comments
 (0)