selenium-webdriver 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) 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 +1 -0
  4. data/chrome/src/extension/content_script.js +182 -177
  5. data/chrome/src/extension/manifest-nonwin.json +1 -1
  6. data/chrome/src/extension/manifest-win.json +1 -1
  7. data/chrome/src/rb/lib/selenium/webdriver/chrome/bridge.rb +9 -3
  8. data/chrome/src/rb/lib/selenium/webdriver/chrome/launcher.rb +1 -1
  9. data/common/src/js/core/Blank.html +7 -0
  10. data/common/src/js/core/InjectedRemoteRunner.html +8 -0
  11. data/common/src/js/core/RemoteRunner.html +101 -0
  12. data/common/src/js/core/SeleniumLog.html +109 -0
  13. data/common/src/js/core/TestPrompt.html +145 -0
  14. data/common/src/js/core/TestRunner-splash.html +55 -0
  15. data/common/src/js/core/TestRunner.html +177 -0
  16. data/common/src/js/core/icons/all.png +0 -0
  17. data/common/src/js/core/icons/continue.png +0 -0
  18. data/common/src/js/core/icons/continue_disabled.png +0 -0
  19. data/common/src/js/core/icons/pause.png +0 -0
  20. data/common/src/js/core/icons/pause_disabled.png +0 -0
  21. data/common/src/js/core/icons/selected.png +0 -0
  22. data/common/src/js/core/icons/step.png +0 -0
  23. data/common/src/js/core/icons/step_disabled.png +0 -0
  24. data/common/src/js/core/lib/cssQuery/cssQuery-p.js +6 -0
  25. data/common/src/js/core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  26. data/common/src/js/core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  27. data/common/src/js/core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  28. data/common/src/js/core/lib/cssQuery/src/cssQuery.js +356 -0
  29. data/common/src/js/core/lib/prototype.js +2006 -0
  30. data/common/src/js/core/lib/scriptaculous/builder.js +101 -0
  31. data/common/src/js/core/lib/scriptaculous/controls.js +815 -0
  32. data/common/src/js/core/lib/scriptaculous/dragdrop.js +915 -0
  33. data/common/src/js/core/lib/scriptaculous/effects.js +958 -0
  34. data/common/src/js/core/lib/scriptaculous/scriptaculous.js +47 -0
  35. data/common/src/js/core/lib/scriptaculous/slider.js +283 -0
  36. data/common/src/js/core/lib/scriptaculous/unittest.js +383 -0
  37. data/common/src/js/core/lib/snapsie.js +91 -0
  38. data/common/src/js/core/scripts/find_matching_child.js +69 -0
  39. data/common/src/js/core/scripts/htmlutils.js +1623 -0
  40. data/common/src/js/core/scripts/injection.html +72 -0
  41. data/common/src/js/core/scripts/selenium-api.js +3294 -0
  42. data/common/src/js/core/scripts/selenium-browserbot.js +2430 -0
  43. data/common/src/js/core/scripts/selenium-browserdetect.js +153 -0
  44. data/common/src/js/core/scripts/selenium-commandhandlers.js +379 -0
  45. data/common/src/js/core/scripts/selenium-executionloop.js +175 -0
  46. data/common/src/js/core/scripts/selenium-logging.js +148 -0
  47. data/common/src/js/core/scripts/selenium-remoterunner.js +695 -0
  48. data/common/src/js/core/scripts/selenium-testrunner.js +1362 -0
  49. data/common/src/js/core/scripts/selenium-version.js +5 -0
  50. data/common/src/js/core/scripts/ui-doc.html +808 -0
  51. data/common/src/js/core/scripts/ui-element.js +1644 -0
  52. data/common/src/js/core/scripts/ui-map-sample.js +979 -0
  53. data/common/src/js/core/scripts/user-extensions.js +3 -0
  54. data/common/src/js/core/scripts/user-extensions.js.sample +75 -0
  55. data/common/src/js/core/scripts/xmlextras.js +153 -0
  56. data/common/src/js/core/selenium-logo.png +0 -0
  57. data/common/src/js/core/selenium-test.css +43 -0
  58. data/common/src/js/core/selenium.css +316 -0
  59. data/common/src/js/core/xpath/dom.js +566 -0
  60. data/common/src/js/core/xpath/javascript-xpath-0.1.11.js +2816 -0
  61. data/common/src/js/core/xpath/util.js +549 -0
  62. data/common/src/js/core/xpath/xmltoken.js +149 -0
  63. data/common/src/js/core/xpath/xpath.js +2481 -0
  64. data/common/src/js/jsunit/app/css/jsUnitStyle.css +50 -0
  65. data/common/src/js/jsunit/app/css/readme +10 -0
  66. data/common/src/js/jsunit/app/emptyPage.html +11 -0
  67. data/common/src/js/jsunit/app/jsUnitCore.js +534 -0
  68. data/common/src/js/jsunit/app/jsUnitMockTimeout.js +81 -0
  69. data/common/src/js/jsunit/app/jsUnitTestManager.js +705 -0
  70. data/common/src/js/jsunit/app/jsUnitTestSuite.js +44 -0
  71. data/common/src/js/jsunit/app/jsUnitTracer.js +102 -0
  72. data/common/src/js/jsunit/app/jsUnitVersionCheck.js +59 -0
  73. data/common/src/js/jsunit/app/main-counts-errors.html +12 -0
  74. data/common/src/js/jsunit/app/main-counts-failures.html +13 -0
  75. data/common/src/js/jsunit/app/main-counts-runs.html +13 -0
  76. data/common/src/js/jsunit/app/main-counts.html +21 -0
  77. data/common/src/js/jsunit/app/main-data.html +178 -0
  78. data/common/src/js/jsunit/app/main-errors.html +23 -0
  79. data/common/src/js/jsunit/app/main-frame.html +19 -0
  80. data/common/src/js/jsunit/app/main-loader.html +45 -0
  81. data/common/src/js/jsunit/app/main-progress.html +25 -0
  82. data/common/src/js/jsunit/app/main-results.html +67 -0
  83. data/common/src/js/jsunit/app/main-status.html +13 -0
  84. data/common/src/js/jsunit/app/testContainer.html +16 -0
  85. data/common/src/js/jsunit/app/testContainerController.html +77 -0
  86. data/common/src/js/jsunit/app/xbDebug.js +306 -0
  87. data/common/src/js/jsunit/changelog.txt +60 -0
  88. data/common/src/js/jsunit/css/jsUnitStyle.css +83 -0
  89. data/common/src/js/jsunit/images/green.gif +0 -0
  90. data/common/src/js/jsunit/images/logo_jsunit.gif +0 -0
  91. data/common/src/js/jsunit/images/powerby-transparent.gif +0 -0
  92. data/common/src/js/jsunit/images/red.gif +0 -0
  93. data/common/src/js/jsunit/licenses/JDOM_license.txt +56 -0
  94. data/common/src/js/jsunit/licenses/Jetty_license.html +213 -0
  95. data/common/src/js/jsunit/licenses/MPL-1.1.txt +470 -0
  96. data/common/src/js/jsunit/licenses/gpl-2.txt +340 -0
  97. data/common/src/js/jsunit/licenses/index.html +141 -0
  98. data/common/src/js/jsunit/licenses/lgpl-2.1.txt +504 -0
  99. data/common/src/js/jsunit/licenses/mpl-tri-license-c.txt +35 -0
  100. data/common/src/js/jsunit/licenses/mpl-tri-license-html.txt +35 -0
  101. data/common/src/js/jsunit/readme.txt +19 -0
  102. data/common/src/js/jsunit/testRunner.html +167 -0
  103. data/common/src/js/jsunit/version.txt +1 -0
  104. data/common/src/rb/README +29 -0
  105. data/common/src/rb/lib/selenium/webdriver/driver.rb +124 -12
  106. data/common/src/rb/lib/selenium/webdriver/element.rb +119 -3
  107. data/common/src/rb/lib/selenium/webdriver/error.rb +1 -2
  108. data/common/src/rb/lib/selenium/webdriver/find.rb +19 -2
  109. data/common/src/rb/lib/selenium/webdriver/keys.rb +5 -1
  110. data/common/src/rb/lib/selenium/webdriver/navigation.rb +8 -4
  111. data/common/src/rb/lib/selenium/webdriver/platform.rb +4 -2
  112. data/common/src/rb/lib/selenium/webdriver/target_locator.rb +18 -0
  113. data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
  114. data/firefox/prebuilt/linux/Release/libwebdriver-firefox.so +0 -0
  115. data/firefox/prebuilt/linux/Release/x_ignore_nofocus.so +0 -0
  116. data/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so +0 -0
  117. data/firefox/prebuilt/linux64/Release/x_ignore_nofocus.so +0 -0
  118. data/firefox/src/extension/components/utils.js +13 -2
  119. data/firefox/src/extension/install.rdf +1 -1
  120. data/firefox/src/rb/lib/selenium/webdriver/firefox.rb +3 -2
  121. data/firefox/src/rb/lib/selenium/webdriver/firefox/binary.rb +1 -7
  122. data/firefox/src/rb/lib/selenium/webdriver/firefox/bridge.rb +11 -4
  123. data/firefox/src/rb/lib/selenium/webdriver/firefox/profile.rb +56 -15
  124. data/firefox/src/rb/lib/selenium/webdriver/firefox/util.rb +1 -1
  125. data/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll +0 -0
  126. data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
  127. data/jobbie/src/rb/lib/selenium/webdriver/ie/bridge.rb +10 -5
  128. data/jobbie/src/rb/lib/selenium/webdriver/ie/util.rb +9 -10
  129. data/remote/client/src/rb/lib/selenium/webdriver/remote/bridge.rb +4 -2
  130. data/remote/client/src/rb/lib/selenium/webdriver/remote/capabilities.rb +23 -23
  131. metadata +103 -6
  132. data/jobbie/prebuilt/Win32/Release/webdriver-ie-test.dll +0 -0
  133. data/jobbie/prebuilt/Win32/Release/webdriver-ie.dll +0 -0
  134. data/jobbie/prebuilt/x64/Release/webdriver-ie-test.dll +0 -0
  135. data/jobbie/prebuilt/x64/Release/webdriver-ie.dll +0 -0
