selenium-webdriver 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
  2. data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
  3. data/chrome/src/extension/background.js +64 -48
  4. data/chrome/src/extension/content_script.js +253 -132
  5. data/chrome/src/extension/manifest-nonwin.json +1 -1
  6. data/chrome/src/extension/manifest-win.json +1 -1
  7. data/chrome/src/extension/utils.js +8 -8
  8. data/chrome/src/rb/lib/selenium/webdriver/chrome.rb +9 -0
  9. data/chrome/src/rb/lib/selenium/webdriver/chrome/bridge.rb +38 -280
  10. data/chrome/src/rb/lib/selenium/webdriver/chrome/command_executor.rb +119 -117
  11. data/chrome/src/rb/lib/selenium/webdriver/chrome/launcher.rb +36 -26
  12. data/common/src/js/abstractcommandprocessor.js +9 -11
  13. data/common/src/js/command.js +159 -83
  14. data/common/src/js/core/RemoteRunner.html +2 -2
  15. data/common/src/js/core/TestRunner-splash.html +3 -3
  16. data/common/src/js/core/TestRunner.html +5 -17
  17. data/common/src/js/core/scripts/htmlutils.js +4208 -2506
  18. data/common/src/js/core/scripts/selenium-api.js +2 -2
  19. data/common/src/js/core/scripts/selenium-browserbot.js +66 -58
  20. data/common/src/js/core/scripts/selenium-version.js +1 -1
  21. data/common/src/js/localcommandprocessor.js +5 -19
  22. data/common/src/js/testcase.js +2 -0
  23. data/common/src/js/webdriver.js +63 -93
  24. data/common/src/js/webelement.js +40 -42
  25. data/common/src/rb/lib/selenium/webdriver.rb +23 -14
  26. data/common/src/rb/lib/selenium/webdriver/bridge_helper.rb +8 -35
  27. data/common/src/rb/lib/selenium/webdriver/child_process.rb +2 -0
  28. data/common/src/rb/lib/selenium/webdriver/core_ext/dir.rb +1 -0
  29. data/common/src/rb/lib/selenium/webdriver/core_ext/string.rb +5 -0
  30. data/common/src/rb/lib/selenium/webdriver/driver.rb +20 -15
  31. data/common/src/rb/lib/selenium/webdriver/driver_extensions/takes_screenshot.rb +7 -2
  32. data/common/src/rb/lib/selenium/webdriver/element.rb +11 -2
  33. data/common/src/rb/lib/selenium/webdriver/error.rb +9 -5
  34. data/common/src/rb/lib/selenium/webdriver/keys.rb +1 -2
  35. data/common/src/rb/lib/selenium/webdriver/navigation.rb +16 -0
  36. data/common/src/rb/lib/selenium/webdriver/options.rb +32 -0
  37. data/common/src/rb/lib/selenium/webdriver/platform.rb +17 -1
  38. data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
  39. data/firefox/src/extension/components/dispatcher.js +492 -0
  40. data/firefox/src/extension/components/driver-component.js +4 -1
  41. data/firefox/src/extension/components/errorcode.js +70 -0
  42. data/firefox/src/extension/components/firefoxDriver.js +173 -154
  43. data/firefox/src/extension/components/nsCommandProcessor.js +171 -132
  44. data/firefox/src/extension/components/promptService.js +5 -5
  45. data/firefox/src/extension/components/request.js +219 -0
  46. data/firefox/src/extension/components/response.js +276 -0
  47. data/firefox/src/extension/components/session.js +281 -0
  48. data/firefox/src/extension/components/sessionstore.js +226 -0
  49. data/firefox/src/extension/components/socketListener.js +350 -100
  50. data/firefox/src/extension/components/utils.js +166 -98
  51. data/firefox/src/extension/components/webdriverserver.js +9 -5
  52. data/firefox/src/extension/components/wrappedElement.js +189 -166
  53. data/firefox/src/extension/install.rdf +1 -1
  54. data/firefox/src/rb/lib/selenium/webdriver/firefox.rb +2 -0
  55. data/firefox/src/rb/lib/selenium/webdriver/firefox/binary.rb +39 -33
  56. data/firefox/src/rb/lib/selenium/webdriver/firefox/bridge.rb +7 -421
  57. data/firefox/src/rb/lib/selenium/webdriver/firefox/extension_connection.rb +7 -64
  58. data/firefox/src/rb/lib/selenium/webdriver/firefox/launcher.rb +2 -3
  59. data/firefox/src/rb/lib/selenium/webdriver/firefox/profile.rb +54 -10
  60. data/firefox/src/rb/lib/selenium/webdriver/firefox/profiles_ini.rb +2 -0
  61. data/firefox/src/rb/lib/selenium/webdriver/firefox/util.rb +6 -0
  62. data/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll +0 -0
  63. data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
  64. data/jobbie/src/rb/lib/selenium/webdriver/ie.rb +2 -0
  65. data/jobbie/src/rb/lib/selenium/webdriver/ie/bridge.rb +38 -13
  66. data/jobbie/src/rb/lib/selenium/webdriver/ie/lib.rb +9 -2
  67. data/jobbie/src/rb/lib/selenium/webdriver/ie/util.rb +5 -0
  68. data/remote/client/src/rb/lib/selenium/webdriver/remote.rb +2 -0
  69. data/remote/client/src/rb/lib/selenium/webdriver/remote/bridge.rb +42 -38
  70. data/remote/client/src/rb/lib/selenium/webdriver/remote/commands.rb +56 -47
  71. data/remote/client/src/rb/lib/selenium/webdriver/remote/default_http_client.rb +26 -26
  72. data/remote/client/src/rb/lib/selenium/webdriver/remote/patron_http_client.rb +58 -0
  73. data/remote/client/src/rb/lib/selenium/webdriver/remote/response.rb +10 -12
  74. data/remote/client/src/rb/lib/selenium/webdriver/remote/server_error.rb +2 -17
  75. metadata +44 -23
  76. data/common/src/js/context.js +0 -58
  77. data/firefox/src/extension/components/context.js +0 -37
