selenium-webdriver 2.48.2 → 2.52.0

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 (524) hide show
  1. package/CHANGES.md +57 -0
  2. package/NOTICE +1 -1
  3. package/README.md +56 -6
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +597 -5
  8. package/example/google_search_generator.js +2 -4
  9. package/example/logging.js +6 -2
  10. package/executors.js +11 -27
  11. package/firefox/binary.js +79 -87
  12. package/firefox/extension.js +10 -18
  13. package/firefox/index.js +173 -173
  14. package/firefox/profile.js +220 -240
  15. package/http/index.js +396 -79
  16. package/http/util.js +35 -35
  17. package/ie.js +288 -309
  18. package/index.js +34 -125
  19. package/io/exec.js +58 -39
  20. package/io/index.js +54 -48
  21. package/lib/actions.js +594 -0
  22. package/lib/by.js +276 -0
  23. package/lib/capabilities.js +404 -0
  24. package/lib/{webdriver/command.js → command.js} +88 -72
  25. package/lib/{webdriver/button.js → devmode.js} +13 -8
  26. package/lib/events.js +210 -0
  27. package/lib/firefox/amd64/libnoblur64.so +0 -0
  28. package/lib/firefox/i386/libnoblur.so +0 -0
  29. package/lib/firefox/webdriver.json +5 -1
  30. package/lib/firefox/webdriver.xpi +0 -0
  31. package/lib/{webdriver/key.js → input.js} +82 -2
  32. package/lib/logging.js +668 -0
  33. package/lib/{webdriver/promise.js → promise.js} +688 -644
  34. package/lib/session.js +79 -0
  35. package/lib/{webdriver/serializable.js → symbols.js} +11 -16
  36. package/lib/test/build.js +4 -4
  37. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  38. package/lib/test/data/click_tests/overlapping_elements.html +15 -4
  39. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  40. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  41. package/lib/test/data/readOnlyPage.html +1 -1
  42. package/lib/test/data/selectPage.html +18 -2
  43. package/lib/test/fileserver.js +3 -4
  44. package/lib/test/index.js +7 -3
  45. package/lib/test/resources.js +1 -1
  46. package/lib/until.js +428 -0
  47. package/lib/webdriver.js +2351 -0
  48. package/net/portprober.js +15 -11
  49. package/opera.js +295 -314
  50. package/package.json +6 -5
  51. package/phantomjs.js +135 -140
  52. package/proxy.js +6 -4
  53. package/remote/index.js +229 -221
  54. package/safari.js +319 -310
  55. package/test/chrome/options_test.js +11 -9
  56. package/test/element_finding_test.js +51 -13
  57. package/test/error_test.js +163 -0
  58. package/test/execute_script_test.js +1 -1
  59. package/test/http/http_test.js +317 -55
  60. package/test/http/util_test.js +25 -23
  61. package/test/io_test.js +6 -1
  62. package/test/lib/by_test.js +127 -0
  63. package/test/lib/capabilities_test.js +84 -0
  64. package/test/lib/events_test.js +177 -0
  65. package/test/lib/logging_test.js +272 -0
  66. package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
  67. package/test/lib/promise_error_test.js +808 -0
  68. package/test/lib/promise_flow_test.js +2282 -0
  69. package/test/lib/promise_generator_test.js +308 -0
  70. package/test/lib/promise_test.js +996 -0
  71. package/test/lib/testutil.js +90 -0
  72. package/test/lib/until_test.js +436 -0
  73. package/test/lib/webdriver_test.js +2207 -0
  74. package/test/page_loading_test.js +7 -9
  75. package/test/stale_element_test.js +2 -2
  76. package/test/testing/assert_test.js +374 -0
  77. package/test/testing/index_test.js +9 -11
  78. package/testing/assert.js +334 -17
  79. package/testing/index.js +10 -0
  80. package/_base.js +0 -200
  81. package/docs/Changes.html +0 -356
  82. package/docs/class_bot_Error.html +0 -15
  83. package/docs/class_webdriver_ActionSequence.html +0 -115
  84. package/docs/class_webdriver_Alert.html +0 -24
  85. package/docs/class_webdriver_AlertPromise.html +0 -92
  86. package/docs/class_webdriver_Capabilities.html +0 -60
  87. package/docs/class_webdriver_Command.html +0 -15
  88. package/docs/class_webdriver_EventEmitter.html +0 -35
  89. package/docs/class_webdriver_FileDetector.html +0 -21
  90. package/docs/class_webdriver_Locator.html +0 -12
  91. package/docs/class_webdriver_Serializable.html +0 -9
  92. package/docs/class_webdriver_Session.html +0 -13
  93. package/docs/class_webdriver_TouchSequence.html +0 -49
  94. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  95. package/docs/class_webdriver_WebDriver.html +0 -313
  96. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  97. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  98. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  99. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  100. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  101. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  102. package/docs/class_webdriver_WebElement.html +0 -223
  103. package/docs/class_webdriver_WebElementPromise.html +0 -274
  104. package/docs/class_webdriver_http_Executor.html +0 -22
  105. package/docs/class_webdriver_http_Request.html +0 -12
  106. package/docs/class_webdriver_http_Response.html +0 -13
  107. package/docs/class_webdriver_logging_Entry.html +0 -15
  108. package/docs/class_webdriver_logging_Level.html +0 -55
  109. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  110. package/docs/class_webdriver_logging_Logger.html +0 -119
  111. package/docs/class_webdriver_logging_Preferences.html +0 -8
  112. package/docs/class_webdriver_promise_CancellationError.html +0 -17
  113. package/docs/class_webdriver_promise_ControlFlow.html +0 -153
  114. package/docs/class_webdriver_promise_Deferred.html +0 -84
  115. package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
  116. package/docs/class_webdriver_promise_Promise.html +0 -75
  117. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  118. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  119. package/docs/class_webdriver_testing_Assertion.html +0 -99
  120. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  121. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  122. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  123. package/docs/class_webdriver_until_Condition.html +0 -7
  124. package/docs/dossier.css +0 -1
  125. package/docs/dossier.js +0 -86
  126. package/docs/enum_bot_ErrorCode.html +0 -3
  127. package/docs/enum_bot_Error_State.html +0 -2
  128. package/docs/enum_webdriver_Browser.html +0 -2
  129. package/docs/enum_webdriver_Button.html +0 -2
  130. package/docs/enum_webdriver_Capability.html +0 -33
  131. package/docs/enum_webdriver_CommandName.html +0 -3
  132. package/docs/enum_webdriver_Key.html +0 -12
  133. package/docs/enum_webdriver_logging_Type.html +0 -6
  134. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  135. package/docs/index.html +0 -125
  136. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  137. package/docs/interface_webdriver_http_Client.html +0 -10
  138. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  139. package/docs/module_selenium-webdriver.html +0 -23
  140. package/docs/module_selenium-webdriver__base.html +0 -23
  141. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  142. package/docs/module_selenium-webdriver_builder.html +0 -2
  143. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  144. package/docs/module_selenium-webdriver_chrome.html +0 -90
  145. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  146. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  147. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  148. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  149. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  150. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  151. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  152. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  153. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  154. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  155. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  156. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  157. package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
  158. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
  159. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  160. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  161. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  162. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  163. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  164. package/docs/module_selenium-webdriver_error.html +0 -4
  165. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  166. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  167. package/docs/module_selenium-webdriver_executors.html +0 -10
  168. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  169. package/docs/module_selenium-webdriver_firefox.html +0 -68
  170. package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
  171. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
  172. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
  173. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  174. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  175. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  176. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  177. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  178. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  179. package/docs/module_selenium-webdriver_http.html +0 -9
  180. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  181. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  182. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  183. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  184. package/docs/module_selenium-webdriver_http_util.html +0 -17
  185. package/docs/module_selenium-webdriver_ie.html +0 -11
  186. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  187. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  188. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  189. package/docs/module_selenium-webdriver_io.html +0 -37
  190. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  191. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  192. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  193. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  194. package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
  195. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  196. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  197. package/docs/module_selenium-webdriver_net.html +0 -7
  198. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  199. package/docs/module_selenium-webdriver_opera.html +0 -62
  200. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  201. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  202. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  203. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  204. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  205. package/docs/module_selenium-webdriver_proxy.html +0 -28
  206. package/docs/module_selenium-webdriver_remote.html +0 -8
  207. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  208. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  209. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
  210. package/docs/module_selenium-webdriver_safari.html +0 -9
  211. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  212. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  213. package/docs/module_selenium-webdriver_testing.html +0 -74
  214. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  215. package/docs/namespace_bot.html +0 -4
  216. package/docs/namespace_bot_json.html +0 -20
  217. package/docs/namespace_bot_response.html +0 -18
  218. package/docs/namespace_bot_userAgent.html +0 -33
  219. package/docs/namespace_webdriver.html +0 -30
  220. package/docs/namespace_webdriver_By.html +0 -56
  221. package/docs/namespace_webdriver_http.html +0 -6
  222. package/docs/namespace_webdriver_logging.html +0 -70
  223. package/docs/namespace_webdriver_promise.html +0 -688
  224. package/docs/namespace_webdriver_stacktrace.html +0 -17
  225. package/docs/namespace_webdriver_testing.html +0 -7
  226. package/docs/namespace_webdriver_testing_assert.html +0 -9
  227. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  228. package/docs/namespace_webdriver_until.html +0 -82
  229. package/docs/source/_base.js.src.html +0 -1
  230. package/docs/source/builder.js.src.html +0 -1
  231. package/docs/source/chrome.js.src.html +0 -1
  232. package/docs/source/error.js.src.html +0 -1
  233. package/docs/source/executors.js.src.html +0 -1
  234. package/docs/source/firefox/binary.js.src.html +0 -1
  235. package/docs/source/firefox/extension.js.src.html +0 -1
  236. package/docs/source/firefox/index.js.src.html +0 -1
  237. package/docs/source/firefox/profile.js.src.html +0 -1
  238. package/docs/source/http/index.js.src.html +0 -1
  239. package/docs/source/http/util.js.src.html +0 -1
  240. package/docs/source/ie.js.src.html +0 -1
  241. package/docs/source/index.js.src.html +0 -1
  242. package/docs/source/io/exec.js.src.html +0 -1
  243. package/docs/source/io/index.js.src.html +0 -1
  244. package/docs/source/lib/atoms/error.js.src.html +0 -1
  245. package/docs/source/lib/atoms/json.js.src.html +0 -1
  246. package/docs/source/lib/atoms/response.js.src.html +0 -1
  247. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  248. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  249. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  250. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  251. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  252. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  253. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  254. package/docs/source/lib/goog/base.js.src.html +0 -1
  255. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  256. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  257. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  258. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  259. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  260. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  261. package/docs/source/lib/goog/deps.js.src.html +0 -1
  262. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  263. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  264. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  265. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  266. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  267. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  268. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  269. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  270. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  271. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  272. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  273. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  274. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  275. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  276. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  277. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  278. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  279. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  280. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  282. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  283. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  284. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  285. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  286. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  287. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  288. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  289. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  290. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  291. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  292. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  293. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  294. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  295. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  296. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  297. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  298. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  299. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  300. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  301. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  302. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  303. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  304. package/docs/source/lib/goog/log/log.js.src.html +0 -1
  305. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  306. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  307. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  308. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  309. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  310. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  311. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  312. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  313. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  314. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  315. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  316. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  317. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  318. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  319. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  320. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  321. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  322. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  323. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  324. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  325. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  326. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  327. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  328. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  329. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  330. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  331. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  332. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  333. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  334. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  335. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  336. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  344. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  345. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  346. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  347. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  348. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  349. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  350. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  351. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  352. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  353. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  354. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  355. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  356. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  357. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  358. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  366. package/docs/source/net/index.js.src.html +0 -1
  367. package/docs/source/net/portprober.js.src.html +0 -1
  368. package/docs/source/opera.js.src.html +0 -1
  369. package/docs/source/phantomjs.js.src.html +0 -1
  370. package/docs/source/proxy.js.src.html +0 -1
  371. package/docs/source/remote/index.js.src.html +0 -1
  372. package/docs/source/safari.js.src.html +0 -1
  373. package/docs/source/testing/assert.js.src.html +0 -1
  374. package/docs/source/testing/index.js.src.html +0 -1
  375. package/docs/types.js +0 -1
  376. package/lib/atoms/error.js +0 -202
  377. package/lib/atoms/json.js +0 -80
  378. package/lib/atoms/response.js +0 -110
  379. package/lib/atoms/userAgent.js +0 -257
  380. package/lib/goog/LICENSE +0 -176
  381. package/lib/goog/array/array.js +0 -1654
  382. package/lib/goog/asserts/asserts.js +0 -365
  383. package/lib/goog/async/freelist.js +0 -88
  384. package/lib/goog/async/nexttick.js +0 -241
  385. package/lib/goog/async/run.js +0 -133
  386. package/lib/goog/async/workqueue.js +0 -139
  387. package/lib/goog/base.js +0 -2548
  388. package/lib/goog/debug/debug.js +0 -653
  389. package/lib/goog/debug/entrypointregistry.js +0 -158
  390. package/lib/goog/debug/error.js +0 -63
  391. package/lib/goog/debug/logbuffer.js +0 -148
  392. package/lib/goog/debug/logger.js +0 -873
  393. package/lib/goog/debug/logrecord.js +0 -242
  394. package/lib/goog/deps.js +0 -151
  395. package/lib/goog/disposable/disposable.js +0 -307
  396. package/lib/goog/disposable/idisposable.js +0 -45
  397. package/lib/goog/dom/browserfeature.js +0 -72
  398. package/lib/goog/dom/dom.js +0 -2991
  399. package/lib/goog/dom/nodetype.js +0 -48
  400. package/lib/goog/dom/safe.js +0 -347
  401. package/lib/goog/dom/tagname.js +0 -160
  402. package/lib/goog/dom/tags.js +0 -41
  403. package/lib/goog/dom/vendor.js +0 -96
  404. package/lib/goog/events/browserevent.js +0 -400
  405. package/lib/goog/events/browserfeature.js +0 -85
  406. package/lib/goog/events/event.js +0 -143
  407. package/lib/goog/events/eventid.js +0 -47
  408. package/lib/goog/events/events.js +0 -984
  409. package/lib/goog/events/eventtarget.js +0 -394
  410. package/lib/goog/events/eventtype.js +0 -237
  411. package/lib/goog/events/keycodes.js +0 -427
  412. package/lib/goog/events/listenable.js +0 -335
  413. package/lib/goog/events/listener.js +0 -131
  414. package/lib/goog/events/listenermap.js +0 -308
  415. package/lib/goog/fs/url.js +0 -109
  416. package/lib/goog/functions/functions.js +0 -442
  417. package/lib/goog/html/safehtml.js +0 -757
  418. package/lib/goog/html/safescript.js +0 -234
  419. package/lib/goog/html/safestyle.js +0 -442
  420. package/lib/goog/html/safestylesheet.js +0 -276
  421. package/lib/goog/html/safeurl.js +0 -398
  422. package/lib/goog/html/trustedresourceurl.js +0 -224
  423. package/lib/goog/html/uncheckedconversions.js +0 -232
  424. package/lib/goog/i18n/bidi.js +0 -908
  425. package/lib/goog/iter/iter.js +0 -1302
  426. package/lib/goog/json/json.js +0 -363
  427. package/lib/goog/labs/testing/assertthat.js +0 -58
  428. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  429. package/lib/goog/labs/testing/matcher.js +0 -80
  430. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  431. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  432. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  433. package/lib/goog/labs/useragent/browser.js +0 -341
  434. package/lib/goog/labs/useragent/engine.js +0 -160
  435. package/lib/goog/labs/useragent/platform.js +0 -160
  436. package/lib/goog/labs/useragent/util.js +0 -148
  437. package/lib/goog/log/log.js +0 -197
  438. package/lib/goog/math/box.js +0 -398
  439. package/lib/goog/math/coordinate.js +0 -268
  440. package/lib/goog/math/math.js +0 -451
  441. package/lib/goog/math/rect.js +0 -476
  442. package/lib/goog/math/size.js +0 -227
  443. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  444. package/lib/goog/net/xhrlike.js +0 -124
  445. package/lib/goog/net/xmlhttp.js +0 -246
  446. package/lib/goog/net/xmlhttpfactory.js +0 -67
  447. package/lib/goog/object/object.js +0 -686
  448. package/lib/goog/promise/promise.js +0 -1350
  449. package/lib/goog/promise/resolver.js +0 -48
  450. package/lib/goog/promise/thenable.js +0 -126
  451. package/lib/goog/reflect/reflect.js +0 -77
  452. package/lib/goog/string/const.js +0 -182
  453. package/lib/goog/string/string.js +0 -1599
  454. package/lib/goog/string/typedstring.js +0 -48
  455. package/lib/goog/structs/collection.js +0 -56
  456. package/lib/goog/structs/map.js +0 -457
  457. package/lib/goog/structs/set.js +0 -279
  458. package/lib/goog/structs/structs.js +0 -354
  459. package/lib/goog/style/style.js +0 -2037
  460. package/lib/goog/testing/asserts.js +0 -1278
  461. package/lib/goog/testing/events/events.js +0 -767
  462. package/lib/goog/testing/functionmock.js +0 -175
  463. package/lib/goog/testing/jsunit.js +0 -162
  464. package/lib/goog/testing/loosemock.js +0 -242
  465. package/lib/goog/testing/mock.js +0 -645
  466. package/lib/goog/testing/mockclock.js +0 -606
  467. package/lib/goog/testing/mockcontrol.js +0 -220
  468. package/lib/goog/testing/mockinterface.js +0 -45
  469. package/lib/goog/testing/mockmatchers.js +0 -400
  470. package/lib/goog/testing/objectpropertystring.js +0 -68
  471. package/lib/goog/testing/propertyreplacer.js +0 -262
  472. package/lib/goog/testing/recordfunction.js +0 -215
  473. package/lib/goog/testing/stacktrace.js +0 -594
  474. package/lib/goog/testing/strictmock.js +0 -130
  475. package/lib/goog/testing/testcase.js +0 -1629
  476. package/lib/goog/testing/testrunner.js +0 -440
  477. package/lib/goog/uri/uri.js +0 -1524
  478. package/lib/goog/uri/utils.js +0 -1064
  479. package/lib/goog/useragent/product.js +0 -183
  480. package/lib/goog/useragent/product_isversion.js +0 -144
  481. package/lib/goog/useragent/useragent.js +0 -572
  482. package/lib/webdriver/actionsequence.js +0 -356
  483. package/lib/webdriver/builder.js +0 -207
  484. package/lib/webdriver/capabilities.js +0 -412
  485. package/lib/webdriver/events.js +0 -179
  486. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  487. package/lib/webdriver/http/corsclient.js +0 -133
  488. package/lib/webdriver/http/http.js +0 -525
  489. package/lib/webdriver/http/xhrclient.js +0 -67
  490. package/lib/webdriver/locators.js +0 -257
  491. package/lib/webdriver/logging.js +0 -347
  492. package/lib/webdriver/session.js +0 -74
  493. package/lib/webdriver/stacktrace.js +0 -619
  494. package/lib/webdriver/test/builder_test.js +0 -53
  495. package/lib/webdriver/test/capabilities_test.js +0 -72
  496. package/lib/webdriver/test/events_test.js +0 -203
  497. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  498. package/lib/webdriver/test/http/http_test.js +0 -428
  499. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  500. package/lib/webdriver/test/locators_test.js +0 -59
  501. package/lib/webdriver/test/logging_test.js +0 -85
  502. package/lib/webdriver/test/promise_error_test.js +0 -892
  503. package/lib/webdriver/test/promise_flow_test.js +0 -2365
  504. package/lib/webdriver/test/promise_generator_test.js +0 -323
  505. package/lib/webdriver/test/promise_test.js +0 -2012
  506. package/lib/webdriver/test/stacktrace_test.js +0 -480
  507. package/lib/webdriver/test/test_bootstrap.js +0 -67
  508. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  509. package/lib/webdriver/test/testing/client_test.js +0 -88
  510. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  511. package/lib/webdriver/test/testutil.js +0 -209
  512. package/lib/webdriver/test/testutil_test.js +0 -104
  513. package/lib/webdriver/test/until_test.js +0 -411
  514. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  515. package/lib/webdriver/test/webdriver_test.js +0 -2369
  516. package/lib/webdriver/testing/asserts.js +0 -487
  517. package/lib/webdriver/testing/client.js +0 -179
  518. package/lib/webdriver/testing/jsunit.js +0 -363
  519. package/lib/webdriver/testing/testcase.js +0 -168
  520. package/lib/webdriver/testing/window.js +0 -244
  521. package/lib/webdriver/touchsequence.js +0 -248
  522. package/lib/webdriver/until.js +0 -412
  523. package/lib/webdriver/webdriver.js +0 -2511
  524. package/test/_base_test.js +0 -129
