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
package/chrome.js CHANGED
@@ -49,17 +49,17 @@
49
49
  * You may also create a {@link Driver} with its own driver service. This is
50
50
  * useful if you need to capture the server's log output for a specific session:
51
51
  *
52
- * var chrome = require('selenium-webdriver/chrome');
52
+ * let chrome = require('selenium-webdriver/chrome');
53
53
  *
54
- * var service = new chrome.ServiceBuilder()
54
+ * let service = new chrome.ServiceBuilder()
55
55
  * .loggingTo('/my/log/file.txt')
56
56
  * .enableVerboseLogging()
57
57
  * .build();
58
58
  *
59
- * var options = new chrome.Options();
59
+ * let options = new chrome.Options();
60
60
  * // configure browser options ...
61
61
  *
62
- * var driver = new chrome.Driver(options, service);
62
+ * let driver = new chrome.Driver(options, service);
63
63
  *
64
64
  * Users should only instantiate the {@link Driver} class directly when they
65
65
  * need a custom driver service configuration (as shown above). For normal
@@ -78,7 +78,7 @@
78
78
  * will require configuring a [custom server](#custom-server) that will connect
79
79
  * to adb on the {@linkplain ServiceBuilder#setAdbPort correct port}:
80
80
  *
81
- * var service = new chrome.ServiceBuilder()
81
+ * let service = new chrome.ServiceBuilder()
82
82
  * .setAdbPort(1234)
83
83
  * build();
84
84
  * // etc.
@@ -86,7 +86,7 @@
86
86
  * The ChromeDriver may be configured to launch Chrome on Android using
87
87
  * {@link Options#androidChrome()}:
88
88
  *
89
- * var driver = new Builder()
89
+ * let driver = new Builder()
90
90
  * .forBrowser('chrome')
91
91
  * .setChromeOptions(new chrome.Options().androidChrome())
92
92
  * .build();
@@ -95,7 +95,7 @@
95
95
  * Chrome-WebView by setting the {@linkplain Options#androidActivity
96
96
  * androidActivity} option:
97
97
  *
98
- * var driver = new Builder()
98
+ * let driver = new Builder()
99
99
  * .forBrowser('chrome')
100
100
  * .setChromeOptions(new chrome.Options()
101
101
  * .androidPackage('com.example')
@@ -114,13 +114,19 @@
114
114
 
115
115
  'use strict';
116
116
 
117
- var fs = require('fs'),
117
+ const fs = require('fs'),
118
118
  util = require('util');
119
119
 
120
- var webdriver = require('./index'),
121
- executors = require('./executors'),
120
+ const executors = require('./executors'),
122
121
  http = require('./http'),
123
122
  io = require('./io'),
123
+ Capabilities = require('./lib/capabilities').Capabilities,
124
+ Capability = require('./lib/capabilities').Capability,
125
+ command = require('./lib/command'),
126
+ logging = require('./lib/logging'),
127
+ promise = require('./lib/promise'),
128
+ Symbols = require('./lib/symbols'),
129
+ webdriver = require('./lib/webdriver'),
124
130
  portprober = require('./net/portprober'),
125
131
  remote = require('./remote');
126
132
 
@@ -130,7 +136,7 @@ var webdriver = require('./index'),
130
136
  * @type {string}
131
137
  * @const
132
138
  */
133
- var CHROMEDRIVER_EXE =
139
+ const CHROMEDRIVER_EXE =
134
140
  process.platform === 'win32' ? 'chromedriver.exe' : 'chromedriver';
135
141
 
136
142
 
@@ -138,20 +144,20 @@ var CHROMEDRIVER_EXE =
138
144
  * Custom command names supported by ChromeDriver.
139
145
  * @enum {string}
140
146
  */
141
- var Command = {
147
+ const Command = {
142
148
  LAUNCH_APP: 'launchApp'
143
149
  };
144
150
 
145
151
 
146
152
  /**
147
153
  * Creates a command executor with support for ChromeDriver's custom commands.
148
- * @param {!webdriver.promise.Promise<string>} url The server's URL.
149
- * @return {!webdriver.CommandExecutor} The new command executor.
154
+ * @param {!promise.Promise<string>} url The server's URL.
155
+ * @return {!command.Executor} The new command executor.
150
156
  */
151
157
  function createExecutor(url) {
152
158
  return new executors.DeferredExecutor(url.then(function(url) {
153
- var client = new http.HttpClient(url);
154
- var executor = new http.Executor(client);
159
+ let client = new http.HttpClient(url);
160
+ let executor = new http.Executor(client);
155
161
  executor.defineCommand(
156
162
  Command.LAUNCH_APP,
157
163
  'POST', '/session/:sessionId/chromium/launch_app');
@@ -164,177 +170,170 @@ function createExecutor(url) {
164
170
  * Creates {@link selenium-webdriver/remote.DriverService} instances that manage
165
171
  * a [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/)
166
172
  * server in a child process.
167
- *
168
- * @param {string=} opt_exe Path to the server executable to use. If omitted,
169
- * the builder will attempt to locate the chromedriver on the current
170
- * PATH.
171
- * @throws {Error} If provided executable does not exist, or the chromedriver
172
- * cannot be found on the PATH.
173
- * @constructor
174
173
  */
175
- var ServiceBuilder = function(opt_exe) {
176
- /** @private {string} */
177
- this.exe_ = opt_exe || io.findInPath(CHROMEDRIVER_EXE, true);
178
- if (!this.exe_) {
179
- throw Error(
180
- 'The ChromeDriver could not be found on the current PATH. Please ' +
181
- 'download the latest version of the ChromeDriver from ' +
182
- 'http://chromedriver.storage.googleapis.com/index.html and ensure ' +
183
- 'it can be found on your PATH.');
184
- }
185
-
186
- if (!fs.existsSync(this.exe_)) {
187
- throw Error('File does not exist: ' + this.exe_);
188
- }
189
-
190
- /** @private {!Array.<string>} */
191
- this.args_ = [];
192
- this.stdio_ = 'ignore';
193
- };
194
-
195
-
196
- /** @private {string} */
197
- ServiceBuilder.prototype.path_ = null;
198
-
199
- /** @private {number} */
200
- ServiceBuilder.prototype.port_ = 0;
174
+ class ServiceBuilder {
175
+ /**
176
+ * @param {string=} opt_exe Path to the server executable to use. If omitted,
177
+ * the builder will attempt to locate the chromedriver on the current
178
+ * PATH.
179
+ * @throws {Error} If provided executable does not exist, or the chromedriver
180
+ * cannot be found on the PATH.
181
+ */
182
+ constructor(opt_exe) {
183
+ let exe = opt_exe || io.findInPath(CHROMEDRIVER_EXE, true);
184
+ if (!exe) {
185
+ throw Error(
186
+ 'The ChromeDriver could not be found on the current PATH. Please ' +
187
+ 'download the latest version of the ChromeDriver from ' +
188
+ 'http://chromedriver.storage.googleapis.com/index.html and ensure ' +
189
+ 'it can be found on your PATH.');
190
+ }
201
191
 
192
+ if (!fs.existsSync(exe)) {
193
+ throw Error('File does not exist: ' + exe);
194
+ }
195
+ /** @private {string} */
196
+ this.exe_ = exe;
202
197
 
203
- /** @private {(string|!Array.<string|number|!Stream|null|undefined>)} */
204
- ServiceBuilder.prototype.stdio_ = 'ignore';
198
+ /** @private {!Array<string>} */
199
+ this.args_ = [];
205
200
 
201
+ /**
202
+ * @private {(string|!Array<string|number|!stream.Stream|null|undefined>)}
203
+ */
204
+ this.stdio_ = 'ignore';
206
205
 
207
- /** @private {Object.<string, string>} */
208
- ServiceBuilder.prototype.env_ = null;
206
+ /** @private {?string} */
207
+ this.path_ = null;
209
208
 
209
+ /** @private {number} */
210
+ this.port_ = 0;
210
211
 
211
- /**
212
- * Sets the port to start the ChromeDriver on.
213
- * @param {number} port The port to use, or 0 for any free port.
214
- * @return {!ServiceBuilder} A self reference.
215
- * @throws {Error} If the port is invalid.
216
- */
217
- ServiceBuilder.prototype.usingPort = function(port) {
218
- if (port < 0) {
219
- throw Error('port must be >= 0: ' + port);
212
+ /** @private {Object<string, string>} */
213
+ this.env_ = null;
220
214
  }
221
- this.port_ = port;
222
- return this;
223
- };
224
-
225
-
226
- /**
227
- * Sets which port adb is listening to. _The ChromeDriver will connect to adb
228
- * if an {@linkplain Options#androidPackage Android session} is requested, but
229
- * adb **must** be started beforehand._
230
- *
231
- * @param {number} port Which port adb is running on.
232
- * @return {!ServiceBuilder} A self reference.
233
- */
234
- ServiceBuilder.prototype.setAdbPort = function(port) {
235
- this.args_.push('--adb-port=' + port);
236
- return this;
237
- };
238
-
239
-
240
- /**
241
- * Sets the path of the log file the driver should log to. If a log file is
242
- * not specified, the driver will log to stderr.
243
- * @param {string} path Path of the log file to use.
244
- * @return {!ServiceBuilder} A self reference.
245
- */
246
- ServiceBuilder.prototype.loggingTo = function(path) {
247
- this.args_.push('--log-path=' + path);
248
- return this;
249
- };
250
-
251
-
252
- /**
253
- * Enables verbose logging.
254
- * @return {!ServiceBuilder} A self reference.
255
- */
256
- ServiceBuilder.prototype.enableVerboseLogging = function() {
257
- this.args_.push('--verbose');
258
- return this;
259
- };
260
215
 
216
+ /**
217
+ * Sets the port to start the ChromeDriver on.
218
+ * @param {number} port The port to use, or 0 for any free port.
219
+ * @return {!ServiceBuilder} A self reference.
220
+ * @throws {Error} If the port is invalid.
221
+ */
222
+ usingPort(port) {
223
+ if (port < 0) {
224
+ throw Error('port must be >= 0: ' + port);
225
+ }
226
+ this.port_ = port;
227
+ return this;
228
+ }
261
229
 
262
- /**
263
- * Sets the number of threads the driver should use to manage HTTP requests.
264
- * By default, the driver will use 4 threads.
265
- * @param {number} n The number of threads to use.
266
- * @return {!ServiceBuilder} A self reference.
267
- */
268
- ServiceBuilder.prototype.setNumHttpThreads = function(n) {
269
- this.args_.push('--http-threads=' + n);
270
- return this;
271
- };
230
+ /**
231
+ * Sets which port adb is listening to. _The ChromeDriver will connect to adb
232
+ * if an {@linkplain Options#androidPackage Android session} is requested, but
233
+ * adb **must** be started beforehand._
234
+ *
235
+ * @param {number} port Which port adb is running on.
236
+ * @return {!ServiceBuilder} A self reference.
237
+ */
238
+ setAdbPort(port) {
239
+ this.args_.push('--adb-port=' + port);
240
+ return this;
241
+ }
272
242
 
243
+ /**
244
+ * Sets the path of the log file the driver should log to. If a log file is
245
+ * not specified, the driver will log to stderr.
246
+ * @param {string} path Path of the log file to use.
247
+ * @return {!ServiceBuilder} A self reference.
248
+ */
249
+ loggingTo(path) {
250
+ this.args_.push('--log-path=' + path);
251
+ return this;
252
+ }
273
253
 
274
- /**
275
- * Sets the base path for WebDriver REST commands (e.g. "/wd/hub").
276
- * By default, the driver will accept commands relative to "/".
277
- * @param {string} path The base path to use.
278
- * @return {!ServiceBuilder} A self reference.
279
- */
280
- ServiceBuilder.prototype.setUrlBasePath = function(path) {
281
- this.args_.push('--url-base=' + path);
282
- this.path_ = path;
283
- return this;
284
- };
254
+ /**
255
+ * Enables verbose logging.
256
+ * @return {!ServiceBuilder} A self reference.
257
+ */
258
+ enableVerboseLogging() {
259
+ this.args_.push('--verbose');
260
+ return this;
261
+ }
285
262
 
263
+ /**
264
+ * Sets the number of threads the driver should use to manage HTTP requests.
265
+ * By default, the driver will use 4 threads.
266
+ * @param {number} n The number of threads to use.
267
+ * @return {!ServiceBuilder} A self reference.
268
+ */
269
+ setNumHttpThreads(n) {
270
+ this.args_.push('--http-threads=' + n);
271
+ return this;
272
+ }
286
273
 
287
- /**
288
- * Defines the stdio configuration for the driver service. See
289
- * {@code child_process.spawn} for more information.
290
- * @param {(string|!Array.<string|number|!Stream|null|undefined>)} config The
291
- * configuration to use.
292
- * @return {!ServiceBuilder} A self reference.
293
- */
294
- ServiceBuilder.prototype.setStdio = function(config) {
295
- this.stdio_ = config;
296
- return this;
297
- };
274
+ /**
275
+ * Sets the base path for WebDriver REST commands (e.g. "/wd/hub").
276
+ * By default, the driver will accept commands relative to "/".
277
+ * @param {string} path The base path to use.
278
+ * @return {!ServiceBuilder} A self reference.
279
+ */
280
+ setUrlBasePath(path) {
281
+ this.args_.push('--url-base=' + path);
282
+ this.path_ = path;
283
+ return this;
284
+ }
298
285
 
286
+ /**
287
+ * Defines the stdio configuration for the driver service. See
288
+ * {@code child_process.spawn} for more information.
289
+ * @param {(string|!Array<string|number|!stream.Stream|null|undefined>)}
290
+ * config The configuration to use.
291
+ * @return {!ServiceBuilder} A self reference.
292
+ */
293
+ setStdio(config) {
294
+ this.stdio_ = config;
295
+ return this;
296
+ }
299
297
 
300
- /**
301
- * Defines the environment to start the server under. This settings will be
302
- * inherited by every browser session started by the server.
303
- * @param {!Object.<string, string>} env The environment to use.
304
- * @return {!ServiceBuilder} A self reference.
305
- */
306
- ServiceBuilder.prototype.withEnvironment = function(env) {
307
- this.env_ = env;
308
- return this;
309
- };
298
+ /**
299
+ * Defines the environment to start the server under. This settings will be
300
+ * inherited by every browser session started by the server.
301
+ * @param {!Object<string, string>} env The environment to use.
302
+ * @return {!ServiceBuilder} A self reference.
303
+ */
304
+ withEnvironment(env) {
305
+ this.env_ = env;
306
+ return this;
307
+ }
310
308
 
309
+ /**
310
+ * Creates a new DriverService using this instance's current configuration.
311
+ * @return {!remote.DriverService} A new driver service using this instance's
312
+ * current configuration.
313
+ * @throws {Error} If the driver exectuable was not specified and a default
314
+ * could not be found on the current PATH.
315
+ */
316
+ build() {
317
+ let port = this.port_ || portprober.findFreePort();
318
+ let args = this.args_.concat(); // Defensive copy.
319
+
320
+ return new remote.DriverService(this.exe_, {
321
+ loopback: true,
322
+ path: this.path_,
323
+ port: port,
324
+ args: promise.when(port, function(port) {
325
+ return args.concat('--port=' + port);
326
+ }),
327
+ env: this.env_,
328
+ stdio: this.stdio_
329
+ });
330
+ }
331
+ }
311
332
 
312
- /**
313
- * Creates a new DriverService using this instance's current configuration.
314
- * @return {remote.DriverService} A new driver service using this instance's
315
- * current configuration.
316
- * @throws {Error} If the driver exectuable was not specified and a default
317
- * could not be found on the current PATH.
318
- */
319
- ServiceBuilder.prototype.build = function() {
320
- var port = this.port_ || portprober.findFreePort();
321
- var args = this.args_.concat(); // Defensive copy.
322
-
323
- return new remote.DriverService(this.exe_, {
324
- loopback: true,
325
- path: this.path_,
326
- port: port,
327
- args: webdriver.promise.when(port, function(port) {
328
- return args.concat('--port=' + port);
329
- }),
330
- env: this.env_,
331
- stdio: this.stdio_
332
- });
333
- };
334
333
 
335
334
 
336
335
  /** @type {remote.DriverService} */
337
- var defaultService = null;
336
+ let defaultService = null;
338
337
 
339
338
 
340
339
  /**
@@ -370,472 +369,436 @@ function getDefaultService() {
370
369
  * @type {string}
371
370
  * @const
372
371
  */
373
- var OPTIONS_CAPABILITY_KEY = 'chromeOptions';
372
+ let OPTIONS_CAPABILITY_KEY = 'chromeOptions';
374
373
 
375
374
 
376
375
  /**
377
376
  * Class for managing ChromeDriver specific options.
378
- * @constructor
379
- * @extends {webdriver.Serializable}
380
377
  */
381
- var Options = function() {
382
- webdriver.Serializable.call(this);
378
+ class Options {
379
+ constructor() {
380
+ /** @private {!Object} */
381
+ this.options_ = {};
383
382
 
384
- /** @private {!Object} */
385
- this.options_ = {};
383
+ /** @private {!Array<(string|!Buffer)>} */
384
+ this.extensions_ = [];
386
385
 
387
- /** @private {!Array.<(string|!Buffer)>} */
388
- this.extensions_ = [];
386
+ /** @private {?logging.Preferences} */
387
+ this.logPrefs_ = null;
389
388
 
390
- /** @private {?webdriver.logging.Preferences} */
391
- this.logPrefs_ = null;
389
+ /** @private {?./lib/capabilities.ProxyConfig} */
390
+ this.proxy_ = null;
391
+ }
392
392
 
393
- /** @private {?webdriver.ProxyConfig} */
394
- this.proxy_ = null;
395
- };
396
- util.inherits(Options, webdriver.Serializable);
393
+ /**
394
+ * Extracts the ChromeDriver specific options from the given capabilities
395
+ * object.
396
+ * @param {!Capabilities} caps The capabilities object.
397
+ * @return {!Options} The ChromeDriver options.
398
+ */
399
+ static fromCapabilities(caps) {
400
+ let options = new Options();
401
+
402
+ let o = caps.get(OPTIONS_CAPABILITY_KEY);
403
+ if (o instanceof Options) {
404
+ options = o;
405
+ } else if (o) {
406
+ options.
407
+ addArguments(o.args || []).
408
+ addExtensions(o.extensions || []).
409
+ detachDriver(o.detach).
410
+ excludeSwitches(o.excludeSwitches || []).
411
+ setChromeBinaryPath(o.binary).
412
+ setChromeLogFile(o.logPath).
413
+ setChromeMinidumpPath(o.minidumpPath).
414
+ setLocalState(o.localState).
415
+ setMobileEmulation(o.mobileEmulation).
416
+ setUserPreferences(o.prefs).
417
+ setPerfLoggingPrefs(o.perfLoggingPrefs);
418
+ }
397
419
 
420
+ if (caps.has(Capability.PROXY)) {
421
+ options.setProxy(caps.get(Capability.PROXY));
422
+ }
398
423
 
399
- /**
400
- * Extracts the ChromeDriver specific options from the given capabilities
401
- * object.
402
- * @param {!webdriver.Capabilities} capabilities The capabilities object.
403
- * @return {!Options} The ChromeDriver options.
404
- */
405
- Options.fromCapabilities = function(capabilities) {
406
- var options = new Options();
424
+ if (caps.has(Capability.LOGGING_PREFS)) {
425
+ options.setLoggingPrefs(
426
+ caps.get(Capability.LOGGING_PREFS));
427
+ }
407
428
 
408
- var o = capabilities.get(OPTIONS_CAPABILITY_KEY);
409
- if (o instanceof Options) {
410
- options = o;
411
- } else if (o) {
412
- options.
413
- addArguments(o.args || []).
414
- addExtensions(o.extensions || []).
415
- detachDriver(o.detach).
416
- excludeSwitches(o.excludeSwitches || []).
417
- setChromeBinaryPath(o.binary).
418
- setChromeLogFile(o.logPath).
419
- setChromeMinidumpPath(o.minidumpPath).
420
- setLocalState(o.localState).
421
- setMobileEmulation(o.mobileEmulation).
422
- setUserPreferences(o.prefs).
423
- setPerfLoggingPrefs(o.perfLoggingPrefs);
429
+ return options;
424
430
  }
425
431
 
426
- if (capabilities.has(webdriver.Capability.PROXY)) {
427
- options.setProxy(capabilities.get(webdriver.Capability.PROXY));
432
+ /**
433
+ * Add additional command line arguments to use when launching the Chrome
434
+ * browser. Each argument may be specified with or without the "--" prefix
435
+ * (e.g. "--foo" and "foo"). Arguments with an associated value should be
436
+ * delimited by an "=": "foo=bar".
437
+ * @param {...(string|!Array<string>)} var_args The arguments to add.
438
+ * @return {!Options} A self reference.
439
+ */
440
+ addArguments(var_args) {
441
+ let args = this.options_.args || [];
442
+ args = args.concat.apply(args, arguments);
443
+ if (args.length) {
444
+ this.options_.args = args;
445
+ }
446
+ return this;
428
447
  }
429
448
 
430
- if (capabilities.has(webdriver.Capability.LOGGING_PREFS)) {
431
- options.setLoggingPrefs(
432
- capabilities.get(webdriver.Capability.LOGGING_PREFS));
449
+ /**
450
+ * List of Chrome command line switches to exclude that ChromeDriver by default
451
+ * passes when starting Chrome. Do not prefix switches with "--".
452
+ *
453
+ * @param {...(string|!Array<string>)} var_args The switches to exclude.
454
+ * @return {!Options} A self reference.
455
+ */
456
+ excludeSwitches(var_args) {
457
+ let switches = this.options_.excludeSwitches || [];
458
+ switches = switches.concat.apply(switches, arguments);
459
+ if (switches.length) {
460
+ this.options_.excludeSwitches = switches;
461
+ }
462
+ return this;
433
463
  }
434
464
 
435
- return options;
436
- };
437
-
438
-
439
- /**
440
- * Add additional command line arguments to use when launching the Chrome
441
- * browser. Each argument may be specified with or without the "--" prefix
442
- * (e.g. "--foo" and "foo"). Arguments with an associated value should be
443
- * delimited by an "=": "foo=bar".
444
- * @param {...(string|!Array.<string>)} var_args The arguments to add.
445
- * @return {!Options} A self reference.
446
- */
447
- Options.prototype.addArguments = function(var_args) {
448
- var args = this.options_.args || [];
449
- args = args.concat.apply(args, arguments);
450
- if (args.length) {
451
- this.options_.args = args;
465
+ /**
466
+ * Add additional extensions to install when launching Chrome. Each extension
467
+ * should be specified as the path to the packed CRX file, or a Buffer for an
468
+ * extension.
469
+ * @param {...(string|!Buffer|!Array<(string|!Buffer)>)} var_args The
470
+ * extensions to add.
471
+ * @return {!Options} A self reference.
472
+ */
473
+ addExtensions(var_args) {
474
+ this.extensions_ =
475
+ this.extensions_.concat.apply(this.extensions_, arguments);
476
+ return this;
452
477
  }
453
- return this;
454
- };
455
-
456
478
 
457
- /**
458
- * List of Chrome command line switches to exclude that ChromeDriver by default
459
- * passes when starting Chrome. Do not prefix switches with "--".
460
- *
461
- * @param {...(string|!Array<string>)} var_args The switches to exclude.
462
- * @return {!Options} A self reference.
463
- */
464
- Options.prototype.excludeSwitches = function(var_args) {
465
- var switches = this.options_.excludeSwitches || [];
466
- switches = switches.concat.apply(switches, arguments);
467
- if (switches.length) {
468
- this.options_.excludeSwitches = switches;
479
+ /**
480
+ * Sets the path to the Chrome binary to use. On Mac OS X, this path should
481
+ * reference the actual Chrome executable, not just the application binary
482
+ * (e.g. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome").
483
+ *
484
+ * The binary path be absolute or relative to the chromedriver server
485
+ * executable, but it must exist on the machine that will launch Chrome.
486
+ *
487
+ * @param {string} path The path to the Chrome binary to use.
488
+ * @return {!Options} A self reference.
489
+ */
490
+ setChromeBinaryPath(path) {
491
+ this.options_.binary = path;
492
+ return this;
469
493
  }
470
- return this;
471
- };
472
-
473
-
474
- /**
475
- * Add additional extensions to install when launching Chrome. Each extension
476
- * should be specified as the path to the packed CRX file, or a Buffer for an
477
- * extension.
478
- * @param {...(string|!Buffer|!Array.<(string|!Buffer)>)} var_args The
479
- * extensions to add.
480
- * @return {!Options} A self reference.
481
- */
482
- Options.prototype.addExtensions = function(var_args) {
483
- this.extensions_ = this.extensions_.concat.apply(this.extensions_, arguments);
484
- return this;
485
- };
486
-
487
-
488
- /**
489
- * Sets the path to the Chrome binary to use. On Mac OS X, this path should
490
- * reference the actual Chrome executable, not just the application binary
491
- * (e.g. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome").
492
- *
493
- * The binary path be absolute or relative to the chromedriver server
494
- * executable, but it must exist on the machine that will launch Chrome.
495
- *
496
- * @param {string} path The path to the Chrome binary to use.
497
- * @return {!Options} A self reference.
498
- */
499
- Options.prototype.setChromeBinaryPath = function(path) {
500
- this.options_.binary = path;
501
- return this;
502
- };
503
-
504
-
505
- /**
506
- * Sets whether to leave the started Chrome browser running if the controlling
507
- * ChromeDriver service is killed before {@link webdriver.WebDriver#quit()} is
508
- * called.
509
- * @param {boolean} detach Whether to leave the browser running if the
510
- * chromedriver service is killed before the session.
511
- * @return {!Options} A self reference.
512
- */
513
- Options.prototype.detachDriver = function(detach) {
514
- this.options_.detach = detach;
515
- return this;
516
- };
517
-
518
-
519
- /**
520
- * Sets the user preferences for Chrome's user profile. See the "Preferences"
521
- * file in Chrome's user data directory for examples.
522
- * @param {!Object} prefs Dictionary of user preferences to use.
523
- * @return {!Options} A self reference.
524
- */
525
- Options.prototype.setUserPreferences = function(prefs) {
526
- this.options_.prefs = prefs;
527
- return this;
528
- };
529
-
530
-
531
- /**
532
- * Sets the logging preferences for the new session.
533
- * @param {!webdriver.logging.Preferences} prefs The logging preferences.
534
- * @return {!Options} A self reference.
535
- */
536
- Options.prototype.setLoggingPrefs = function(prefs) {
537
- this.logPrefs_ = prefs;
538
- return this;
539
- };
540
-
541
-
542
- /**
543
- * Sets the performance logging preferences. Options include:
544
- *
545
- * - `enableNetwork`: Whether or not to collect events from Network domain.
546
- * - `enablePage`: Whether or not to collect events from Page domain.
547
- * - `enableTimeline`: Whether or not to collect events from Timeline domain.
548
- * Note: when tracing is enabled, Timeline domain is implicitly disabled,
549
- * unless `enableTimeline` is explicitly set to true.
550
- * - `tracingCategories`: A comma-separated string of Chrome tracing categories
551
- * for which trace events should be collected. An unspecified or empty
552
- * string disables tracing.
553
- * - `bufferUsageReportingInterval`: The requested number of milliseconds
554
- * between DevTools trace buffer usage events. For example, if 1000, then
555
- * once per second, DevTools will report how full the trace buffer is. If a
556
- * report indicates the buffer usage is 100%, a warning will be issued.
557
- *
558
- * @param {{enableNetwork: boolean,
559
- * enablePage: boolean,
560
- * enableTimeline: boolean,
561
- * tracingCategories: string,
562
- * bufferUsageReportingInterval: number}} prefs The performance
563
- * logging preferences.
564
- * @return {!Options} A self reference.
565
- */
566
- Options.prototype.setPerfLoggingPrefs = function(prefs) {
567
- this.options_.perfLoggingPrefs = prefs;
568
- return this;
569
- };
570
-
571
-
572
- /**
573
- * Sets preferences for the "Local State" file in Chrome's user data
574
- * directory.
575
- * @param {!Object} state Dictionary of local state preferences.
576
- * @return {!Options} A self reference.
577
- */
578
- Options.prototype.setLocalState = function(state) {
579
- this.options_.localState = state;
580
- return this;
581
- };
582
-
583
-
584
- /**
585
- * Sets the name of the activity hosting a Chrome-based Android WebView. This
586
- * option must be set to connect to an [Android WebView](
587
- * https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android)
588
- *
589
- * @param {string} name The activity name.
590
- * @return {!Options} A self reference.
591
- */
592
- Options.prototype.androidActivity = function(name) {
593
- this.options_.androidActivity = name;
594
- return this;
595
- };
596
-
597
-
598
- /**
599
- * Sets the device serial number to connect to via ADB. If not specified, the
600
- * ChromeDriver will select an unused device at random. An error will be
601
- * returned if all devices already have active sessions.
602
- *
603
- * @param {string} serial The device serial number to connect to.
604
- * @return {!Options} A self reference.
605
- */
606
- Options.prototype.androidDeviceSerial = function(serial) {
607
- this.options_.androidDeviceSerial = serial;
608
- return this;
609
- };
610
-
611
-
612
- /**
613
- * Configures the ChromeDriver to launch Chrome on Android via adb. This
614
- * function is shorthand for
615
- * {@link #androidPackage options.androidPackage('com.android.chrome')}.
616
- * @return {!Options} A self reference.
617
- */
618
- Options.prototype.androidChrome = function() {
619
- return this.androidPackage('com.android.chrome');
620
- };
621
-
622
-
623
- /**
624
- * Sets the package name of the Chrome or WebView app.
625
- *
626
- * @param {?string} pkg The package to connect to, or `null` to disable Android
627
- * and switch back to using desktop Chrome.
628
- * @return {!Options} A self reference.
629
- */
630
- Options.prototype.androidPackage = function(pkg) {
631
- this.options_.androidPackage = pkg;
632
- return this;
633
- };
634
494
 
495
+ /**
496
+ * Sets whether to leave the started Chrome browser running if the controlling
497
+ * ChromeDriver service is killed before {@link webdriver.WebDriver#quit()} is
498
+ * called.
499
+ * @param {boolean} detach Whether to leave the browser running if the
500
+ * chromedriver service is killed before the session.
501
+ * @return {!Options} A self reference.
502
+ */
503
+ detachDriver(detach) {
504
+ this.options_.detach = detach;
505
+ return this;
506
+ }
635
507
 
636
- /**
637
- * Sets the process name of the Activity hosting the WebView (as given by `ps`).
638
- * If not specified, the process name is assumed to be the same as
639
- * {@link #androidPackage}.
640
- *
641
- * @param {string} processName The main activity name.
642
- * @return {!Options} A self reference.
643
- */
644
- Options.prototype.androidProcess = function(processName) {
645
- this.options_.androidProcess = processName;
646
- return this;
647
- };
508
+ /**
509
+ * Sets the user preferences for Chrome's user profile. See the "Preferences"
510
+ * file in Chrome's user data directory for examples.
511
+ * @param {!Object} prefs Dictionary of user preferences to use.
512
+ * @return {!Options} A self reference.
513
+ */
514
+ setUserPreferences(prefs) {
515
+ this.options_.prefs = prefs;
516
+ return this;
517
+ }
648
518
 
519
+ /**
520
+ * Sets the logging preferences for the new session.
521
+ * @param {!logging.Preferences} prefs The logging preferences.
522
+ * @return {!Options} A self reference.
523
+ */
524
+ setLoggingPrefs(prefs) {
525
+ this.logPrefs_ = prefs;
526
+ return this;
527
+ }
649
528
 
650
- /**
651
- * Sets whether to connect to an already-running instead of the specified
652
- * {@linkplain #androidProcess app} instead of launching the app with a clean
653
- * data directory.
654
- *
655
- * @param {boolean} useRunning Whether to connect to a running instance.
656
- * @return {!Options} A self reference.
657
- */
658
- Options.prototype.androidUseRunningApp = function(useRunning) {
659
- this.options_.androidUseRunningApp = useRunning;
660
- return this;
661
- };
529
+ /**
530
+ * Sets the performance logging preferences. Options include:
531
+ *
532
+ * - `enableNetwork`: Whether or not to collect events from Network domain.
533
+ * - `enablePage`: Whether or not to collect events from Page domain.
534
+ * - `enableTimeline`: Whether or not to collect events from Timeline domain.
535
+ * Note: when tracing is enabled, Timeline domain is implicitly disabled,
536
+ * unless `enableTimeline` is explicitly set to true.
537
+ * - `tracingCategories`: A comma-separated string of Chrome tracing
538
+ * categories for which trace events should be collected. An unspecified
539
+ * or empty string disables tracing.
540
+ * - `bufferUsageReportingInterval`: The requested number of milliseconds
541
+ * between DevTools trace buffer usage events. For example, if 1000, then
542
+ * once per second, DevTools will report how full the trace buffer is. If
543
+ * a report indicates the buffer usage is 100%, a warning will be issued.
544
+ *
545
+ * @param {{enableNetwork: boolean,
546
+ * enablePage: boolean,
547
+ * enableTimeline: boolean,
548
+ * tracingCategories: string,
549
+ * bufferUsageReportingInterval: number}} prefs The performance
550
+ * logging preferences.
551
+ * @return {!Options} A self reference.
552
+ */
553
+ setPerfLoggingPrefs(prefs) {
554
+ this.options_.perfLoggingPrefs = prefs;
555
+ return this;
556
+ }
662
557
 
558
+ /**
559
+ * Sets preferences for the "Local State" file in Chrome's user data
560
+ * directory.
561
+ * @param {!Object} state Dictionary of local state preferences.
562
+ * @return {!Options} A self reference.
563
+ */
564
+ setLocalState(state) {
565
+ this.options_.localState = state;
566
+ return this;
567
+ }
663
568
 
664
- /**
665
- * Sets the path to Chrome's log file. This path should exist on the machine
666
- * that will launch Chrome.
667
- * @param {string} path Path to the log file to use.
668
- * @return {!Options} A self reference.
669
- */
670
- Options.prototype.setChromeLogFile = function(path) {
671
- this.options_.logPath = path;
672
- return this;
673
- };
569
+ /**
570
+ * Sets the name of the activity hosting a Chrome-based Android WebView. This
571
+ * option must be set to connect to an [Android WebView](
572
+ * https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android)
573
+ *
574
+ * @param {string} name The activity name.
575
+ * @return {!Options} A self reference.
576
+ */
577
+ androidActivity(name) {
578
+ this.options_.androidActivity = name;
579
+ return this;
580
+ }
674
581
 
582
+ /**
583
+ * Sets the device serial number to connect to via ADB. If not specified, the
584
+ * ChromeDriver will select an unused device at random. An error will be
585
+ * returned if all devices already have active sessions.
586
+ *
587
+ * @param {string} serial The device serial number to connect to.
588
+ * @return {!Options} A self reference.
589
+ */
590
+ androidDeviceSerial(serial) {
591
+ this.options_.androidDeviceSerial = serial;
592
+ return this;
593
+ }
675
594
 
676
- /**
677
- * Sets the directory to store Chrome minidumps in. This option is only
678
- * supported when ChromeDriver is running on Linux.
679
- * @param {string} path The directory path.
680
- * @return {!Options} A self reference.
681
- */
682
- Options.prototype.setChromeMinidumpPath = function(path) {
683
- this.options_.minidumpPath = path;
684
- return this;
685
- };
595
+ /**
596
+ * Configures the ChromeDriver to launch Chrome on Android via adb. This
597
+ * function is shorthand for
598
+ * {@link #androidPackage options.androidPackage('com.android.chrome')}.
599
+ * @return {!Options} A self reference.
600
+ */
601
+ androidChrome() {
602
+ return this.androidPackage('com.android.chrome');
603
+ }
686
604
 
605
+ /**
606
+ * Sets the package name of the Chrome or WebView app.
607
+ *
608
+ * @param {?string} pkg The package to connect to, or `null` to disable Android
609
+ * and switch back to using desktop Chrome.
610
+ * @return {!Options} A self reference.
611
+ */
612
+ androidPackage(pkg) {
613
+ this.options_.androidPackage = pkg;
614
+ return this;
615
+ }
687
616
 
688
- /**
689
- * Configures Chrome to emulate a mobile device. For more information, refer to
690
- * the ChromeDriver project page on [mobile emulation][em]. Configuration
691
- * options include:
692
- *
693
- * - `deviceName`: The name of a pre-configured [emulated device][devem]
694
- * - `width`: screen width, in pixels
695
- * - `height`: screen height, in pixels
696
- * - `pixelRatio`: screen pixel ratio
697
- *
698
- * __Example 1: Using a Pre-configured Device__
699
- *
700
- * var options = new chrome.Options().setMobileEmulation(
701
- * {deviceName: 'Google Nexus 5'});
702
- *
703
- * var driver = new chrome.Driver(options);
704
- *
705
- * __Example 2: Using Custom Screen Configuration__
706
- *
707
- * var options = new chrome.Options().setMobileEmulation({
708
- * width: 360,
709
- * height: 640,
710
- * pixelRatio: 3.0
711
- * });
712
- *
713
- * var driver = new chrome.Driver(options);
714
- *
715
- *
716
- * [em]: https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation
717
- * [devem]: https://developer.chrome.com/devtools/docs/device-mode
718
- *
719
- * @param {?({deviceName: string}|
720
- * {width: number, height: number, pixelRatio: number})} config The
721
- * mobile emulation configuration, or `null` to disable emulation.
722
- * @return {!Options} A self reference.
723
- */
724
- Options.prototype.setMobileEmulation = function(config) {
725
- this.options_.mobileEmulation = config;
726
- return this;
727
- };
617
+ /**
618
+ * Sets the process name of the Activity hosting the WebView (as given by
619
+ * `ps`). If not specified, the process name is assumed to be the same as
620
+ * {@link #androidPackage}.
621
+ *
622
+ * @param {string} processName The main activity name.
623
+ * @return {!Options} A self reference.
624
+ */
625
+ androidProcess(processName) {
626
+ this.options_.androidProcess = processName;
627
+ return this;
628
+ }
728
629
 
630
+ /**
631
+ * Sets whether to connect to an already-running instead of the specified
632
+ * {@linkplain #androidProcess app} instead of launching the app with a clean
633
+ * data directory.
634
+ *
635
+ * @param {boolean} useRunning Whether to connect to a running instance.
636
+ * @return {!Options} A self reference.
637
+ */
638
+ androidUseRunningApp(useRunning) {
639
+ this.options_.androidUseRunningApp = useRunning;
640
+ return this;
641
+ }
729
642
 
730
- /**
731
- * Sets the proxy settings for the new session.
732
- * @param {webdriver.ProxyConfig} proxy The proxy configuration to use.
733
- * @return {!Options} A self reference.
734
- */
735
- Options.prototype.setProxy = function(proxy) {
736
- this.proxy_ = proxy;
737
- return this;
738
- };
643
+ /**
644
+ * Sets the path to Chrome's log file. This path should exist on the machine
645
+ * that will launch Chrome.
646
+ * @param {string} path Path to the log file to use.
647
+ * @return {!Options} A self reference.
648
+ */
649
+ setChromeLogFile(path) {
650
+ this.options_.logPath = path;
651
+ return this;
652
+ }
739
653
 
654
+ /**
655
+ * Sets the directory to store Chrome minidumps in. This option is only
656
+ * supported when ChromeDriver is running on Linux.
657
+ * @param {string} path The directory path.
658
+ * @return {!Options} A self reference.
659
+ */
660
+ setChromeMinidumpPath(path) {
661
+ this.options_.minidumpPath = path;
662
+ return this;
663
+ }
740
664
 
741
- /**
742
- * Converts this options instance to a {@link webdriver.Capabilities} object.
743
- * @param {webdriver.Capabilities=} opt_capabilities The capabilities to merge
744
- * these options into, if any.
745
- * @return {!webdriver.Capabilities} The capabilities.
746
- */
747
- Options.prototype.toCapabilities = function(opt_capabilities) {
748
- var capabilities = opt_capabilities || webdriver.Capabilities.chrome();
749
- capabilities.
750
- set(webdriver.Capability.PROXY, this.proxy_).
751
- set(webdriver.Capability.LOGGING_PREFS, this.logPrefs_).
752
- set(OPTIONS_CAPABILITY_KEY, this);
753
- return capabilities;
754
- };
665
+ /**
666
+ * Configures Chrome to emulate a mobile device. For more information, refer
667
+ * to the ChromeDriver project page on [mobile emulation][em]. Configuration
668
+ * options include:
669
+ *
670
+ * - `deviceName`: The name of a pre-configured [emulated device][devem]
671
+ * - `width`: screen width, in pixels
672
+ * - `height`: screen height, in pixels
673
+ * - `pixelRatio`: screen pixel ratio
674
+ *
675
+ * __Example 1: Using a Pre-configured Device__
676
+ *
677
+ * let options = new chrome.Options().setMobileEmulation(
678
+ * {deviceName: 'Google Nexus 5'});
679
+ *
680
+ * let driver = new chrome.Driver(options);
681
+ *
682
+ * __Example 2: Using Custom Screen Configuration__
683
+ *
684
+ * let options = new chrome.Options().setMobileEmulation({
685
+ * width: 360,
686
+ * height: 640,
687
+ * pixelRatio: 3.0
688
+ * });
689
+ *
690
+ * let driver = new chrome.Driver(options);
691
+ *
692
+ *
693
+ * [em]: https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation
694
+ * [devem]: https://developer.chrome.com/devtools/docs/device-mode
695
+ *
696
+ * @param {?({deviceName: string}|
697
+ * {width: number, height: number, pixelRatio: number})} config The
698
+ * mobile emulation configuration, or `null` to disable emulation.
699
+ * @return {!Options} A self reference.
700
+ */
701
+ setMobileEmulation(config) {
702
+ this.options_.mobileEmulation = config;
703
+ return this;
704
+ }
755
705
 
706
+ /**
707
+ * Sets the proxy settings for the new session.
708
+ * @param {./lib/capabilities.ProxyConfig} proxy The proxy configuration to
709
+ * use.
710
+ * @return {!Options} A self reference.
711
+ */
712
+ setProxy(proxy) {
713
+ this.proxy_ = proxy;
714
+ return this;
715
+ }
756
716
 
757
- /**
758
- * Converts this instance to its JSON wire protocol representation. Note this
759
- * function is an implementation not intended for general use.
760
- * @return {{args: !Array.<string>,
761
- * binary: (string|undefined),
762
- * detach: boolean,
763
- * extensions: !Array.<(string|!webdriver.promise.Promise.<string>)>,
764
- * localState: (Object|undefined),
765
- * logPath: (string|undefined),
766
- * prefs: (Object|undefined)}} The JSON wire protocol representation
767
- * of this instance.
768
- * @override
769
- */
770
- Options.prototype.serialize = function() {
771
- var json = {};
772
- for (var key in this.options_) {
773
- if (this.options_[key] != null) {
774
- json[key] = this.options_[key];
775
- }
717
+ /**
718
+ * Converts this options instance to a {@link Capabilities} object.
719
+ * @param {Capabilities=} opt_capabilities The capabilities to merge
720
+ * these options into, if any.
721
+ * @return {!Capabilities} The capabilities.
722
+ */
723
+ toCapabilities(opt_capabilities) {
724
+ let caps = opt_capabilities || Capabilities.chrome();
725
+ caps.
726
+ set(Capability.PROXY, this.proxy_).
727
+ set(Capability.LOGGING_PREFS, this.logPrefs_).
728
+ set(OPTIONS_CAPABILITY_KEY, this);
729
+ return caps;
776
730
  }
777
- if (this.extensions_.length) {
778
- json.extensions = this.extensions_.map(function(extension) {
779
- if (Buffer.isBuffer(extension)) {
780
- return extension.toString('base64');
731
+
732
+ /**
733
+ * Converts this instance to its JSON wire protocol representation. Note this
734
+ * function is an implementation not intended for general use.
735
+ * @return {!Object} The JSON wire protocol representation of this instance.
736
+ */
737
+ [Symbols.serialize]() {
738
+ let json = {};
739
+ for (let key in this.options_) {
740
+ if (this.options_[key] != null) {
741
+ json[key] = this.options_[key];
781
742
  }
782
- return webdriver.promise.checkedNodeCall(
783
- fs.readFile, extension, 'base64');
784
- });
743
+ }
744
+ if (this.extensions_.length) {
745
+ json.extensions = this.extensions_.map(function(extension) {
746
+ if (Buffer.isBuffer(extension)) {
747
+ return extension.toString('base64');
748
+ }
749
+ return promise.checkedNodeCall(
750
+ fs.readFile, extension, 'base64');
751
+ });
752
+ }
753
+ return json;
785
754
  }
786
- return json;
787
- };
755
+ }
788
756
 
789
757
 
790
758
  /**
791
759
  * Creates a new WebDriver client for Chrome.
792
- *
793
- * @param {(webdriver.Capabilities|Options)=} opt_config The configuration
794
- * options.
795
- * @param {remote.DriverService=} opt_service The session to use; will use
796
- * the {@linkplain #getDefaultService default service} by default.
797
- * @param {webdriver.promise.ControlFlow=} opt_flow The control flow to use, or
798
- * {@code null} to use the currently active flow.
799
- * @constructor
800
- * @extends {webdriver.WebDriver}
801
- */
802
- var Driver = function(opt_config, opt_service, opt_flow) {
803
- var service = opt_service || getDefaultService();
804
- var executor = createExecutor(service.start());
805
-
806
- var capabilities =
807
- opt_config instanceof Options ? opt_config.toCapabilities() :
808
- (opt_config || webdriver.Capabilities.chrome());
809
-
810
- var driver = webdriver.WebDriver.createSession(
811
- executor, capabilities, opt_flow);
812
-
813
- webdriver.WebDriver.call(
814
- this, driver.getSession(), executor, driver.controlFlow());
815
- };
816
- util.inherits(Driver, webdriver.WebDriver);
817
-
818
-
819
- /**
820
- * This function is a no-op as file detectors are not supported by this
821
- * implementation.
822
- * @override
823
760
  */
824
- Driver.prototype.setFileDetector = function() {
825
- };
826
-
761
+ class Driver extends webdriver.WebDriver {
762
+ /**
763
+ * @param {(Capabilities|Options)=} opt_config The configuration
764
+ * options.
765
+ * @param {remote.DriverService=} opt_service The session to use; will use
766
+ * the {@linkplain #getDefaultService default service} by default.
767
+ * @param {promise.ControlFlow=} opt_flow The control flow to use,
768
+ * or {@code null} to use the currently active flow.
769
+ */
770
+ constructor(opt_config, opt_service, opt_flow) {
771
+ let service = opt_service || getDefaultService();
772
+ let executor = createExecutor(service.start());
773
+
774
+ let caps =
775
+ opt_config instanceof Options ? opt_config.toCapabilities() :
776
+ (opt_config || Capabilities.chrome());
777
+
778
+ let driver = webdriver.WebDriver.createSession(executor, caps, opt_flow);
779
+
780
+ super(driver.getSession(), executor, driver.controlFlow());
781
+ }
827
782
 
828
- /**
829
- * Schedules a command to launch Chrome App with given ID.
830
- * @param {string} id ID of the App to launch.
831
- * @return {!webdriver.promise.Promise<void>} A promise that will be resolved
832
- * when app is launched.
833
- */
834
- Driver.prototype.launchApp = function(id) {
835
- return this.schedule(
836
- new webdriver.Command(Command.LAUNCH_APP).setParameter('id', id),
837
- 'Driver.launchApp()');
838
- };
783
+ /**
784
+ * This function is a no-op as file detectors are not supported by this
785
+ * implementation.
786
+ * @override
787
+ */
788
+ setFileDetector() {}
789
+
790
+ /**
791
+ * Schedules a command to launch Chrome App with given ID.
792
+ * @param {string} id ID of the App to launch.
793
+ * @return {!promise.Promise<void>} A promise that will be resolved
794
+ * when app is launched.
795
+ */
796
+ launchApp(id) {
797
+ return this.schedule(
798
+ new command.Command(Command.LAUNCH_APP).setParameter('id', id),
799
+ 'Driver.launchApp()');
800
+ }
801
+ }
839
802
 
840
803
 
841
804
  // PUBLIC API