@@ -0,0 +1,281 @@
1
+ /*
2
+ Copyright 2007-2010 WebDriver committers
3
+ Copyright 2007-2010 Google Inc.
4
+ Portions copyright 2007 ThoughtWorks, Inc
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ */
18
+
19
+ /**
20
+ * Logs a message to the console service.
21
+ * @param {string} message The message to log.
22
+ */
23
+ function log(message) {
24
+ Components.classes['@mozilla.org/consoleservice;1'].
25
+ getService(Components.interfaces.nsIConsoleService).
26
+ logStringMessage(message);
27
+ }
28
+
29
+
30
+ /**
31
+ * An active FirefoxDriver session.
32
+ * @constructor
33
+ */
34
+ function wdSession() {
35
+ /**
36
+ * A wrapped self-reference for XPConnect.
37
+ * @type {wdSession}
38
+ */
39
+ this.wrappedJSObject = this;
40
+ }
41
+
42
+
43
+ /**
44
+ * This component's ID.
45
+ * @type {nsIJSID}
46
+ */
47
+ wdSession.CLASS_ID = Components.ID('{e193dc71-5b1d-4fea-b4c2-ec71f4557f0f}');
48
+
49
+
50
+ /**
51
+ * This component's class name.
52
+ * @type {string}
53
+ */
54
+ wdSession.CLASS_NAME = 'wdSession';
55
+
56
+
57
+ /**
58
+ * This component's contract ID.
59
+ * @type {string}
60
+ */
61
+ wdSession.CONTRACT_ID = '@googlecode.com/webdriver/wdsession;1';
62
+
63
+
64
+ /**
65
+ * This session's ID.
66
+ * @type {?string}
67
+ * @private
68
+ */
69
+ wdSession.prototype.id_ = null;
70
+
71
+
72
+ /**
73
+ * The main chrome window that this is session is currently focused on. All
74
+ * command's for this session will be directed at the current window, which
75
+ * may be inside a [I]FRAME, within this window.
76
+ * @type {?ChromeWindow}
77
+ * @private
78
+ */
79
+ wdSession.prototype.chromeWindow_ = null;
80
+
81
+
82
+ /**
83
+ * The content window this session is currently focused on.
84
+ * @type {?nsIDOMWindow}
85
+ * @private
86
+ */
87
+ wdSession.prototype.window_ = null;
88
+
89
+
90
+ /**
91
+ * The current user input speed setting for this session.
92
+ * @type {number}
93
+ * @private
94
+ */
95
+ wdSession.prototype.inputSpeed_ = 1;
96
+
97
+
98
+ /** @see nsISupports.QueryInterface */
99
+ wdSession.prototype.QueryInterface = function(aIID) {
100
+ if (aIID.equals(Components.interfaces.nsISupports)) {
101
+ return this;
102
+ }
103
+ throw Components.results.NS_ERROR_NO_INTERFACE;
104
+ };
105
+
106
+
107
+ /** @return {?string} This session's ID. */
108
+ wdSession.prototype.getId = function() {
109
+ return this.id_;
110
+ };
111
+
112
+
113
+ /**
114
+ * Sets this session's ID.
115
+ * @param {string} id The session ID.
116
+ */
117
+ wdSession.prototype.setId = function(id) {
118
+ this.id_ = id;
119
+ };
120
+
121
+
122
+ /**
123
+ * @return {browser|tabbrowser} The browser object for this session's current
124
+ * window.
125
+ */
126
+ wdSession.prototype.getBrowser = function() {
127
+ return this.chromeWindow_.getBrowser();
128
+ };
129
+
130
+
131
+ /** @return {?ChromeWindow} The chrome window for this session. */
132
+ wdSession.prototype.getChromeWindow = function() {
133
+ return this.chromeWindow_;
134
+ };
135
+
136
+
137
+ /** @return {?nsIDOMWindow} This session's current window. */
138
+ wdSession.prototype.getWindow = function() {
139
+ if (!this.window_.document) {
140
+ // Uh-oh, we lost our DOM! Try to recover by changing focus to the
141
+ // main content window.
142
+ this.setWindow(this.chromeWindow_.getBrowser().contentWindow);
143
+ }
144
+ return this.window_;
145
+ };
146
+
147
+
148
+ /** @return {nsIDOMDocument} This session's current document. */
149
+ wdSession.prototype.getDocument = function() {
150
+ return this.getWindow().document;
151
+ return this.window_.document;
152
+ };
153
+
154
+
155
+ /**
156
+ * Set the chrome window for this session; will also set the current window to
157
+ * the main content window inside the chrome window.
158
+ * @param {ChromeWindow} win The new chrome window.
159
+ */
160
+ wdSession.prototype.setChromeWindow = function(win) {
161
+ this.chromeWindow_ = win;
162
+ this.setWindow(win.getBrowser().contentWindow);
163
+ };
164
+
165
+
166
+ /**
167
+ * Set this session's current window. If the selected window is a frameset,
168
+ * the current window will be adjusted to focus on the first frame.
169
+ * @param {nsIDOMWindow} win The new window.
170
+ */
171
+ wdSession.prototype.setWindow = function(win) {
172
+ this.window_ = win;
173
+ var frames = this.window_.frames;
174
+ if (frames && frames.length && 'FRAME' == frames[0].frameElement.tagName) {
175
+ this.window_ = frames[0];
176
+ }
177
+ };
178
+
179
+
180
+ /**
181
+ * @return {number} The user input speed for this session.
182
+ */
183
+ wdSession.prototype.getInputSpeed = function() {
184
+ return this.inputSpeed_;
185
+ };
186
+
187
+
188
+ /**
189
+ * Sets the user input speed for this session.
190
+ * @param {number} speed The new input speed.
191
+ */
192
+ wdSession.prototype.setInputSpeed = function(speed) {
193
+ this.inputSpeed_ = speed;
194
+ };
195
+
196
+
197
+ ///////////////////////////////////////////////////////////////////
198
+ //
199
+ // nsIFactory functions
200
+ //
201
+ ///////////////////////////////////////////////////////////////////
202
+
203
+ /** @constructor */
204
+ function wdSessionFactory() {
205
+ }
206
+
207
+
208
+ /** @see nsIFactory.createInstance */
209
+ wdSessionFactory.prototype.createInstance = function(aOuter, aIID) {
210
+ if (aOuter != null) {
211
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
212
+ }
213
+ return new wdSession().QueryInterface(aIID);
214
+ };
215
+
216
+ ///////////////////////////////////////////////////////////////////
217
+ //
218
+ // nsIModule functions
219
+ //
220
+ ///////////////////////////////////////////////////////////////////
221
+
222
+ /** @constructor */
223
+ function wdSessionModule() {
224
+ }
225
+
226
+
227
+ /**
228
+ * Whether this module has already been registered.
229
+ * @type {!boolean}
230
+ * @private
231
+ */
232
+ wdSessionModule.prototype.hasRegistered_ = false;
233
+
234
+
235
+ /** @see nsIModule.registerSelf */
236
+ wdSessionModule.prototype.registerSelf = function(aCompMgr, aFileSpec, aLocation, aType) {
237
+ if (this.hasRegistered_) {
238
+ throw Components.results.NS_ERROR_FACTORY_REGISTER_AGAIN;
239
+ }
240
+ aCompMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar).
241
+ registerFactoryLocation(
242
+ wdSession.CLASS_ID,
243
+ wdSession.CLASS_NAME,
244
+ wdSession.CONTRACT_ID,
245
+ aFileSpec, aLocation, aType);
246
+ this.hasRegistered_ = true;
247
+ };
248
+
249
+
250
+ /** @see nsIModule.unregisterSelf */
251
+ wdSessionModule.prototype.unregisterSelf = function(aCompMgr, aLocation) {
252
+ aCompMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar).
253
+ unregisterFactoryLocation(wdSession.CLASS_ID, aLocation);
254
+ };
255
+
256
+
257
+ /** @see nsIModule.getClassObject */
258
+ wdSessionModule.prototype.getClassObject = function(aCompMgr, aCID, aIID) {
259
+ if (!aIID.equals(Components.interfaces.nsIFactory)) {
260
+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
261
+ } else if (!aCID.equals(wdSession.CLASS_ID)) {
262
+ throw Components.results.NS_ERROR_NO_INTERFACE;
263
+ }
264
+ return new wdSessionFactory();
265
+ };
266
+
267
+
268
+ /** @see nsIModule.canUnload */
269
+ wdSessionModule.prototype.canUnload = function() {
270
+ return true;
271
+ };
272
+
273
+
274
+
275
+ /**
276
+ * Module initialization.
277
+ */
278
+ function NSGetModule() {
279
+ return new wdSessionModule();
280
+ }
281
+
@@ -0,0 +1,226 @@
1
+ /*
2
+ Copyright 2007-2010 WebDriver committers
3
+ Copyright 2007-2010 Google Inc.
4
+ Portions copyright 2007 ThoughtWorks, Inc
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ */
18
+
19
+ /**
20
+ * Logs a message to the console service.
21
+ * @param {string} message The message to log.
22
+ */
23
+ function log(message) {
24
+ Components.classes['@mozilla.org/consoleservice;1'].
25
+ getService(Components.interfaces.nsIConsoleService).
26
+ logStringMessage(message);
27
+ }
28
+
29
+
30
+ /**
31
+ * Service that keeps track of all the active FirefoxDriver sessions.
32
+ * @constructor
33
+ */
34
+ function wdSessionStoreService() {
35
+
36
+ /**
37
+ * A wrapped self-reference for XPConnect.
38
+ * @type {wdSessionStoreService}
39
+ */
40
+ this.wrappedJSObject = this;
41
+
42
+ /**
43
+ * Map of active sessions.
44
+ * @type {Object}
45
+ * @private
46
+ */
47
+ this.sessions_ = {};
48
+ }
49
+
50
+
51
+ /**
52
+ * This component's ID.
53
+ * @type {nsIJSID}
54
+ */
55
+ wdSessionStoreService.CLASS_ID = Components.ID('{b54195d3-841e-47df-b709-edf1bc4c7166}');
56
+
57
+
58
+ /**
59
+ * This component's class name.
60
+ * @type {string}
61
+ */
62
+ wdSessionStoreService.CLASS_NAME = 'wdSessionStoreService';
63
+
64
+
65
+ /**
66
+ * This component's contract ID.
67
+ * @type {string}
68
+ */
69
+ wdSessionStoreService.CONTRACT_ID = '@googlecode.com/webdriver/wdsessionstoreservice;1';
70
+
71
+
72
+ /** @see nsISupports.QueryInterface */
73
+ wdSessionStoreService.prototype.QueryInterface = function(aIID) {
74
+ if (aIID.equals(Components.interfaces.nsISupports)) {
75
+ return this;
76
+ }
77
+ throw Components.results.NS_ERROR_NO_INTERFACE;
78
+ };
79
+
80
+
81
+ /**
82
+ * @return {wdSession} A new WebDriver session.
83
+ */
84
+ wdSessionStoreService.prototype.createSession = function() {
85
+ var id = Components.classes['@mozilla.org/uuid-generator;1'].
86
+ getService(Components.interfaces.nsIUUIDGenerator).
87
+ generateUUID().
88
+ toString();
89
+ id = id.substring(1, id.length - 1); // Remove enclosing {} characters
90
+
91
+ var session = Components.classes['@googlecode.com/webdriver/wdsession;1'].
92
+ createInstance(Components.interfaces.nsISupports);
93
+
94
+ // Ah, xpconnect...
95
+ session.wrappedJSObject.setId(id);
96
+ this.sessions_[id] = session;
97
+ return session;
98
+ };
99
+
100
+
101
+ /**
102
+ * Deletes the specified session.
103
+ * @param {string} sessionId ID of the session to delete.
104
+ */
105
+ wdSessionStoreService.prototype.deleteSession = function(sessionId) {
106
+ if (sessionId in this.sessions_) {
107
+ delete this.sessions_[sessionId];
108
+ }
109
+ };
110
+
111
+
112
+ /**
113
+ * Retrieves the session with the given ID.
114
+ * @param {string} sessionId ID of the session to retrieve.
115
+ * @return {wdSession} The matching session.
116
+ * @throws NS_ERROR_NOT_AVAILABLE if the session does not exist.
117
+ */
118
+ wdSessionStoreService.prototype.getSession = function(sessionId) {
119
+ if (sessionId in this.sessions_) {
120
+ var session = this.sessions_[sessionId].wrappedJSObject; // XPConnect
121
+ return this.sessions_[sessionId];
122
+ }
123
+ var sessions = [];
124
+ for (var session in this.sessions_) {
125
+ sessions.push(session);
126
+ }
127
+ throw Components.results.NS_ERROR_NOT_AVAILABLE;
128
+ };
129
+
130
+
131
+ ///////////////////////////////////////////////////////////////////
132
+ //
133
+ // nsIFactory functions
134
+ //
135
+ ///////////////////////////////////////////////////////////////////
136
+
137
+ /** @constructor */
138
+ function wdSessionStoreServiceFactory() {
139
+ }
140
+
141
+
142
+ /**
143
+ * The singleton instance for this component.
144
+ * @type {?wdSessionStoreService}
145
+ * @private
146
+ */
147
+ wdSessionStoreServiceFactory.prototype.instance_ = null;
148
+
149
+
150
+ /** @see nsIFactory.createInstance */
151
+ wdSessionStoreServiceFactory.prototype.createInstance = function(aOuter, aIID) {
152
+ if (aOuter != null) {
153
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
154
+ }
155
+ if (!this.instance_) {
156
+ this.instance_ = new wdSessionStoreService();
157
+ }
158
+ return this.instance_.QueryInterface(aIID);
159
+ };
160
+
161
+ ///////////////////////////////////////////////////////////////////
162
+ //
163
+ // nsIModule functions
164
+ //
165
+ ///////////////////////////////////////////////////////////////////
166
+
167
+ /** @constructor */
168
+ function wdSessionStoreServiceModule() {
169
+ }
170
+
171
+
172
+ /**
173
+ * Whether this module has already been registered.
174
+ * @type {!boolean}
175
+ * @private
176
+ */
177
+ wdSessionStoreServiceModule.prototype.hasRegistered_ = false;
178
+
179
+
180
+ /** @see nsIModule.registerSelf */
181
+ wdSessionStoreServiceModule.prototype.registerSelf = function(aCompMgr, aFileSpec, aLocation, aType) {
182
+ if (this.hasRegistered_) {
183
+ throw Components.results.NS_ERROR_FACTORY_REGISTER_AGAIN;
184
+ }
185
+ aCompMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar).
186
+ registerFactoryLocation(
187
+ wdSessionStoreService.CLASS_ID,
188
+ wdSessionStoreService.CLASS_NAME,
189
+ wdSessionStoreService.CONTRACT_ID,
190
+ aFileSpec, aLocation, aType);
191
+ this.hasRegistered_ = true;
192
+ };
193
+
194
+
195
+ /** @see nsIModule.unregisterSelf */
196
+ wdSessionStoreServiceModule.prototype.unregisterSelf = function(aCompMgr, aLocation) {
197
+ aCompMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar).
198
+ unregisterFactoryLocation(wdSessionStoreService.CLASS_ID, aLocation);
199
+ };
200
+
201
+
202
+ /** @see nsIModule.getClassObject */
203
+ wdSessionStoreServiceModule.prototype.getClassObject = function(aCompMgr, aCID, aIID) {
204
+ if (!aIID.equals(Components.interfaces.nsIFactory)) {
205
+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
206
+ } else if (!aCID.equals(wdSessionStoreService.CLASS_ID)) {
207
+ throw Components.results.NS_ERROR_NO_INTERFACE;
208
+ }
209
+ return new wdSessionStoreServiceFactory();
210
+ };
211
+
212
+
213
+ /** @see nsIModule.canUnload */
214
+ wdSessionStoreServiceModule.prototype.canUnload = function() {
215
+ return true;
216
+ };
217
+
218
+
219
+
220
+ /**
221
+ * Module initialization.
222
+ */
223
+ function NSGetModule() {
224
+ return new wdSessionStoreServiceModule();
225
+ }
226
+