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

Commit d7b422a

Browse files
author
Ling-Yi Kung
committed
Added setting curl timeout to RemoteWebDriver (defaults to 300000ms).
1 parent 22051a3 commit d7b422a

File tree

3 files changed

+85
-77
lines changed

3 files changed

+85
-77
lines changed

example.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
require_once('lib/__init__.php');
55

6-
// start Firefox
6+
// start Firefox with 5 second timeout
77
$host = 'http://localhost:4444/wd/hub'; // this is the default
88
$capabilities = array(WebDriverCapabilityType::BROWSER_NAME => 'firefox');
9-
$driver = new RemoteWebDriver($host, $capabilities);
9+
$driver = new RemoteWebDriver($host, $capabilities, 5000);
1010

1111
// navigate to 'http://docs.seleniumhq.org/'
1212
$driver->get('http://docs.seleniumhq.org/');

lib/remote/HttpCommandExecutor.php

Lines changed: 78 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -23,78 +23,78 @@ class HttpCommandExecutor implements WebDriverCommandExecutor {
2323
* http://code.google.com/p/selenium/wiki/JsonWireProtocol#Command_Reference
2424
*/
2525
private static $commands = array(
26-
'acceptAlert' => array('method' => 'POST', 'url' => '/session/:sessionId/accept_alert'),
27-
'addCookie' => array('method' => 'POST', 'url' => '/session/:sessionId/cookie'),
28-
'clear' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/clear'),
29-
'clickElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/click'),
30-
'closeCurrentWindow' => array('method' => 'DELETE', 'url' => '/session/:sessionId/window'),
31-
'deleteAllCookies' => array('method' => 'DELETE', 'url' => '/session/:sessionId/cookie'),
32-
'deleteCookie' => array('method' => 'DELETE', 'url' => '/session/:sessionId/cookie/:name'),
33-
'dismissAlert' => array('method' => 'POST', 'url' => '/session/:sessionId/dismiss_alert'),
34-
'elementEquals' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/equals/:other'),
35-
'elementFindElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/element'),
36-
'elementFindElements' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/elements'),
37-
'executeScript' => array('method' => 'POST', 'url' => '/session/:sessionId/execute'),
38-
'findElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element'),
39-
'findElements' => array('method' => 'POST', 'url' => '/session/:sessionId/elements'),
40-
'focusFrame' => array('method' => 'POST', 'url' => '/session/:sessionId/frame'),
41-
'focusWindow' => array('method' => 'POST', 'url' => '/session/:sessionId/window'),
42-
'get' => array('method' => 'POST', 'url' => '/session/:sessionId/url'),
43-
'getActiveElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/active'),
44-
'getAlertText' => array('method' => 'GET', 'url' => '/session/:sessionId/alert_text'),
45-
'getAllCookies' => array('method' => 'GET', 'url' => '/session/:sessionId/cookie'),
46-
'getAvailableLogTypes' => array('method' => 'GET', 'url' => '/session/:sessionId/log/types'),
47-
'getCurrentURL' => array('method' => 'GET', 'url' => '/session/:sessionId/url'),
26+
'acceptAlert' => array('method' => 'POST', 'url' => '/session/:sessionId/accept_alert'),
27+
'addCookie' => array('method' => 'POST', 'url' => '/session/:sessionId/cookie'),
28+
'clear' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/clear'),
29+
'clickElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/click'),
30+
'closeCurrentWindow' => array('method' => 'DELETE', 'url' => '/session/:sessionId/window'),
31+
'deleteAllCookies' => array('method' => 'DELETE', 'url' => '/session/:sessionId/cookie'),
32+
'deleteCookie' => array('method' => 'DELETE', 'url' => '/session/:sessionId/cookie/:name'),
33+
'dismissAlert' => array('method' => 'POST', 'url' => '/session/:sessionId/dismiss_alert'),
34+
'elementEquals' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/equals/:other'),
35+
'elementFindElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/element'),
36+
'elementFindElements' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/elements'),
37+
'executeScript' => array('method' => 'POST', 'url' => '/session/:sessionId/execute'),
38+
'findElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element'),
39+
'findElements' => array('method' => 'POST', 'url' => '/session/:sessionId/elements'),
40+
'focusFrame' => array('method' => 'POST', 'url' => '/session/:sessionId/frame'),
41+
'focusWindow' => array('method' => 'POST', 'url' => '/session/:sessionId/window'),
42+
'get' => array('method' => 'POST', 'url' => '/session/:sessionId/url'),
43+
'getActiveElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/active'),
44+
'getAlertText' => array('method' => 'GET', 'url' => '/session/:sessionId/alert_text'),
45+
'getAllCookies' => array('method' => 'GET', 'url' => '/session/:sessionId/cookie'),
46+
'getAvailableLogTypes' => array('method' => 'GET', 'url' => '/session/:sessionId/log/types'),
47+
'getCurrentURL' => array('method' => 'GET', 'url' => '/session/:sessionId/url'),
4848
'getCurrentWindowHandle' => array('method' => 'GET', 'url' => '/session/:sessionId/window_handle'),
49-
'getElementAttribute' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/attribute/:name'),
50-
'getElementCSSValue' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/css/:propertyName'),
51-
'getElementLocation' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/location'),
49+
'getElementAttribute' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/attribute/:name'),
50+
'getElementCSSValue' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/css/:propertyName'),
51+
'getElementLocation' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/location'),
5252
'getElementLocationOnceScrolledIntoView' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/location_in_view'),
53-
'getElementSize' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/size'),
54-
'getElementTagName' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/name'),
55-
'getElementText' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/text'),
56-
'getLog' => array('method' => 'POST', 'url' => '/session/:sessionId/log'),
57-
'getPageSource' => array('method' => 'GET', 'url' => '/session/:sessionId/source'),
58-
'getScreenOrientation' => array('method' => 'GET', 'url' => '/session/:sessionId/orientation'),
59-
'getSession' => array('method' => 'GET', 'url' => '/session/:sessionId'),
60-
'getTitle' => array('method' => 'GET', 'url' => '/session/:sessionId/title'),
61-
'getWindowHandles' => array('method' => 'GET', 'url' => '/session/:sessionId/window_handles'),
62-
'getWindowPosition' => array('method' => 'GET', 'url' => '/session/:sessionId/window/:windowHandle/position'),
63-
'getWindowSize' => array('method' => 'GET', 'url' => '/session/:sessionId/window/:windowHandle/size'),
64-
'goBack' => array('method' => 'POST', 'url' => '/session/:sessionId/back'),
65-
'goForward' => array('method' => 'POST', 'url' => '/session/:sessionId/forward'),
66-
'isElementDisplayed'=> array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/displayed'),
67-
'isElementEnabled'=> array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/enabled'),
68-
'isElementSelected'=> array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/selected'),
69-
'maximizeWindow' => array('method' => 'POST', 'url' => '/session/:sessionId/window/:windowHandle/maximize'),
70-
'mouseButtonDown' => array('method' => 'POST', 'url' => '/session/:sessionId/buttondown'),
71-
'mouseButtonUp' => array('method' => 'POST', 'url' => '/session/:sessionId/buttonup'),
72-
'mouseClick' => array('method' => 'POST', 'url' => '/session/:sessionId/click'),
73-
'mouseDoubleClick' => array('method' => 'POST', 'url' => '/session/:sessionId/doubleclick'),
74-
'mouseMoveTo' => array('method' => 'POST', 'url' => '/session/:sessionId/moveto'),
75-
'newSession' => array('method' => 'POST', 'url' => '/session'),
76-
'quit' => array('method' => 'DELETE', 'url' => '/session/:sessionId'),
77-
'refreshPage' => array('method' => 'POST', 'url' => '/session/:sessionId/refresh'),
78-
'sendFile' => array('method' => 'POST', 'url' => '/session/:sessionId/file'), // undocumented
79-
'sendKeys' => array('method' => 'POST', 'url' => '/session/:sessionId/keys'),
80-
'sendKeysToAlert' => array('method' => 'POST', 'url' => '/session/:sessionId/alert_text'),
81-
'sendKeysToElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/value'),
53+
'getElementSize' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/size'),
54+
'getElementTagName' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/name'),
55+
'getElementText' => array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/text'),
56+
'getLog' => array('method' => 'POST', 'url' => '/session/:sessionId/log'),
57+
'getPageSource' => array('method' => 'GET', 'url' => '/session/:sessionId/source'),
58+
'getScreenOrientation' => array('method' => 'GET', 'url' => '/session/:sessionId/orientation'),
59+
'getSession' => array('method' => 'GET', 'url' => '/session/:sessionId'),
60+
'getTitle' => array('method' => 'GET', 'url' => '/session/:sessionId/title'),
61+
'getWindowHandles' => array('method' => 'GET', 'url' => '/session/:sessionId/window_handles'),
62+
'getWindowPosition' => array('method' => 'GET', 'url' => '/session/:sessionId/window/:windowHandle/position'),
63+
'getWindowSize' => array('method' => 'GET', 'url' => '/session/:sessionId/window/:windowHandle/size'),
64+
'goBack' => array('method' => 'POST', 'url' => '/session/:sessionId/back'),
65+
'goForward' => array('method' => 'POST', 'url' => '/session/:sessionId/forward'),
66+
'isElementDisplayed'=> array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/displayed'),
67+
'isElementEnabled'=> array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/enabled'),
68+
'isElementSelected'=> array('method' => 'GET', 'url' => '/session/:sessionId/element/:id/selected'),
69+
'maximizeWindow' => array('method' => 'POST', 'url' => '/session/:sessionId/window/:windowHandle/maximize'),
70+
'mouseButtonDown' => array('method' => 'POST', 'url' => '/session/:sessionId/buttondown'),
71+
'mouseButtonUp' => array('method' => 'POST', 'url' => '/session/:sessionId/buttonup'),
72+
'mouseClick' => array('method' => 'POST', 'url' => '/session/:sessionId/click'),
73+
'mouseDoubleClick' => array('method' => 'POST', 'url' => '/session/:sessionId/doubleclick'),
74+
'mouseMoveTo' => array('method' => 'POST', 'url' => '/session/:sessionId/moveto'),
75+
'newSession' => array('method' => 'POST', 'url' => '/session'),
76+
'quit' => array('method' => 'DELETE', 'url' => '/session/:sessionId'),
77+
'refreshPage' => array('method' => 'POST', 'url' => '/session/:sessionId/refresh'),
78+
'sendFile' => array('method' => 'POST', 'url' => '/session/:sessionId/file'), // undocumented
79+
'sendKeys' => array('method' => 'POST', 'url' => '/session/:sessionId/keys'),
80+
'sendKeysToAlert' => array('method' => 'POST', 'url' => '/session/:sessionId/alert_text'),
81+
'sendKeysToElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/value'),
8282
'setImplicitWaitTimeout' => array('method' => 'POST', 'url' => '/session/:sessionId/timeouts/implicit_wait'),
83-
'setScreenOrientation' => array('method' => 'POST', 'url' => '/session/:sessionId/orientation'),
84-
'setPageLoadTimeout' => array('method' => 'POST', 'url' => '/session/:sessionId/timeouts'),
85-
'setScriptTimeout' => array('method' => 'POST', 'url' => '/session/:sessionId/timeouts/async_script'),
86-
'setWindowPosition' => array('method' => 'POST', 'url' => '/session/:sessionId/window/:windowHandle/position'),
87-
'setWindowSize' => array('method' => 'POST', 'url' => '/session/:sessionId/window/:windowHandle/size'),
88-
'submitElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/submit'),
89-
'takeScreenshot' => array('method' => 'GET', 'url' => '/session/:sessionId/screenshot'),
90-
'touchTap' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/click'),
91-
'touchDown' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/down'),
92-
'touchDoubleTap' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/doubleclick'),
93-
'touchFlick' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/flick'),
94-
'touchLongPress' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/longclick'),
95-
'touchMove' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/move'),
96-
'touchScroll' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/scroll'),
97-
'touchUp' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/up'),
83+
'setScreenOrientation' => array('method' => 'POST', 'url' => '/session/:sessionId/orientation'),
84+
'setPageLoadTimeout' => array('method' => 'POST', 'url' => '/session/:sessionId/timeouts'),
85+
'setScriptTimeout' => array('method' => 'POST', 'url' => '/session/:sessionId/timeouts/async_script'),
86+
'setWindowPosition' => array('method' => 'POST', 'url' => '/session/:sessionId/window/:windowHandle/position'),
87+
'setWindowSize' => array('method' => 'POST', 'url' => '/session/:sessionId/window/:windowHandle/size'),
88+
'submitElement' => array('method' => 'POST', 'url' => '/session/:sessionId/element/:id/submit'),
89+
'takeScreenshot' => array('method' => 'GET', 'url' => '/session/:sessionId/screenshot'),
90+
'touchTap' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/click'),
91+
'touchDown' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/down'),
92+
'touchDoubleTap' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/doubleclick'),
93+
'touchFlick' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/flick'),
94+
'touchLongPress' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/longclick'),
95+
'touchMove' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/move'),
96+
'touchScroll' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/scroll'),
97+
'touchUp' => array('method' => 'POST', 'url' => '/session/:sessionId/touch/up'),
9898
);
9999