@@ -15,15 +15,284 @@
15
15
  // specific language governing permissions and limitations
16
16
  // under the License.
17
17
 
18
+ 'use strict';
19
+
18
20
  var assert = require('assert');
19
21
  var http = require('http');
22
+ var sinon = require('sinon');
20
23
  var url = require('url');
21
24
 
25
+ var error = require('../../error');
26
+ var Executor = require('../../http').Executor;
22
27
  var HttpClient = require('../../http').HttpClient;
23
- var HttpRequest = require('../../_base').require('webdriver.http.Request');
28
+ var HttpRequest = require('../../http').Request;
29
+ var HttpResponse = require('../../http').Response;
30
+ var buildPath = require('../../http').buildPath;
31
+ var Command = require('../../lib/command').Command;
32
+ var CommandName = require('../../lib/command').Name;
24
33
  var Server = require('../../lib/test/httpserver').Server;
25
34
  var promise = require('../..').promise;
26
- var test = require('../../lib/test');
35
+
36
+ describe('buildPath', function() {
37
+ it('properly replaces path segments with command parameters', function() {
38
+ var parameters = {'sessionId':'foo', 'url':'http://www.google.com'};
39
+ var finalPath = buildPath('/session/:sessionId/url', parameters);
40
+ assert.equal(finalPath, '/session/foo/url');
41
+ assert.deepEqual(parameters, {'url':'http://www.google.com'});
42
+ });
43
+
44
+ it('handles web element references', function() {
45
+ var parameters = {'sessionId':'foo', 'id': {}};
46
+ parameters['id']['ELEMENT'] = 'bar';
47
+
48
+ var finalPath = buildPath(
49
+ '/session/:sessionId/element/:id/click', parameters);
50
+ assert.equal(finalPath, '/session/foo/element/bar/click');
51
+ assert.deepEqual(parameters, {});
52
+ });
53
+
54
+ it('throws if missing a parameter', function() {
55
+ assert.throws(
56
+ () => buildPath('/session/:sessionId', {}),
57
+ function(err) {
58
+ return err instanceof error.InvalidArgumentError
59
+ && 'Missing required parameter: sessionId' === err.message;
60
+ });
61
+
62
+ assert.throws(
63
+ () => buildPath('/session/:sessionId/element/:id', {'sessionId': 'foo'}),
64
+ function(err) {
65
+ return err instanceof error.InvalidArgumentError
66
+ && 'Missing required parameter: id' === err.message;
67
+ });
68
+ });
69
+
70
+ it('does not match on segments that do not start with a colon', function() {
71
+ assert.equal(buildPath('/session/foo:bar/baz', {}), '/session/foo:bar/baz');
72
+ });
73
+ });
74
+
75
+ describe('Executor', function() {
76
+ let executor;
77
+ let send;
78
+
79
+ beforeEach(function setUp() {
80
+ let client = new HttpClient('http://www.example.com');
81
+ send = sinon.stub(client, 'send');
82
+ executor = new Executor(client);
83
+ });
84
+
85
+ it('rejects unrecognized commands', function() {
86
+ assert.throws(
87
+ () => executor.execute(new Command('fake-name')),
88
+ function (err) {
89
+ return err instanceof error.UnknownCommandError
90
+ && 'Unrecognized command: fake-name' === err.message;
91
+ });
92
+ });
93
+
94
+ it('rejects promise if client fails to send request', function() {
95
+ let error = new Error('boom');
96
+ send.returns(Promise.reject(error));
97
+ return assertFailsToSend(new Command(CommandName.NEW_SESSION))
98
+ .then(function(e) {
99
+ assert.strictEqual(error, e);
100
+ assertSent(
101
+ 'POST', '/session', {},
102
+ [['Accept', 'application/json; charset=utf-8']]);
103
+ });
104
+ });
105
+
106
+ it('can execute commands with no URL parameters', function() {
107
+ send.returns(Promise.resolve(new HttpResponse(200, {}, '')));
108
+
109
+ let command = new Command(CommandName.NEW_SESSION);
110
+ return assertSendsSuccessfully(command).then(function(response) {
111
+ assertSent(
112
+ 'POST', '/session', {},
113
+ [['Accept', 'application/json; charset=utf-8']]);
114
+ });
115
+ });
116
+
117
+ it('rejects commands missing URL parameters', function() {
118
+ let command =
119
+ new Command(CommandName.FIND_CHILD_ELEMENT).
120
+ setParameter('sessionId', 's123').
121
+ // Let this be missing: setParameter('id', {'ELEMENT': 'e456'}).
122
+ setParameter('using', 'id').
123
+ setParameter('value', 'foo');
124
+
125
+ assert.throws(
126
+ () => executor.execute(command),
127
+ function(err) {
128
+ return err instanceof error.InvalidArgumentError
129
+ && 'Missing required parameter: id' === err.message;
130
+ });
131
+ assert.ok(!send.called);
132
+ });
133
+
134
+ it('replaces URL parameters with command parameters', function() {
135
+ var command = new Command(CommandName.GET).
136
+ setParameter('sessionId', 's123').
137
+ setParameter('url', 'http://www.google.com');
138
+
139
+ send.returns(Promise.resolve(new HttpResponse(200, {}, '')));
140
+
141
+ return assertSendsSuccessfully(command).then(function(response) {
142
+ assertSent(
143
+ 'POST', '/session/s123/url', {'url': 'http://www.google.com'},
144
+ [['Accept', 'application/json; charset=utf-8']]);
145
+ });
146
+ });
147
+
148
+ it('returns parsed JSON response', function() {
149
+ var responseObj = {
150
+ 'status': error.ErrorCode.SUCCESS,
151
+ 'value': 'http://www.google.com'
152
+ };
153
+
154
+ var command = new Command(CommandName.GET_CURRENT_URL).
155
+ setParameter('sessionId', 's123');
156
+
157
+
158
+ send.returns(Promise.resolve(
159
+ new HttpResponse(200, {}, JSON.stringify(responseObj))));
160
+
161
+ return assertSendsSuccessfully(command).then(function(response) {
162
+ assertSent('GET', '/session/s123/url', {},
163
+ [['Accept', 'application/json; charset=utf-8']]);
164
+ assert.deepEqual(response, responseObj);
165
+ });
166
+ });
167
+
168
+ it('returns success for 2xx with body as value when not json', function() {
169
+ var command = new Command(CommandName.GET_CURRENT_URL).
170
+ setParameter('sessionId', 's123');
171
+
172
+ send.returns(Promise.resolve(
173
+ new HttpResponse(200, {}, 'hello, world\r\ngoodbye, world!')));
174
+
175
+ return assertSendsSuccessfully(command).then(function(response) {
176
+ assertSent('GET', '/session/s123/url', {},
177
+ [['Accept', 'application/json; charset=utf-8']]);
178
+ assert.deepEqual(response, {
179
+ 'status': error.ErrorCode.SUCCESS,
180
+ 'value': 'hello, world\ngoodbye, world!'
181
+ });
182
+ });
183
+ });
184
+
185
+ it('returns success for 2xx with invalid JSON body', function() {
186
+ var command = new Command(CommandName.GET_CURRENT_URL).
187
+ setParameter('sessionId', 's123');
188
+
189
+ send.returns(Promise.resolve(
190
+ new HttpResponse(200, {}, '[')));
191
+
192
+ return assertSendsSuccessfully(command).then(function(response) {
193
+ assertSent('GET', '/session/s123/url', {},
194
+ [['Accept', 'application/json; charset=utf-8']]);
195
+ assert.deepEqual(response, {
196
+ 'status': error.ErrorCode.SUCCESS,
197
+ 'value': '['
198
+ });
199
+ });
200
+ });
201
+
202
+ it('returns unknown command for 404 with body as value when not json',
203
+ function() {
204
+ var command = new Command(CommandName.GET_CURRENT_URL).
205
+ setParameter('sessionId', 's123');
206
+
207
+ send.returns(Promise.resolve(
208
+ new HttpResponse(404, {}, 'hello, world\r\ngoodbye, world!')));
209
+
210
+ return assertSendsSuccessfully(command, function(response) {
211
+ assertSent('GET', '/session/s123/url', {},
212
+ [['Accept', 'application/json; charset=utf-8']]);
213
+ assert.deepEqual(response, {
214
+ 'status': error.ErrorCode.UNKNOWN_COMMAND,
215
+ 'value': 'hello, world\ngoodbye, world!'
216
+ });
217
+ });
218
+ });
219
+
220
+ it('returnsUnknownErrorForGenericErrorCodeWithBodyAsValueWhenNotJSON',
221
+ function() {
222
+ var command = new Command(CommandName.GET_CURRENT_URL).
223
+ setParameter('sessionId', 's123');
224
+
225
+ send.returns(Promise.resolve(
226
+ new HttpResponse(500, {}, 'hello, world\r\ngoodbye, world!')));
227
+
228
+ return assertSendsSuccessfully(command).then(function(response) {
229
+ assertSent('GET', '/session/s123/url', {},
230
+ [['Accept', 'application/json; charset=utf-8']]);
231
+ assert.deepEqual(response, {
232
+ 'status': error.ErrorCode.UNKNOWN_ERROR,
233
+ 'value': 'hello, world\ngoodbye, world!'
234
+ });
235
+ });
236
+ });
237
+
238
+ it('canDefineNewCommands', function() {
239
+ executor.defineCommand('greet', 'GET', '/person/:name');
240
+
241
+ var command = new Command('greet').
242
+ setParameter('name', 'Bob');
243
+
244
+ send.returns(Promise.resolve(new HttpResponse(200, {}, '')));
245
+
246
+ return assertSendsSuccessfully(command).then(function(response) {
247
+ assertSent('GET', '/person/Bob', {},
248
+ [['Accept', 'application/json; charset=utf-8']]);
249
+ });
250
+ });
251
+
252
+ it('canRedefineStandardCommands', function() {
253
+ executor.defineCommand(CommandName.GO_BACK, 'POST', '/custom/back');
254
+
255
+ var command = new Command(CommandName.GO_BACK).
256
+ setParameter('times', 3);
257
+
258
+ send.returns(Promise.resolve(new HttpResponse(200, {}, '')));
259
+
260
+ return assertSendsSuccessfully(command).then(function(response) {
261
+ assertSent('POST', '/custom/back', {'times': 3},
262
+ [['Accept', 'application/json; charset=utf-8']]);
263
+ });
264
+ });
265
+
266
+ function entries(map) {
267
+ let entries = [];
268
+ for (let e of map.entries()) {
269
+ entries.push(e);
270
+ }
271
+ return entries;
272
+ }
273
+
274
+ function assertSent(method, path, data, headers) {
275
+ assert.ok(send.calledWith(sinon.match(function(value) {
276
+ assert.equal(value.method, method);
277
+ assert.equal(value.path, path);
278
+ assert.deepEqual(value.data, data);
279
+ assert.deepEqual(entries(value.headers), headers);
280
+ return true;
281
+ })));
282
+ }
283
+
284
+ function assertSendsSuccessfully(command) {
285
+ return executor.execute(command).then(function(response) {
286
+ return response;
287
+ });
288
+ }
289
+
290
+ function assertFailsToSend(command, opt_onError) {
291
+ return executor.execute(command).then(
292
+ () => {throw Error('should have failed')},
293
+ (e) => {return e});
294
+ }
295
+ });
27
296
 
