Skip to content

Commit 9d23692

Browse files
author
Justin Bishop
committed
adding new functions to match protocol, putting more data in exceptions.
Summary:adding window, window/size, window/position, keys. removing modifiers. also putting full server result in exceptions for those who may find it useful. note focusWindow() is how you call the window/ protocol endpoint directly, which has been added to the readme. Reviewers: Test Plan: Task ID:
1 parent bc79640 commit 9d23692

File tree

6 files changed

+76
-38
lines changed

6 files changed

+76
-38
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@ Each command is just the name of a function call, and each additional path is ju
5050

5151
$session->orientation();
5252

53-
## A few Element/Cookie/Session convenience exceptions.
53+
## A few Element/Cookie/Session/Window convenience exceptions.
5454

5555
* To find elements, use element($using, $value) and elements($using, $value), where $using is the locator strategy ('xpath', 'id', 'name', etc)
5656
* Use getAllCookies(), setCookie($cookie_json), deleteAllCookies(), and deleteCookie($name)
57+
* To focus a window, use focusWindow($name)
5758
* Visit pages with open(), close the browser window with close()

WebDriver.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,11 @@ public function session($browser = 'firefox',
3434

3535
return new WebDriverSession($results['info']['url']);
3636
}
37+
38+
// TODO(jubishop): Create WebDriverSession instances
39+
public function sessions() {
40+
return $this->curl(
41+
'GET',
42+
'/sessions');
43+
}
3744
}

WebDriverBase.php

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,75 +15,75 @@
1515

1616
abstract class WebDriverBase {
1717

18-
public static function throwException($status_code, $message) {
18+
public static function throwException($status_code, $message, $results) {
1919
switch ($status_code) {
2020
case 0:
2121
// Success
2222
break;
2323
case 1:
24-
throw new IndexOutOfBoundsWebDriverError($message);
24+
throw new IndexOutOfBoundsWebDriverError($message, $results);
2525
case 2:
26-
throw new NoCollectionWebDriverError($message);
26+
throw new NoCollectionWebDriverError($message, $results);
2727
case 3:
28-
throw new NoStringWebDriverError($message);
28+
throw new NoStringWebDriverError($message, $results);
2929
case 4:
30-
throw new NoStringLengthWebDriverError($message);
30+
throw new NoStringLengthWebDriverError($message, $results);
3131
case 5:
32-
throw new NoStringWrapperWebDriverError($message);
32+
throw new NoStringWrapperWebDriverError($message, $results);
3333
case 6:
34-
throw new NoSuchDriverWebDriverError($message);
34+
throw new NoSuchDriverWebDriverError($message, $results);
3535
case 7:
36-
throw new NoSuchElementWebDriverError($message);
36+
throw new NoSuchElementWebDriverError($message, $results);
3737
case 8:
38-
throw new NoSuchFrameWebDriverError($message);
38+
throw new NoSuchFrameWebDriverError($message, $results);
3939
case 9:
40-
throw new UnknownCommandWebDriverError($message);
40+
throw new UnknownCommandWebDriverError($message, $results);
4141
case 10:
42-
throw new ObsoleteElementWebDriverError($message);
42+
throw new ObsoleteElementWebDriverError($message, $results);
4343
case 11:
44-
throw new ElementNotDisplayedWebDriverError($message);
44+
throw new ElementNotDisplayedWebDriverError($message, $results);
4545
case 12:
46-
throw new InvalidElementStateWebDriverError($message);
46+
throw new InvalidElementStateWebDriverError($message, $results);
4747
case 13:
48-
throw new UnhandledWebDriverError($message);
48+
throw new UnhandledWebDriverError($message, $results);
4949
case 14:
50-
throw new ExpectedWebDriverError($message);
50+
throw new ExpectedWebDriverError($message, $results);
5151
case 15:
52-
throw new ElementNotSelectableWebDriverError($message);
52+
throw new ElementNotSelectableWebDriverError($message, $results);
5353
case 16:
54-
throw new NoSuchDocumentWebDriverError($message);
54+
throw new NoSuchDocumentWebDriverError($message, $results);
5555
case 17:
56-
throw new UnexpectedJavascriptWebDriverError($message);
56+
throw new UnexpectedJavascriptWebDriverError($message, $results);
5757
case 18:
58-
throw new NoScriptResultWebDriverError($message);
58+
throw new NoScriptResultWebDriverError($message, $results);
5959
case 19:
60-
throw new XPathLookupWebDriverError($message);
60+
throw new XPathLookupWebDriverError($message, $results);
6161
case 20:
62-
throw new NoSuchCollectionWebDriverError($message);
62+
throw new NoSuchCollectionWebDriverError($message, $results);
6363
case 21:
64-
throw new TimeOutWebDriverError($message);
64+
throw new TimeOutWebDriverError($message, $results);
6565
case 22:
66-
throw new NullPointerWebDriverError($message);
66+
throw new NullPointerWebDriverError($message, $results);
6767
case 23:
68-
throw new NoSuchWindowWebDriverError($message);
68+
throw new NoSuchWindowWebDriverError($message, $results);
6969
case 24:
70-
throw new InvalidCookieDomainWebDriverError($message);
70+
throw new InvalidCookieDomainWebDriverError($message, $results);
7171
case 25:
72-
throw new UnableToSetCookieWebDriverError($message);
72+
throw new UnableToSetCookieWebDriverError($message, $results);
7373
case 26:
74-
throw new UnexpectedAlertOpenWebDriverError($message);
74+
throw new UnexpectedAlertOpenWebDriverError($message, $results);
7575
case 27:
76-
throw new NoAlertOpenWebDriverError($message);
76+
throw new NoAlertOpenWebDriverError($message, $results);
7777
case 28:
78-
throw new ScriptTimeoutWebDriverError($message);
78+
throw new ScriptTimeoutWebDriverError($message, $results);
7979
case 29:
80-
throw new InvalidElementCoordinatesWebDriverError($message);
80+
throw new InvalidElementCoordinatesWebDriverError($message, $results);
8181
case 30:
82-
throw new IMENotAvailableWebDriverError($message);
82+
throw new IMENotAvailableWebDriverError($message, $results);
8383
case 31:
84-
throw new IMEEngineActivationFailedWebDriverError($message);
84+
throw new IMEEngineActivationFailedWebDriverError($message, $results);
8585
case 32:
86-
throw new InvalidSelectorWebDriverError($message);
86+
throw new InvalidSelectorWebDriverError($message, $results);
8787
}
8888
}
8989

@@ -174,7 +174,7 @@ protected function curl(http://github.com/$http_method,%3C/div%3E%3C/code%3E%3C/div%3E%3C/td%3E%3C/tr%3E%3Ctr%20class=%22diff-line-row%22%3E%3Ctd%20data-grid-cell-id=%22diff-c67b530e1cad5dad010923b03baf2dfde7fca2a61353687ea2601a810879dde0-174-174-0%22%20data-selected=%22false%22%20role=%22gridcell%22%20style=%22background-color:var(--bgColor-default);text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative diff-line-number-neutral left-side">174
174
$message = $value['message'];
175175
}
176176

177-
self::throwException($results['status'], $message);
177+
self::throwException($results['status'], $message, $results);
178178

179179
return array('value' => $value, 'info' => $info);
180180
}

WebDriverContainer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public function element($using, $value) {
2727
sprintf(
2828
'Element not found with %s, %s',
2929
$using,
30-
$value) . "\n\n" . $e->getMessage());
30+
$value) . "\n\n" . $e->getMessage(),
31+
$e->getResults());
3132
}
3233