@@ -577,6 +577,7 @@ function parsePortMessage(message) {
577
577
  case 10: //org.openqa.selenium.StaleElementReferenceException
578
578
  case 11: //org.openqa.selenium.ElementNotVisibleException
579
579
  case 12: //java.lang.UnsupportedOperationException [Invalid element state ]
580
+ case 13: //org.openqa.selenium.WebDriverException [Unhandled error]
580
581
  case 17: //org.openqa.selenium.WebDriverException [Bad javascript]
581
582
  case 19: //org.openqa.selenium.XPathLookupException
582
583
  case 99: //org.openqa.selenium.WebDriverException [Native event]
@@ -61,185 +61,190 @@ function parsePortMessage(message) {
61
61
  return;
62
62
  }
63
63
  }
64
- switch (message.request.request) {
65
- case "addCookie":
66
- response.value = setCookie(message.request.cookie);
67
- response.wait = false;
68
- break;
69
- case "clearElement":
70
- response.value = clearElement(element);
71
- break;
72
- case "clickElement":
73
- response.value = clickElement(element, message.request.elementId);
74
- break;
75
- case "nonNativeClickElement":
76
- //TODO(danielwh): Focus/blur events for non-native clicking
77
- element.scrollIntoView(true);
78
- //TODO: Work out a way of firing events,
79
- //now that synthesising them gives appendMessage errors
80
- console.log("mouse downing");
81
- Utils.fireMouseEventOn(element, "mousedown");
82
- console.log("mouse up");
83
- Utils.fireMouseEventOn(element, "mouseup");
84
- console.log("mouse click");
85
- Utils.fireMouseEventOn(element, "click");
64
+ try {
65
+ switch (message.request.request) {
66
+ case "addCookie":
67
+ response.value = setCookie(message.request.cookie);
68
+ response.wait = false;
69
+ break;
70
+ case "clearElement":
71
+ response.value = clearElement(element);
72
+ break;
73
+ case "clickElement":
74
+ response.value = clickElement(element, message.request.elementId);
75
+ break;
76
+ case "nonNativeClickElement":
77
+ //TODO(danielwh): Focus/blur events for non-native clicking
78
+ element.scrollIntoView(true);
79
+ //TODO: Work out a way of firing events,
80
+ //now that synthesising them gives appendMessage errors
81
+ console.log("mouse downing");
82
+ Utils.fireMouseEventOn(element, "mousedown");
83
+ console.log("mouse up");
84
+ Utils.fireMouseEventOn(element, "mouseup");
85
+ console.log("mouse click");
86
+ Utils.fireMouseEventOn(element, "click");
86
87
 
87
- if (element.click) {
88
- console.log("click");
89
- execute("try { arguments[0].click(); } catch(e){}", {type: "ELEMENT", value: getElementId_(element)});
88
+ if (element.click) {
89
+ console.log("click");
90
+ execute("try { arguments[0].click(); } catch(e){}", {type: "ELEMENT", value: getElementId_(element)});
91
+ }
92
+ response.value = {statusCode: 0};
93
+ break;
94
+ case "deleteAllCookies":
95
+ response.value = deleteAllCookies();
96
+ response.wait = false;
97
+ break;
98
+ case "deleteCookie":
99
+ response.value = deleteCookie(message.request.name);
100
+ response.wait = false;
101
+ break;
102
+ case "executeScript":
103
+ execute(message.request.script, message.request.args);
104
+ //Sends port message back to background page from its own callback
105
+ break;
106
+ case "getCookies":
107
+ response.value = getCookies();
108
+ response.wait = false;
109
+ break;
110
+ case "getCookie":
111
+ response.value = getCookieNamed(message.request.name);
112
+ response.wait = false;
113
+ break;
114
+ case "findChildElement":
115
+ response.value = getElement(false, message.request.using, message.request.value, message.request.id);
116
+ response.wait = false;
117
+ break;
118
+ case "findChildElements":
119
+ response.value = getElement(true, message.request.using, message.request.value, message.request.id);
120
+ response.wait = false;
121
+ break;
122
+ case "findElement":
123
+ response.value = getElement(false, message.request.using, message.request.value);
124
+ response.wait = false;
125
+ break;
126
+ case "findElements":
127
+ response.value = getElement(true, message.request.using, message.request.value);
128
+ response.wait = false;
129
+ break;
130
+ case "getElementAttribute":
131
+ response.value = getElementAttribute(element, message.request.attribute);
132
+ response.wait = false;
133
+ break;
134
+ case "getElementValueOfCssProperty":
135
+ response.value = {statusCode: 0, value: getStyle(element, message.request.css)};
136
+ response.wait = false;
137
+ break;
138
+ case "getElementLocation":
139
+ var coords = getElementCoords(element);
140
+ response.value = {statusCode: 0, value: {type: "POINT", x: coords[0], y: coords[1]}};
141
+ response.wait = false;
142
+ break;
143
+ case "getElementLocationOnceScrolledIntoView":
144
+ element.scrollIntoView(true);
145
+ var coords = getElementCoords(element);
146
+ response.value = {statusCode: 0, value: {type: "POINT", x: coords[0], y: coords[1]}};
147
+ break;
148
+ case "getElementSize":
149
+ response.value = {statusCode: 0, value: getOffsetSizeFromSubElements(element)};
150
+ response.wait = false;
151
+ break;
152
+ case "getElementTagName":
153
+ response.value = {statusCode: 0, value: element.tagName.toLowerCase()};
154
+ response.wait = false;
155
+ break;
156
+ case "getElementText":
157
+ response.value = {statusCode: 0, value: Utils.getText(element)};
158
+ response.wait = false;
159
+ break;
160
+ case "getElementValue":
161
+ response.value = {statusCode: 0, value: element.value};
162
+ response.wait = false;
163
+ break;
164
+ case "getFrameNameFromIndex":
165
+ //TODO(danielwh): Do this by simply looking it up in window.frames when Chrome is fixed. Track: crbug.com 20773
166
+ getFrameNameFromIndex(message.request.index);
167
+ break;
168
+ case "getPageSource":
169
+ response.value = getSource();
170
+ response.wait = false;
171
+ break;
172
+ case "getTitle":
173
+ response.value = {statusCode: 0, value: ChromeDriverContentScript.currentDocument.title};
174
+ response.wait = false;
175
+ break;
176
+ case "getCurrentUrl":
177
+ response.value = {statusCode: 0, value: ChromeDriverContentScript.currentDocument.location.href};
178
+ response.wait = false;
179
+ break;
180
+ case "goBack":
181
+ history.back();
182
+ response.value = {statusCode: 0};
183
+ break;
184
+ case "goForward":
185
+ history.forward();
186
+ response.value = {statusCode: 0};
187
+ break;
188
+ case "hoverOverElement":
189
+ response.value = hoverElement(element, message.request.elementId);
190
+ break;
191
+ case "injectEmbed":
192
+ injectEmbed();
193
+ break;
194
+ case "isElementDisplayed":
195
+ response.value = {statusCode: 0, value: isElementDisplayed(element)};
196
+ response.wait = false;
197
+ break;
198
+ case "isElementEnabled":
199
+ response.value = {statusCode: 0, value: !element.disabled};
200
+ response.wait = false;
201
+ break;
202
+ case "isElementSelected":
203
+ response.value = {statusCode: 0, value: findWhetherElementIsSelected(element)};
204
+ response.wait = false;
205
+ break;
206
+ case "refresh":
207
+ ChromeDriverContentScript.currentDocument.location.reload(true);
208
+ response.value = {statusCode: 0};
209
+ break;
210
+ case "sendKeysToElement":
211
+ response.value = sendElementKeys(element, message.request.keys, message.request.elementId);
212
+ response.wait = false;
213
+ break;
214
+ case "sendElementNonNativeKeys":
215
+ response.value = sendElementNonNativeKeys(element, message.request.keys);
216
+ response.wait = false;
217
+ break;
218
+ case "setElementSelected":
219
+ response.value = selectElement(element);
220
+ break;
221
+ case "getActiveElement":
222
+ response.value = {statusCode: 0, value: [addElementToInternalArray(ChromeDriverContentScript.currentDocument.activeElement).toString()]};
223
+ response.wait = false;
224
+ break;
225
+ case "switchToNamedIFrameIfOneExists":
226
+ response.value = switchToNamedIFrameIfOneExists(message.request.name);
227
+ response.wait = false;
228
+ break;
229
+ case "submitElement":
230
+ response.value = submitElement(element);
231
+ break;
232
+ case "toggleElement":
233
+ response.value = toggleElement(element);
234
+ break;
235
+ case "sniffForMetaRedirects":
236
+ response.value = sniffForMetaRedirects();
237
+ break;
238
+ default:
239
+ response.value = {statusCode: 9, value: {message: message.request.request + " is unsupported"}};
240
+ break;
90
241
  }
91
- response.value = {statusCode: 0};
92
- break;
93
- case "deleteAllCookies":
94
- response.value = deleteAllCookies();
95
- response.wait = false;
96
- break;
97
- case "deleteCookie":
98
- response.value = deleteCookie(message.request.name);
99
- response.wait = false;
100
- break;
101
- case "executeScript":
102
- execute(message.request.script, message.request.args);
103
- //Sends port message back to background page from its own callback
104
- break;
105
- case "getCookies":
106
- response.value = getCookies();
107
- response.wait = false;
108
- break;
109
- case "getCookie":
110
- response.value = getCookieNamed(message.request.name);
111
- response.wait = false;
112
- break;
113
- case "findChildElement":
114
- response.value = getElement(false, message.request.using, message.request.value, message.request.id);
115
- response.wait = false;
116
- break;
117
- case "findChildElements":
118
- response.value = getElement(true, message.request.using, message.request.value, message.request.id);
119
- response.wait = false;
120
- break;
121
- case "findElement":
122
- response.value = getElement(false, message.request.using, message.request.value);
123
- response.wait = false;
124
- break;
125
- case "findElements":
126
- response.value = getElement(true, message.request.using, message.request.value);
127
- response.wait = false;
128
- break;
129
- case "getElementAttribute":
130
- response.value = getElementAttribute(element, message.request.attribute);
131
- response.wait = false;
132
- break;
133
- case "getElementValueOfCssProperty":
134
- response.value = {statusCode: 0, value: getStyle(element, message.request.css)};
135
- response.wait = false;
136
- break;
137
- case "getElementLocation":
138
- var coords = getElementCoords(element);
139
- response.value = {statusCode: 0, value: {type: "POINT", x: coords[0], y: coords[1]}};
140
- response.wait = false;
141
- break;
142
- case "getElementLocationOnceScrolledIntoView":
143
- element.scrollIntoView(true);
144
- var coords = getElementCoords(element);
145
- response.value = {statusCode: 0, value: {type: "POINT", x: coords[0], y: coords[1]}};
146
- break;
147
- case "getElementSize":
148
- response.value = {statusCode: 0, value: getOffsetSizeFromSubElements(element)};
149
- response.wait = false;
150
- break;
151
- case "getElementTagName":
152
- response.value = {statusCode: 0, value: element.tagName.toLowerCase()};
153
- response.wait = false;
154
- break;
155
- case "getElementText":
156
- response.value = {statusCode: 0, value: Utils.getText(element)};
157
- response.wait = false;
158
- break;
159
- case "getElementValue":
160
- response.value = {statusCode: 0, value: element.value};
161
- response.wait = false;
162
- break;
163
- case "getFrameNameFromIndex":
164
- //TODO(danielwh): Do this by simply looking it up in window.frames when Chrome is fixed. Track: crbug.com 20773
165
- getFrameNameFromIndex(message.request.index);
166
- break;
167
- case "getPageSource":
168
- response.value = getSource();
169
- response.wait = false;
170
- break;
171
- case "getTitle":
172
- response.value = {statusCode: 0, value: ChromeDriverContentScript.currentDocument.title};
173
- response.wait = false;
174
- break;
175
- case "getCurrentUrl":
176
- response.value = {statusCode: 0, value: ChromeDriverContentScript.currentDocument.location.href};
177
- response.wait = false;
178
- break;
179
- case "goBack":
180
- history.back();
181
- response.value = {statusCode: 0};
182
- break;
183
- case "goForward":
184
- history.forward();
185
- response.value = {statusCode: 0};
186
- break;
187
- case "hoverOverElement":
188
- response.value = hoverElement(element, message.request.elementId);
189
- break;
190
- case "injectEmbed":
191
- injectEmbed();
192
- break;
193
- case "isElementDisplayed":
194
- response.value = {statusCode: 0, value: isElementDisplayed(element)};
195
- response.wait = false;
196
- break;
197
- case "isElementEnabled":
198
- response.value = {statusCode: 0, value: !element.disabled};
199
- response.wait = false;
200
- break;
201
- case "isElementSelected":
202
- response.value = {statusCode: 0, value: findWhetherElementIsSelected(element)};
203
- response.wait = false;
204
- break;
205
- case "refresh":
206
- ChromeDriverContentScript.currentDocument.location.reload(true);
207
- response.value = {statusCode: 0};
208
- break;
209
- case "sendKeysToElement":
210
- response.value = sendElementKeys(element, message.request.keys, message.request.elementId);
211
- response.wait = false;
212
- break;
213
- case "sendElementNonNativeKeys":
214
- response.value = sendElementNonNativeKeys(element, message.request.keys);
215
- response.wait = false;
216
- break;
217
- case "setElementSelected":
218
- response.value = selectElement(element);
219
- break;
220
- case "getActiveElement":
221
- response.value = {statusCode: 0, value: [addElementToInternalArray(ChromeDriverContentScript.currentDocument.activeElement).toString()]};
222
- response.wait = false;
223
- break;
224
- case "switchToNamedIFrameIfOneExists":
225
- response.value = switchToNamedIFrameIfOneExists(message.request.name);
226
- response.wait = false;
227
- break;
228
- case "submitElement":
229
- response.value = submitElement(element);
230
- break;
231
- case "toggleElement":
232
- response.value = toggleElement(element);
233
- break;
234
- case "sniffForMetaRedirects":
235
- response.value = sniffForMetaRedirects();
236
- break;
237
- default:
238
- response.value = {statusCode: 9, value: {message: message.request.request + " is unsupported"}};
239
- break;
242
+ } catch (e) {
243
+ console.log("Caught exception " + e + ", sending error response");
244
+ ChromeDriverContentScript.port.postMessage({response: {statusCode: 13, value: {message: "An unexpected error occured while executing " + message.request.request + ", exception dump: " + e}}, sequenceNumber: message.sequenceNumber});
240
245
  }
241
246
  if (response.value != null) {
242
- ChromeDriverContentScript.port.postMessage({response: response, sequenceNumber: message.sequenceNumber})
247
+ ChromeDriverContentScript.port.postMessage({response: response, sequenceNumber: message.sequenceNumber});
243
248
  console.log("Sent response: " + JSON.stringify(response) + " (seq:" + message.sequenceNumber + ")");
244
249
  }
245
250
  if (message.request.followup) {
@@ -453,8 +458,8 @@ function getElement(plural, lookupBy, lookupValue, id) {
453
458
  elements = getElementsByXPath(root + "//" + lookupValue);
454
459
  break;
455
460
  case "xpath":
456
- if (root != "") {
457
- //Because xpath is relative to the parent, if there is a parent, we add a /
461
+ if (root != "" && lookupValue[0] != "/") {
462
+ //Because xpath is relative to the parent, if there is a parent, and the lookup seems to be implied sub-lookup, we add a /
458
463
  root = root + "/";
459
464
  }
460
465
  var xpath = root + lookupValue;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "WebDriver",
3
- "version": "0.3",
3
+ "version": "1.9.9",
4
4
  "description": "WebDriver extension for Chrome",
5
5
  "browser_action": {
6
6
  "default_title": "WebDriver",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "WebDriver",
3
- "version": "0.2",
3
+ "version": "1.9.9",
4
4
  "description": "WebDriver extension for Chrome",
5
5
  "browser_action": {
6
6
  "default_title": "WebDriver",
@@ -69,6 +69,10 @@ module Selenium
69
69
  execute :request => 'close'
70
70
  end
71
71
 
72
+ def refresh
73
+ execute :request => 'refresh'
74
+ end
75
+
72
76
  def getWindowHandles
73
77
  execute :request => 'getWindowHandles'
74
78
  end
@@ -213,8 +217,10 @@ module Selenium
213
217
  end
214
218
 
215
219
  def getElementSize(element)
216
- execute :request => 'getElementSize',
217
- :elementId => element
220
+ data = execute :request => 'getElementSize',
221
+ :elementId => element
222
+
223
+ Dimension.new data['width'], data['height']
218
224
  end
219
225
 
220
226
  def sendKeysToElement(element, string)
@@ -269,7 +275,7 @@ module Selenium
269
275
  end
270
276
  alias_method :switchToActiveElement, :getActiveElement
271
277
 
272
- def hoverOverElement
278
+ def hoverOverElement(element)
273
279
  execute :request => 'hoverOverElement',
274
280
  :elementId => element
275
281
  end
@@ -12,7 +12,7 @@ module Selenium
12
12
  WindowsLauncher.new
13
13
  when :macosx
14
14
  MacOSXLauncher.new
15
- when :unix
15
+ when :unix, :linux
16
16
  UnixLauncher.new
17
17
  else
18
18
  raise "unknown OS: #{Platform.os}"
@@ -0,0 +1,7 @@
1
+ <html>
2
+ <head>
3
+ <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
4
+ </head>
5
+ <body>
6
+ </body>
7
+ </html>