28
297
  describe('HttpClient', function() {
29
298
  this.timeout(4 * 1000);
@@ -83,99 +352,92 @@ describe('HttpClient', function() {
83
352
  }
84
353
  });
85
354
 
86
- test.before(function() {
355
+ before(function() {
87
356
  return server.start();
88
357
  });
89
358
 
90
- test.after(function() {
359
+ after(function() {
91
360
  return server.stop();
92
361
  });
93
362
 
94
- test.it('can send a basic HTTP request', function() {
363
+ it('can send a basic HTTP request', function() {
95
364
  var request = new HttpRequest('GET', '/echo');
96
- request.headers['Foo'] = 'Bar';
365
+ request.headers.set('Foo', 'Bar');
97
366
 
98
367
  var agent = new http.Agent();
99
368
  agent.maxSockets = 1; // Only making 1 request.
100
369
 
101
370
  var client = new HttpClient(server.url(), agent);
102
- return promise.checkedNodeCall(client.send.bind(client, request))
103
- .then(function(response) {
104
- assert.equal(200, response.status);
105
- assert.equal(
106
- 'application/json; charset=utf-8', response.headers['accept']);
107
- assert.equal('Bar', response.headers['foo']);
108
- assert.equal('0', response.headers['content-length']);
109
- assert.equal('keep-alive', response.headers['connection']);
110
- assert.equal(server.host(), response.headers['host']);
111
- });
371
+ return client.send(request).then(function(response) {
372
+ assert.equal(200, response.status);
373
+ assert.equal(response.headers.get('content-length'), '0');
374
+ assert.equal(response.headers.get('connection'), 'keep-alive');
375
+ assert.equal(response.headers.get('host'), server.host());
376
+
377
+ assert.equal(request.headers.get('Foo'), 'Bar');
378
+ assert.equal(
379
+ request.headers.get('Accept'), 'application/json; charset=utf-8');
380
+ });
112
381
  });
113
382
 
114
- test.it('can use basic auth', function() {
383
+ it('can use basic auth', function() {
115
384
  var parsed = url.parse(server.url());
116
385
  parsed.auth = 'genie:bottle';
117
386
 
118
387
  var client = new HttpClient(url.format(parsed));
119
388
  var request = new HttpRequest('GET', '/protected');
120
- return promise.checkedNodeCall(client.send.bind(client, request))
121
- .then(function(response) {
122
- assert.equal(200, response.status);
123
- assert.equal('text/plain', response.headers['content-type']);
124
- assert.equal('Access granted!', response.body);
125
- });
389
+ return client.send(request).then(function(response) {
390
+ assert.equal(200, response.status);
391
+ assert.equal(response.headers.get('content-type'), 'text/plain');
392
+ assert.equal(response.body, 'Access granted!');
393
+ });
126
394
  });
127
395
 
128
- test.it('fails requests missing required basic auth', function() {
396
+ it('fails requests missing required basic auth', function() {
129
397
  var client = new HttpClient(server.url());
130
398
  var request = new HttpRequest('GET', '/protected');
131
- return promise.checkedNodeCall(client.send.bind(client, request))
132
- .then(function(response) {
133
- assert.equal(401, response.status);
134
- assert.equal('Access denied', response.body);
135
- });
399
+ return client.send(request).then(function(response) {
400
+ assert.equal(401, response.status);
401
+ assert.equal(response.body, 'Access denied');
402
+ });
136
403
  });
137
404
 
138
- test.it('automatically follows redirects', function() {
405
+ it('automatically follows redirects', function() {
139
406
  var request = new HttpRequest('GET', '/redirect');
140
407
  var client = new HttpClient(server.url());
141
- return promise.checkedNodeCall(client.send.bind(client, request))
142
- .then(function(response) {
143
- assert.equal(200, response.status);
144
- assert.equal('text/plain', response.headers['content-type']);
145
- assert.equal('hello, world!', response.body);
146
- });
408
+ return client.send(request).then(function(response) {
409
+ assert.equal(200, response.status);
410
+ assert.equal(response.headers.get('content-type'), 'text/plain');
411
+ assert.equal(response.body, 'hello, world!');
412
+ });
147
413
  });
148
414
 
149
- test.it('handles malformed redirect responses', function() {
415
+ it('handles malformed redirect responses', function() {
150
416
  var request = new HttpRequest('GET', '/badredirect');
151
417
  var client = new HttpClient(server.url());
152
- return promise.checkedNodeCall(client.send.bind(client, request))
153
- .thenCatch(function(err) {
154
- assert.ok(/Failed to parse "Location"/.test(err.message),
155
- 'Not the expected error: ' + err.message);
156
- });
418
+ return client.send(request).then(assert.fail, function(err) {
419
+ assert.ok(/Failed to parse "Location"/.test(err.message),
420
+ 'Not the expected error: ' + err.message);
421
+ });
157
422
  });
158
423
 
159
- test.it('proxies requests through the webdriver proxy', function() {
424
+ it('proxies requests through the webdriver proxy', function() {
160
425
  var request = new HttpRequest('GET', '/proxy');
161
426
  var client = new HttpClient(
162
427
  'http://another.server.com', undefined, server.url());
163
- return promise.checkedNodeCall(client.send.bind(client, request))
164
- .then(function(response) {
165
- assert.equal(200, response.status);
166
- assert.equal('another.server.com', response.headers['host']);
167
- });
428
+ return client.send(request).then(function(response) {
429
+ assert.equal(200, response.status);
430
+ assert.equal(response.headers.get('host'), 'another.server.com');
431
+ });
168
432
  });
169
433
 
170
- test.it(
171
- 'proxies requests through the webdriver proxy on redirect', function() {
434
+ it('proxies requests through the webdriver proxy on redirect', function() {
172
435
  var request = new HttpRequest('GET', '/proxy/redirect');
173
436
  var client = new HttpClient(
174
437
  'http://another.server.com', undefined, server.url());
175
- return promise.checkedNodeCall(client.send.bind(client, request))
176
- .then(function(response) {
177
- assert.equal(200, response.status);
178
- assert.equal('another.server.com', response.headers['host']);
179
- });
438
+ return client.send(request).then(function(response) {
439
+ assert.equal(200, response.status);
440
+ assert.equal(response.headers.get('host'), 'another.server.com');
441
+ });
180
442
  });
181
443
  });
@@ -20,6 +20,7 @@
20
20
  var assert = require('assert'),
21
21
  http = require('http');
22
22
 
23
+ var error = require('../../error');
23
24
  var util = require('../../http/util');
24
25
 
25
26
  describe('selenium-webdriver/http/util', function() {
@@ -65,20 +66,21 @@ describe('selenium-webdriver/http/util', function() {
65
66
  });
66
67
 
67
68
  describe('#getStatus', function() {
68
- it('should return value field on success', function(done) {
69
- util.getStatus(baseUrl).then(function(response) {
69
+ it('should return value field on success', function() {
70
+ return util.getStatus(baseUrl).then(function(response) {
70
71
  assert.equal('abc123', response);
71
- }).thenFinally(done);
72
+ });
72
73
  });
73
74
 
74
- it('should fail if response object is not success', function(done) {
75
+ it('should fail if response object is not success', function() {
75
76
  status = 1;
76
- util.getStatus(baseUrl).then(function() {
77
+ return util.getStatus(baseUrl).then(function() {
77
78
  throw Error('expected a failure');
78
79
  }, function(err) {
79
- assert.equal(status, err.code);
80
- assert.equal(value, err.message);
81
- }).thenFinally(done);
80
+ assert.ok(err instanceof error.WebDriverError);
81
+ assert.equal(err.code, error.WebDriverError.code);
82
+ assert.equal(err.message, value);
83
+ });
82
84
  });
83
85
 
84
86
  it('should fail if the server is not listening', function(done) {
@@ -86,39 +88,39 @@ describe('selenium-webdriver/http/util', function() {
86
88
  if(e) return done(e);
87
89
 
88
90
  util.getStatus(baseUrl).then(function() {
89
- throw Error('expected a failure');
91
+ done(Error('expected a failure'));
90
92
  }, function() {
91
93
  // Expected.
92
- }).thenFinally(done);
94
+ done();
95
+ });
93
96
  });
94
97
  });
95
98
 
96
- it('should fail if HTTP status is not 200', function(done) {
99
+ it('should fail if HTTP status is not 200', function() {
97
100
  status = 1;
98
101
  responseCode = 404;
99
- util.getStatus(baseUrl).then(function() {
102
+ return util.getStatus(baseUrl).then(function() {
100
103
  throw Error('expected a failure');
101
104
  }, function(err) {
102
- assert.equal(status, err.code);
103
- assert.equal(value, err.message);
104
- }).thenFinally(done);
105
+ assert.ok(err instanceof error.WebDriverError);
106
+ assert.equal(err.code, error.WebDriverError.code);
107
+ assert.equal(err.message, value);
108
+ });
105
109
  });
106
110
  });
107
111
 
108
112
  describe('#waitForServer', function() {
109
- it('resolves when server is ready', function(done) {
113
+ it('resolves when server is ready', function() {
110
114
  status = 1;
111
115
  setTimeout(function() { status = 0; }, 50);
112
- util.waitForServer(baseUrl, 100).
113
- then(function() {}). // done needs no argument to pass.
114
- thenFinally(done);
116
+ return util.waitForServer(baseUrl, 100);
115
117
  });
116
118
 
117
- it('should fail if server does not become ready', function(done) {
119
+ it('should fail if server does not become ready', function() {
118
120
  status = 1;
119
- util.waitForServer(baseUrl, 50).
120
- then(function() { done('Expected to time out'); },
121
- function() { done(); });
121
+ return util.waitForServer(baseUrl, 50).
122
+ then(function() {throw Error('Expected to time out')},
123
+ function() {});
122
124
  });
123
125
 
124
126
  it('can cancel wait', function(done) {
package/test/io_test.js CHANGED
@@ -37,7 +37,6 @@ describe('io', function() {
37
37
  tmpDir = d;
38
38
 
39
39
  fs.writeFileSync(path.join(d, 'foo'), 'Hello, world');
40
- fs.symlinkSync(path.join(d, 'foo'), path.join(d, 'symlinked-foo'));
41
40
  });
42
41
  });
43
42
 
@@ -51,6 +50,12 @@ describe('io', function() {
51
50
  });
52
51
 
53
52
  it('can copy symlink to destination', function() {
53
+ if (process.platform === 'win32') {
54
+ return; // No symlinks on windows.
55
+ }
56
+ fs.symlinkSync(
57
+ path.join(tmpDir, 'foo'),
58
+ path.join(tmpDir, 'symlinked-foo'));
54
59
  return io.tmpFile().then(function(f) {
55
60
  return io.copy(path.join(tmpDir, 'symlinked-foo'), f).then(function(p) {
56
61
  assert.equal(p, f);
@@ -0,0 +1,127 @@
1
+ // Licensed to the Software Freedom Conservancy (SFC) under one
2
+ // or more contributor license agreements. See the NOTICE file
3
+ // distributed with this work for additional information
4
+ // regarding copyright ownership. The SFC licenses this file
5
+ // to you under the Apache License, Version 2.0 (the
6
+ // "License"); you may not use this file except in compliance
7
+ // with the License. You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing,
12
+ // software distributed under the License is distributed on an
13
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ // KIND, either express or implied. See the License for the
15
+ // specific language governing permissions and limitations
16
+ // under the License.
17
+
18
+ 'use strict';
19
+
20
+ var assert = require('assert');
21
+ var by = require('../../lib/by');
22
+
23
+ describe('by', function() {
24
+ describe('By', function() {
25
+ describe('className', function() {
26
+ it('delegates to By.css', function() {
27
+ let locator = by.By.className('foo');
28
+ assert.equal('css selector', locator.using);
29
+ assert.equal('.foo', locator.value);
30
+ });
31
+
32
+ it('escapes class name', function() {
33
+ let locator = by.By.className('foo#bar');
34
+ assert.equal('css selector', locator.using);
35
+ assert.equal('.foo\\#bar', locator.value);
36
+ });
37
+
38
+ it('translates compound class names', function() {
39
+ let locator = by.By.className('a b');
40
+ assert.equal('css selector', locator.using);
41
+ assert.equal('.a.b', locator.value);
42
+
43
+ locator = by.By.className(' x y z-1 "g" ');
44
+ assert.equal('css selector', locator.using);
45
+ assert.equal('.x.y.z-1.\\"g\\"', locator.value);
46
+ });
47
+ });
48
+
49
+ describe('id', function() {
50
+ it('delegates to By.css', function() {
51
+ let locator = by.By.id('foo');
52
+ assert.equal('css selector', locator.using);
53
+ assert.equal('*[id="foo"]', locator.value);
54
+ });
55
+
56
+ it('escapes the ID', function() {
57
+ let locator = by.By.id('foo#bar');
58
+ assert.equal('css selector', locator.using);
59
+ assert.equal('*[id="foo\\#bar"]', locator.value);
60
+ });
61
+ });
62
+
63
+ describe('name', function() {
64
+ it('delegates to By.css', function() {
65
+ let locator = by.By.name('foo')
66
+ assert.equal('css selector', locator.using);
67
+ assert.equal('*[name="foo"]', locator.value);
68
+ });
69
+
70
+ it('escapes the name', function() {
71
+ let locator = by.By.name('foo"bar"')
72
+ assert.equal('css selector', locator.using);
73
+ assert.equal('*[name="foo\\"bar\\""]', locator.value);
74
+ });
75
+ });
76
+ });
77
+
78
+ describe('checkedLocator', function() {
79
+ it('accepts class name', function() {
80
+ let locator = by.checkedLocator({className: 'foo'});
81
+ assert.equal('css selector', locator.using);
82
+ assert.equal('.foo', locator.value);
83
+ });
84
+
85
+ it('accepts css', function() {
86
+ let locator = by.checkedLocator({css: 'a > b'});
87
+ assert.equal('css selector', locator.using);
88
+ assert.equal('a > b', locator.value);
89
+ });
90
+
91
+ it('accepts id', function() {
92
+ let locator = by.checkedLocator({id: 'foobar'});
93
+ assert.equal('css selector', locator.using);
94
+ assert.equal('*[id="foobar"]', locator.value);
95
+ });
96
+
97
+ it('accepts linkText', function() {
98
+ let locator = by.checkedLocator({linkText: 'hello'});
99
+ assert.equal('link text', locator.using);
100
+ assert.equal('hello', locator.value);
101
+ });
102
+
103
+ it('accepts name', function() {
104
+ let locator = by.checkedLocator({name: 'foobar'});
105
+ assert.equal('css selector', locator.using);
106
+ assert.equal('*[name="foobar"]', locator.value);
107
+ });
108
+
109
+ it('accepts partialLinkText', function() {
110
+ let locator = by.checkedLocator({partialLinkText: 'hello'});
111
+ assert.equal('partial link text', locator.using);
112
+ assert.equal('hello', locator.value);
113
+ });
114
+
115
+ it('accepts tagName', function() {
116
+ let locator = by.checkedLocator({tagName: 'div'});
117
+ assert.equal('css selector', locator.using);
118
+ assert.equal('div', locator.value);
119
+ });
120
+
121
+ it('accepts xpath', function() {
122
+ let locator = by.checkedLocator({xpath: '//div[1]'});
123
+ assert.equal('xpath', locator.using);
124
+ assert.equal('//div[1]', locator.value);
125
+ });
126
+ });
127
+ });