3334
return $this->webDriverElement($results['value']);

WebDriverExceptions.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,19 @@
1515

1616
final class WebDriverCurlException extends Exception {} // When curls fail
1717

18-
abstract class WebDriverException extends Exception {}
18+
abstract class WebDriverException extends Exception {
19+
private $results;
20+
21+
public function __construct($message, $results = null) {
22+
parent::__construct($message);
23+
$this->results = $results;
24+
}
25+
26+
public function getResults() {
27+
return $this->results;
28+
}
29+
}
30+
1931
class IndexOutOfBoundsWebDriverError extends WebDriverException {} // 1
2032
class NoCollectionWebDriverError extends WebDriverException {} // 2
2133
class NoStringWebDriverError extends WebDriverException {} // 3

WebDriverSession.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ protected function methods() {
2929
'window' => array('POST', 'DELETE'),
3030
'source' => 'GET',
3131
'title' => 'GET',
32-
'modifier' => 'POST',
32+
'keys' => 'POST',
3333
'orientation' => array('GET', 'POST'),
3434
'alert_text' => array('GET', 'POST'),
3535
'accept_alert' => 'POST',
@@ -100,6 +100,23 @@ public function ime() {
100100
));
101101
}
102102

103+
// /session/:sessionId/window (POST)
104+
public function focusWindow($name) {
105+
$this->curl(
106+
'POST',
107+
'/window',
108+
array('name' => $name));
109+
return $this;
110+
}
111+
112+
public function window($window_handle = 'current') {
113+
$item = new WebDriverSimpleItem($this->url . '/window/' . $window_handle);
114+
return $item->setMethods(array(
115+
'size' => array('GET', 'POST'),
116+
'position' => array('GET', 'POST'),
117+
));
118+
}
119+
103120
public function touch() {
104121
$item = new WebDriverSimpleItem($this->url . '/touch');
105122
return $item->setMethods(array(

0 commit comments

Comments
 (0)