selenium-webdriver 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,5 +1,5 @@
1
1
  Selenium.version = "2.0";
2
- Selenium.revision = "a1";
2
+ Selenium.revision = "a2";
3
3
 
4
4
  window.top.document.title += " v" + Selenium.version + " [" + Selenium.revision + "]";
5
5
 
@@ -31,7 +31,6 @@ goog.require('goog.json');
31
31
  goog.require('goog.object');
32
32
  goog.require('webdriver.AbstractCommandProcessor');
33
33
  goog.require('webdriver.CommandName');
34
- goog.require('webdriver.Context');
35
34
  goog.require('webdriver.Response');
36
35
 
37
36
 
@@ -128,9 +127,7 @@ webdriver.LocalCommandProcessor.onResponse_ = function(command, e) {
128
127
  'receiving:\n' + jsonResponse);
129
128
 
130
129
  var response = new webdriver.Response(
131
- rawResponse['isError'],
132
- webdriver.Context.fromString(rawResponse['context']),
133
- rawResponse['response']);
130
+ rawResponse['status'], rawResponse['value']);
134
131
 
135
132
  // Only code in this file should be dispatching command events and listening
136
133
  // for response events, so this is safe. If someone else decided to attach a
@@ -146,25 +143,14 @@ webdriver.LocalCommandProcessor.onResponse_ = function(command, e) {
146
143
  */
147
144
  webdriver.LocalCommandProcessor.prototype.dispatchDriverCommand = function(
148
145
  command) {
149
- if (command.getName() == webdriver.CommandName.SEND_KEYS) {
150
- command.setParameters(command.getParameters().join(''));
151
- }
152
-
153
146
  var jsonCommand = {
154
- 'commandName': command.getName(),
155
- 'context': command.getDriver().getContext().toString(),
147
+ 'name': command.getName(),
148
+ 'sessionId': {
149
+ 'value': command.getDriver().getSessionId()
150
+ },
156
151
  'parameters': command.getParameters()
157
152
  };
158
153
 
159
- if (command.element) {
160
- try {
161
- jsonCommand['elementId'] = command.element.getId().getValue();
162
- } catch (ex) {
163
- window.console.dir(command);
164
- throw ex;
165
- }
166
- }
167
-
168
154
  jsonCommand = goog.json.serialize(jsonCommand);
169
155
  goog.debug.Logger.getLogger('webdriver.LocalCommandProcessor').fine(
170
156
  'sending:\n' + jsonCommand);
@@ -124,7 +124,9 @@ webdriver.TestCase.prototype.startTest_ = function() {
124
124
  // all of its subcommands so we can continue the test.
125
125
  goog.events.listen(driver, webdriver.Command.ERROR_EVENT,
126
126
  function(e) {
127
+ // console.error('error event!');
127
128
  var failingCommand = (/** @type {webdriver.Command} */e.target);
129
+ // console.dir(failingCommand);
128
130
  if (!failingCommand.getResponse()) {
129
131
  // This should never happen, but just in case.
130
132
  test.errors.push('Unknown error');
@@ -30,7 +30,6 @@ goog.require('goog.events.EventTarget');
30
30
  goog.require('webdriver.By.Locator');
31
31
  goog.require('webdriver.Command');
32
32
  goog.require('webdriver.CommandName');
33
- goog.require('webdriver.Context');
34
33
  goog.require('webdriver.Response');
35
34
  goog.require('webdriver.WebElement');
36
35
  goog.require('webdriver.timing');
@@ -110,13 +109,6 @@ webdriver.WebDriver = function(commandProcessor) {
110
109
  */
111
110
  this.isPaused_ = false;
112
111
 
113
- /**
114
- * This instances current context (window and frame ID).
115
- * @type {webdriver.Context}
116
- * @private
117
- */
118
- this.context_ = new webdriver.Context();
119
-
120
112
  /**
121
113
  * This instance's current session ID. Set with the
122
114
  * {@code webdriver.WebDriver.prototype.newSession} command.
@@ -159,15 +151,15 @@ webdriver.WebDriver.EventType = {
159
151
 
160
152
 
161
153
  /**
162
- * Enumeration of the supported mouse speeds.
154
+ * Enumeration of the supported input speeds.
163
155
  * @enum {number}
164
- * @see webdriver.WebDriver.prototype.setMouseSpeed
165
- * @see webdriver.WebDriver.prototype.getMouseSpeed
156
+ * @see webdriver.WebDriver.prototype.setSpeed
157
+ * @see webdriver.WebDriver.prototype.getSpeed
166
158
  */
167
159
  webdriver.WebDriver.Speed = {
168
- SLOW: 1,
169
- MEDIUM: 10,
170
- FAST: 100
160
+ SLOW: 'SLOW',
161
+ MEDIUM: 'MEDIUM',
162
+ FAST: 'FAST'
171
163
  };
172
164
 
173
165
 
@@ -191,7 +183,6 @@ webdriver.WebDriver.prototype.disposeInternal = function() {
191
183
  delete this.pendingCommands_;
192
184
  delete this.queuedCommands_;
193
185
  delete this.isPaused_;
194
- delete this.context_;
195
186
  delete this.sessionLocked_;
196
187
  delete this.sessionId_;
197
188
  delete this.commandInterval_;
@@ -203,13 +194,11 @@ webdriver.WebDriver.prototype.disposeInternal = function() {
203
194
  /**
204
195
  * Queues a command to execute.
205
196
  * @param {webdriver.CommandName} name The name of the command to execute.
206
- * @param {webdriver.WebElement} opt_element The element that is the target
207
- * of the new command.
208
197
  * @return {webdriver.Command} The new command.
209
198
  * @protected
210
199
  */
211
- webdriver.WebDriver.prototype.addCommand = function(name, opt_element) {
212
- var command = new webdriver.Command(this, name, opt_element);
200
+ webdriver.WebDriver.prototype.addCommand = function(name) {
201
+ var command = new webdriver.Command(this, name);
213
202
  goog.array.peek(this.queuedCommands_).push(command);
214
203
  return command;
215
204
  };
@@ -229,7 +218,7 @@ webdriver.WebDriver.prototype.isIdle = function() {
229
218
  // not process any more commands, so we consider this idle.
230
219
  var pendingCommand = goog.array.peek(this.pendingCommands_);
231
220
  if (pendingCommand && pendingCommand.isFinished() &&
232
- pendingCommand.getResponse().isFailure) {
221
+ !pendingCommand.getResponse().isSuccess()) {
233
222
  return true;
234
223
  }
235
224
  return !pendingCommand && this.queuedCommands_.length == 1 &&
@@ -297,7 +286,7 @@ webdriver.WebDriver.prototype.processCommands_ = function() {
297
286
  return;
298
287
  }
299
288
 
300
- if (pendingCommand && pendingCommand.getResponse().isFailure) {
289
+ if (pendingCommand && !pendingCommand.getResponse().isSuccess()) {
301
290
  // Or should we be throwing this to be caught by window.onerror?
302
291
  this.logger_.severe(
303
292
  'Unhandled command failure; halting command processing:\n' +
@@ -333,23 +322,6 @@ webdriver.WebDriver.prototype.getSessionId = function() {
333
322
  };
334
323
 
335
324
 
336
- /**
337
- * @return {webdriver.Context} This instance's current context.
338
- */
339
- webdriver.WebDriver.prototype.getContext = function() {
340
- return this.context_;
341
- };
342
-
343
-
344
- /**
345
- * Sets this driver's context.
346
- * @param {webdriver.Context} context The new context.
347
- */
348
- webdriver.WebDriver.prototype.setContext = function(context) {
349
- return this.context_ = context;
350
- };
351
-
352
-
353
325
  // ----------------------------------------------------------------------------
354
326
  // Client command functions:
355
327
  // ----------------------------------------------------------------------------
@@ -445,7 +417,7 @@ webdriver.WebDriver.prototype.pause = function() {
445
417
  * sleep.
446
418
  */
447
419
  webdriver.WebDriver.prototype.sleep = function(ms) {
448
- this.addCommand(webdriver.CommandName.SLEEP).setParameters(ms);
420
+ this.addCommand(webdriver.CommandName.SLEEP).setParameter('ms', ms);
449
421
  };
450
422
 
451
423
 
@@ -465,7 +437,8 @@ webdriver.WebDriver.prototype.callFunction = function(fn, opt_selfObj,
465
437
  var previousCommand = goog.array.peek(frame);
466
438
  args.push(previousCommand ? previousCommand.getFutureResult() : null);
467
439
  return this.addCommand(webdriver.CommandName.FUNCTION).
468
- setParameters(fn, opt_selfObj, args).
440
+ setParameter('function', goog.bind(fn, opt_selfObj)).
441
+ setParameter('args', args).
469
442
  getFutureResult();
470
443
  };
471
444
 
@@ -528,7 +501,8 @@ webdriver.WebDriver.prototype.wait = function(conditionFn, timeout, opt_self,
528
501
  }
529
502
 
530
503
  this.addCommand(webdriver.CommandName.WAIT).
531
- setParameters(pollFunction, null, [0, null]);
504
+ setParameter('function', pollFunction).
505
+ setParameter('args', [0, null]);
532
506
  };
533
507
 
534
508
 
@@ -575,8 +549,7 @@ webdriver.WebDriver.prototype.newSession = function() {
575
549
  webdriver.WebDriver.prototype.switchToWindow = function(name) {
576
550
  this.callFunction(function() {
577
551
  this.addCommand(webdriver.CommandName.SWITCH_TO_WINDOW).
578
- setParameters(name);
579
- this.callFunction(this.setContext, this);
552
+ setParameter('name', name);
580
553
  }, this);
581
554
  };
582
555
 
@@ -593,13 +566,8 @@ webdriver.WebDriver.prototype.switchToWindow = function(name) {
593
566
  */
594
567
  webdriver.WebDriver.prototype.switchToFrame = function(frame) {
595
568
  this.callFunction(function() {
596
- var commandName = webdriver.CommandName.SWITCH_TO_FRAME;
597
- var command;
598
- if (goog.isString(frame) || goog.isNumber(frame)) {
599
- command = this.addCommand(commandName).setParameters(frame);
600
- } else {
601
- command = this.addCommand(commandName, frame);
602
- }
569
+ this.addCommand(webdriver.CommandName.SWITCH_TO_FRAME).
570
+ setParameter('id', frame);
603
571
  }, this);
604
572
  };
605
573
 
@@ -609,10 +577,7 @@ webdriver.WebDriver.prototype.switchToFrame = function(frame) {
609
577
  * contains iframes.
610
578
  */
611
579
  webdriver.WebDriver.prototype.switchToDefaultContent = function() {
612
- this.callFunction(function() {
613
- this.addCommand(webdriver.CommandName.SWITCH_TO_DEFAULT_CONTENT).
614
- setParameters(null);
615
- }, this);
580
+ return this.switchToFrame(null);
616
581
  };
617
582
 
618
583
 
@@ -659,27 +624,26 @@ webdriver.WebDriver.prototype.close = function() {
659
624
  * Helper function for converting an argument to a script into a parameter
660
625
  * object to send with the {@code webdriver.Command}.
661
626
  * @param {*} arg The value to convert.
662
- * @return {Object} A JSON object with "type" and "value" properties.
627
+ * @return {*} The converted value.
663
628
  * @see {webdriver.WebDriver.prototype.executeScript}
664
629
  * @private
665
630
  */
666
631
  webdriver.WebDriver.wrapScriptArgument_ = function(arg) {
667
- var type, value;
668
632
  if (arg instanceof webdriver.WebElement) {
669
- type = 'ELEMENT';
670
- value = arg.getId();
633
+ return {'ELEMENT': arg.getId()};
634
+ } else if (arg == null || !goog.isDef(arg)) {
635
+ return null;
671
636
  } else if (goog.isBoolean(arg) ||
672
637
  goog.isNumber(arg) ||
673
638
  goog.isString(arg)) {
674
- type = goog.typeOf(arg).toUpperCase();
675
- value = arg;
639
+ return arg;
676
640
  } else if (goog.isArray(arg)) {
677
- type = goog.typeOf(arg).toUpperCase();
678
- value = goog.array.map(arg, webdriver.WebDriver.wrapScriptArgument_);
679
- } else {
641
+ return goog.array.map(arg, webdriver.WebDriver.wrapScriptArgument_);
642
+ } else if (goog.isFunction(arg)) {
680
643
  throw new Error('Invalid script argument type: ' + goog.typeOf(arg));
644
+ } else {
645
+ return goog.object.map(arg, webdriver.WebDriver.wrapScriptArgument_);
681
646
  }
682
- return {'type': type, 'value': value};
683
647
  };
684
648
 
685
649
 
@@ -691,19 +655,17 @@ webdriver.WebDriver.wrapScriptArgument_ = function(arg) {
691
655
  * @private
692
656
  */
693
657
  webdriver.WebDriver.prototype.unwrapScriptResult_ = function(result) {
694
- switch (result.type) {
695
- case 'ELEMENT':
696
- var element = new webdriver.WebElement(this);
697
- element.getId().setValue(result.value);
698
- return element;
699
-
700
- case 'ARRAY':
701
- return goog.array.map(result.value, goog.bind(
702
- this.unwrapScriptResult_, this));
703
-
704
- default:
705
- return result.value;
658
+ if (goog.isArray(result)) {
659
+ return goog.array.map(result, goog.bind(this.unwrapScriptResult_, this));
706
660
  }
661
+
662
+ if (result != null && goog.isObject(result) && 'ELEMENT' in result) {
663
+ var element = new webdriver.WebElement(this);
664
+ element.getId().setValue(result['ELEMENT']);
665
+ return element;
666
+ }
667
+
668
+ return result;
707
669
  };
708
670
 
709
671
 
@@ -721,7 +683,8 @@ webdriver.WebDriver.prototype.executeScript = function(script, var_args) {
721
683
  webdriver.WebDriver.wrapScriptArgument_);
722
684
  return this.callFunction(function() {
723
685
  this.addCommand(webdriver.CommandName.EXECUTE_SCRIPT).
724
- setParameters(script, args);
686
+ setParameter("script", script).
687
+ setParameter("args", args);
725
688
  return this.callFunction(function(prevResult) {
726
689
  return this.unwrapScriptResult_(prevResult);
727
690
  }, this);
@@ -736,7 +699,7 @@ webdriver.WebDriver.prototype.executeScript = function(script, var_args) {
736
699
  webdriver.WebDriver.prototype.get = function(url) {
737
700
  this.callFunction(function() {
738
701
  this.addCommand(webdriver.CommandName.GET).
739
- setParameters(url.toString());
702
+ setParameter('url', url.toString());
740
703
  }, this);
741
704
  };
742
705
 
@@ -745,7 +708,7 @@ webdriver.WebDriver.prototype.get = function(url) {
745
708
  * Navigate backwards in the current browser window's history.
746
709
  */
747
710
  webdriver.WebDriver.prototype.back = function() {
748
- this.addCommand(webdriver.CommandName.BACK);
711
+ this.addCommand(webdriver.CommandName.GO_BACK);
749
712
  };
750
713
 
751
714
 
@@ -753,7 +716,7 @@ webdriver.WebDriver.prototype.back = function() {
753
716
  * Navigate forwards in the current browser window's history.
754
717
  */
755
718
  webdriver.WebDriver.prototype.forward = function() {
756
- this.addCommand(webdriver.CommandName.FORWARD);
719
+ this.addCommand(webdriver.CommandName.GO_FORWARD);
757
720
  };
758
721
 
759
722
 
@@ -796,9 +759,14 @@ webdriver.WebDriver.prototype.getTitle = function() {
796
759
  webdriver.WebDriver.prototype.findElement = function(by) {
797
760
  var webElement = new webdriver.WebElement(this);
798
761
  var locator = webdriver.By.Locator.checkLocator(by);
799
- var command = this.addCommand(webdriver.CommandName.FIND_ELEMENT).
800
- setParameters(locator.type, locator.target);
801
- webElement.getId().setValue(command.getFutureResult());
762
+ this.callFunction(function() {
763
+ var command = this.addCommand(webdriver.CommandName.FIND_ELEMENT).
764
+ setParameter("using", locator.type).
765
+ setParameter("value", locator.target);
766
+ this.callFunction(function(id) {
767
+ webElement.getId().setValue(id['ELEMENT']);
768
+ });
769
+ }, this);
802
770
  return webElement;
803
771
  };
804
772
 
@@ -816,7 +784,8 @@ webdriver.WebDriver.prototype.isElementPresent = function(by) {
816
784
  var locator = webdriver.By.Locator.checkLocator(by);
817
785
  return this.callFunction(function() {
818
786
  var findCommand = this.addCommand(webdriver.CommandName.FIND_ELEMENT).
819
- setParameters(locator.type, locator.target);
787
+ setParameter("using", locator.type).
788
+ setParameter("value", locator.target);
820
789
  var commandFailed = false;
821
790
  var key = goog.events.listenOnce(findCommand,
822
791
  webdriver.Command.ERROR_EVENT, function(e) {
@@ -853,13 +822,14 @@ webdriver.WebDriver.prototype.findElements = function(by) {
853
822
  var locator = webdriver.By.Locator.checkLocator(by);
854
823
  return this.callFunction(function() {
855
824
  this.addCommand(webdriver.CommandName.FIND_ELEMENTS).
856
- setParameters(locator.type, locator.target);
825
+ setParameter("using", locator.type).
826
+ setParameter("value", locator.target);
857
827
  return this.callFunction(function(ids) {
858
828
  var elements = [];
859
829
  for (var i = 0; i < ids.length; i++) {
860
830
  if (ids[i]) {
861
831
  var element = new webdriver.WebElement(this);
862
- element.getId().setValue(ids[i]);
832
+ element.getId().setValue(ids[i]['ELEMENT']);
863
833
  elements.push(element);
864
834
  }
865
835
  }
@@ -870,21 +840,21 @@ webdriver.WebDriver.prototype.findElements = function(by) {
870
840
 
871
841
 
872
842
  /**
873
- * Adjust the speed of the mouse for mouse related commands.
843
+ * Adjust the speed of user input.
874
844
  * @param {webdriver.WebDriver.Speed} speed The new speed setting.
875
845
  */
876
- webdriver.WebDriver.prototype.setMouseSpeed = function(speed) {
877
- this.addCommand(webdriver.CommandName.SET_MOUSE_SPEED).
878
- setParameters(speed);
846
+ webdriver.WebDriver.prototype.setSpeed = function(speed) {
847
+ this.addCommand(webdriver.CommandName.SET_SPEED).
848
+ setParameter("speed", speed);
879
849
  };
880
850
 
881
851
 
882
852
  /**
883
- * Fetch the current mouse speed.
853
+ * Fetch the current user input speed.
884
854
  * @return {webdriver.Future} A Future whose value will be set by this driver
885
855
  * when the query command completes.
886
856
  */
887
- webdriver.WebDriver.prototype.getMouseSpeed = function() {
888
- return this.addCommand(webdriver.CommandName.GET_MOUSE_SPEED).
857
+ webdriver.WebDriver.prototype.getSpeed = function() {
858
+ return this.addCommand(webdriver.CommandName.GET_SPEED).
889
859
  getFutureResult();
890
860
  };
@@ -77,13 +77,10 @@ webdriver.WebElement = function(driver) {
77
77
  webdriver.WebElement.prototype.isElementPresent = function(locator) {
78
78
  locator = webdriver.By.Locator.checkLocator(locator);
79
79
  return this.driver_.callFunction(function() {
80
- var findCommand = this.driver_.
81
- addCommand(webdriver.CommandName.FIND_CHILD_ELEMENT).
82
- setParameters({
83
- 'id': this.getId(),
84
- 'using': locator.type,
85
- 'value': locator.target
86
- });
80
+ var findCommand = this.
81
+ createCommand_(webdriver.CommandName.FIND_CHILD_ELEMENT).
82
+ setParameter('using', locator.type).
83
+ setParameter('value', locator.target);
87
84
  var commandFailed = false;
88
85
  var key = goog.events.listenOnce(findCommand,
89
86
  webdriver.Command.ERROR_EVENT, function(e) {
@@ -115,14 +112,15 @@ webdriver.WebElement.prototype.isElementPresent = function(locator) {
115
112
  webdriver.WebElement.prototype.findElement = function(locator) {
116
113
  var webElement = new webdriver.WebElement(this.driver_);
117
114
  locator = webdriver.By.Locator.checkLocator(locator);
118
- var command = this.driver_.
119
- addCommand(webdriver.CommandName.FIND_CHILD_ELEMENT).
120
- setParameters({
121
- 'id': this.getId(),
122
- 'using': locator.type,
123
- 'value': locator.target
124
- });
125
- webElement.getId().setValue(command.getFutureResult());
115
+ this.driver_.callFunction(function() {
116
+ var command = this.
117
+ createCommand_(webdriver.CommandName.FIND_CHILD_ELEMENT).
118
+ setParameter('using', locator.type).
119
+ setParameter('value', locator.target);
120
+ this.driver_.callFunction(function(id) {
121
+ webElement.getId().setValue(id['ELEMENT']);
122
+ });
123
+ }, this);
126
124
  return webElement;
127
125
  };
128
126
 
@@ -138,18 +136,15 @@ webdriver.WebElement.prototype.findElement = function(locator) {
138
136
  webdriver.WebElement.prototype.findElements = function(locator) {
139
137
  locator = webdriver.By.Locator.checkLocator(locator);
140
138
  this.driver_.callFunction(function() {
141
- this.driver_.addCommand(webdriver.CommandName.FIND_CHILD_ELEMENTS).
142
- setParameters({
143
- 'id': this.getId(),
144
- 'using': locator.type,
145
- 'value': locator.target
146
- });
139
+ this.createCommand_(webdriver.CommandName.FIND_CHILD_ELEMENTS).
140
+ setParameter('using', locator.type).
141
+ setParameter('value', locator.target);
147
142
  return this.driver_.callFunction(function(ids) {
148
143
  var elements = [];
149
144
  for (var i = 0; i < ids.length; i++) {
150
145
  if (ids[i]) {
151
146
  var element = new webdriver.WebElement(this.driver_);
152
- element.getId().setValue(ids[i]);
147
+ element.getId().setValue(ids[i]['ELEMENT']);
153
148
  elements.push(element);
154
149
  }
155
150
  }
@@ -184,7 +179,7 @@ webdriver.WebElement.prototype.getId = function() {
184
179
  * @private
185
180
  */
186
181
  webdriver.WebElement.prototype.createCommand_ = function(name) {
187
- return this.driver_.addCommand(name, this);
182
+ return this.driver_.addCommand(name).setParameter('id', this.getId());
188
183
  };
189
184
 
190
185
 
@@ -192,7 +187,7 @@ webdriver.WebElement.prototype.createCommand_ = function(name) {
192
187
  * Adds a command to click on this element.
193
188
  */
194
189
  webdriver.WebElement.prototype.click = function() {
195
- this.createCommand_(webdriver.CommandName.CLICK);
190
+ this.createCommand_(webdriver.CommandName.CLICK_ELEMENT);
196
191
  };
197
192
 
198
193
 
@@ -246,15 +241,16 @@ webdriver.WebElement.prototype.click = function() {
246
241
  * convenience).
247
242
  */
248
243
  webdriver.WebElement.prototype.sendKeys = function(var_args) {
249
- var command = this.createCommand_(webdriver.CommandName.SEND_KEYS);
250
- command.setParameters.apply(command, arguments);
244
+ var command = this.createCommand_(
245
+ webdriver.CommandName.SEND_KEYS_TO_ELEMENT);
246
+ command.setParameter('value', goog.array.slice(arguments, 0));
251
247
  };
252
248
 
253
249
  /**
254
250
  * Queries for the tag/node name of this element.
255
251
  */
256
252
  webdriver.WebElement.prototype.getTagName = function() {
257
- return this.createCommand_(webdriver.CommandName.GET_TAG_NAME).
253
+ return this.createCommand_(webdriver.CommandName.GET_ELEMENT_TAG_NAME).
258
254
  getFutureResult();
259
255
  };
260
256
 
@@ -272,8 +268,9 @@ webdriver.WebElement.prototype.getTagName = function() {
272
268
  * Future.
273
269
  */
274
270
  webdriver.WebElement.prototype.getComputedStyle = function(cssStyleProperty) {
275
- return this.createCommand_(webdriver.CommandName.GET_VALUE_OF_CSS_PROPERTY).
276
- setParameters(cssStyleProperty).
271
+ return this.createCommand_(
272
+ webdriver.CommandName.GET_ELEMENT_VALUE_OF_CSS_PROPERTY).
273
+ setParameter('propertyName', cssStyleProperty).
277
274
  getFutureResult();
278
275
  };
279
276
 
@@ -283,8 +280,8 @@ webdriver.WebElement.prototype.getComputedStyle = function(cssStyleProperty) {
283
280
  * @param {string} attributeName The name of the attribute to query.
284
281
  */
285
282
  webdriver.WebElement.prototype.getAttribute = function(attributeName) {
286
- return this.createCommand_(webdriver.CommandName.GET_ATTRIBUTE).
287
- setParameters(attributeName).
283
+ return this.createCommand_(webdriver.CommandName.GET_ELEMENT_ATTRIBUTE).
284
+ setParameter('name', attributeName).
288
285
  getFutureResult();
289
286
  };
290
287
 
@@ -294,7 +291,7 @@ webdriver.WebElement.prototype.getAttribute = function(attributeName) {
294
291
  * this instance.
295
292
  */
296
293
  webdriver.WebElement.prototype.getValue = function() {
297
- return this.createCommand_(webdriver.CommandName.GET_VALUE).
294
+ return this.createCommand_(webdriver.CommandName.GET_ELEMENT_VALUE).
298
295
  getFutureResult();
299
296
  };
300
297
 
@@ -304,7 +301,7 @@ webdriver.WebElement.prototype.getValue = function() {
304
301
  * or trailing whitespace.
305
302
  */
306
303
  webdriver.WebElement.prototype.getText = function() {
307
- return this.createCommand_(webdriver.CommandName.GET_TEXT).
304
+ return this.createCommand_(webdriver.CommandName.GET_ELEMENT_TEXT).
308
305
  getFutureResult();
309
306
  };
310
307
 
@@ -313,7 +310,7 @@ webdriver.WebElement.prototype.getText = function() {
313
310
  * Selects this element.
314
311
  */
315
312
  webdriver.WebElement.prototype.setSelected = function() {
316
- this.createCommand_(webdriver.CommandName.SET_SELECTED);
313
+ this.createCommand_(webdriver.CommandName.SET_ELEMENT_SELECTED);
317
314
  };
318
315
 
319
316
 
@@ -321,7 +318,7 @@ webdriver.WebElement.prototype.setSelected = function() {
321
318
  * @return {webdriver.Future} The size of this element.
322
319
  */
323
320
  webdriver.WebElement.prototype.getSize = function() {
324
- return this.createCommand_(webdriver.CommandName.GET_SIZE).
321
+ return this.createCommand_(webdriver.CommandName.GET_ELEMENT_SIZE).
325
322
  getFutureResult();
326
323
  };
327
324
 
@@ -330,7 +327,7 @@ webdriver.WebElement.prototype.getSize = function() {
330
327
  * @return {webdriver.Future} The location of this element.
331
328
  */
332
329
  webdriver.WebElement.prototype.getLocation = function() {
333
- return this.createCommand_(webdriver.CommandName.GET_LOCATION).
330
+ return this.createCommand_(webdriver.CommandName.GET_ELEMENT_LOCATION).
334
331
  getFutureResult();
335
332
  };
336
333
 
@@ -343,7 +340,8 @@ webdriver.WebElement.prototype.getLocation = function() {
343
340
  */
344
341
  webdriver.WebElement.prototype.dragAndDropBy = function(x, y) {
345
342
  return this.createCommand_(webdriver.CommandName.DRAG_ELEMENT).
346
- setParameters(x, y).
343
+ setParameter('x', x).
344
+ setParameter('y', y).
347
345
  getFutureResult();
348
346
  };
349
347
 
@@ -394,7 +392,7 @@ webdriver.WebElement.prototype.isEnabled = function() {
394
392
  */
395
393
  webdriver.WebElement.prototype.isCheckedOrSelected_ = function() {
396
394
  return this.driver_.callFunction(function() {
397
- this.createCommand_(webdriver.CommandName.GET_TAG_NAME);
395
+ this.createCommand_(webdriver.CommandName.GET_ELEMENT_TAG_NAME);
398
396
  return this.driver_.callFunction(function(prevResult) {
399
397
  var attribute = prevResult == 'input' ? 'checked' : 'selected';
400
398
  return this.getAttribute(attribute);
@@ -427,7 +425,7 @@ webdriver.WebElement.prototype.isChecked = function() {
427
425
  */
428
426
  webdriver.WebElement.prototype.toggle = function() {
429
427
  return this.driver_.callFunction(function() {
430
- this.createCommand_(webdriver.CommandName.TOGGLE);
428
+ this.createCommand_(webdriver.CommandName.TOGGLE_ELEMENT);
431
429
  return this.isCheckedOrSelected_();
432
430
  }, this);
433
431
  };
@@ -438,7 +436,7 @@ webdriver.WebElement.prototype.toggle = function() {
438
436
  * will that form.
439
437
  */
440
438
  webdriver.WebElement.prototype.submit = function() {
441
- this.createCommand_(webdriver.CommandName.SUBMIT);
439
+ this.createCommand_(webdriver.CommandName.SUBMIT_ELEMENT);
442
440
  };
443
441
 
444
442
 
@@ -447,7 +445,7 @@ webdriver.WebElement.prototype.submit = function() {
447
445
  * will clear its {@code value}.
448
446
  */
449
447
  webdriver.WebElement.prototype.clear = function() {
450
- this.createCommand_(webdriver.CommandName.CLEAR);
448
+ this.createCommand_(webdriver.CommandName.CLEAR_ELEMENT);
451
449
  };
452
450
 
453
451
 
@@ -455,7 +453,7 @@ webdriver.WebElement.prototype.clear = function() {
455
453
  * @return {webdriver.Future} Whether this element is currently displayed.
456
454
  */
457
455
  webdriver.WebElement.prototype.isDisplayed = function() {
458
- return this.createCommand_(webdriver.CommandName.IS_DISPLAYED).
456
+ return this.createCommand_(webdriver.CommandName.IS_ELEMENT_DISPLAYED).
459
457
  getFutureResult();
460
458
  };
461
459