@@ -23,78 +23,78 @@ class HttpCommandExecutor implements WebDriverCommandExecutor {
23
23
* http://code.google.com/p/selenium/wiki/JsonWireProtocol#Command_Reference
24
24
*/
25
25
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 ' ),
48
48
'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 ' ),
52
52
'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 ' ),
82
82
'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 ' ),
98
98
);
99
99
100
100
protected $ url ;
@@ -126,14 +126,21 @@ public function execute($name, array $params = array()) {
126
126
* name : the name of the command
127
127
* parameters : the parameters of the command required
128
128
*
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
+ *
129
136
* @return array The response of the command.
130
137
*/
131
- public static function remoteExecute ($ command ) {
138
+ public static function remoteExecute ($ command, $ timeout = 300000 ) {
132
139
if (!isset (self ::$ commands [$ command ['name ' ]])) {
133
140
throw new Exception ($ command ['name ' ]." is not a valid command. " );
134
141
}
135
142
$ raw = self ::$ commands [$ command ['name ' ]];
136
- $ extra_opts = array ();
143
+ $ extra_opts = array (CURLOPT_CONNECTTIMEOUT_MS => $ timeout );
137
144
138
145
if ($ command ['name ' ] == 'newSession ' ) {
139
146
$ extra_opts [CURLOPT_FOLLOWLOCATION ] = true ;
0 commit comments