100100
protected $url;
@@ -126,14 +126,21 @@ public function execute($name, array $params = array()) {
126126
* name : the name of the command
127127
* parameters : the parameters of the command required
128128
*
129+
* @param command An array that contains
130+
* url : the url of the remote server
131+
* sessionId : the session id if needed
132+
* name : the name of the command
133+
* parameters : the parameters of the command required
134+
* @param timeout Milliseconds to wait while trying to connect (defaults to 5 minutes)
135+
*
129136
* @return array The response of the command.
130137
*/
131-
public static function remoteExecute($command) {
138+
public static function remoteExecute($command, $timeout = 300000) {
132139
if (!isset(self::$commands[$command['name']])) {
133140
throw new Exception($command['name']." is not a valid command.");
134141
}
135142
$raw = self::$commands[$command['name']];
136-
$extra_opts = array();
143+
$extra_opts = array(CURLOPT_CONNECTTIMEOUT_MS => $timeout);
137144

138145
if ($command['name'] == 'newSession') {
139146
$extra_opts[CURLOPT_FOLLOWLOCATION] = true;

lib/remote/RemoteWebDriver.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,17 @@ class RemoteWebDriver implements WebDriver {
2121
protected $touch;
2222

2323
public function __construct(
24-
$url = 'http://localhost:4444/wd/hub',
25-
$desired_capabilities = array()) {
26-
$url = preg_replace('#/+$#', '', $url);
24+
$url = 'http://localhost:4444/wd/hub',
25+
$desired_capabilities = array(),
26+
$timeout = 300000) {
2727

28+
$url = preg_replace('#/+$#', '', $url);
2829
$command = array(
2930
'url' => $url,
3031
'name' => 'newSession',
3132
'parameters' => array('desiredCapabilities' => $desired_capabilities),
3233
);
33-
$response = HttpCommandExecutor::remoteExecute($command);
34+
$response = HttpCommandExecutor::remoteExecute($command, $timeout);
3435

3536
$this->executor = new HttpCommandExecutor(
3637
$url,

0 commit comments

Comments
 (0)