selenium-webdriver 2.48.2 → 2.53.3
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.
- package/CHANGES.md +116 -0
- package/NOTICE +1 -1
- package/README.md +59 -9
- package/builder.js +375 -358
- package/chrome.js +549 -586
- package/edge.js +378 -0
- package/error.js +9 -6
- package/example/google_search.js +1 -1
- package/example/google_search_generator.js +2 -4
- package/example/logging.js +6 -2
- package/example/sample.js +21 -0
- package/executors.js +11 -27
- package/firefox/binary.js +149 -98
- package/firefox/extension.js +15 -19
- package/firefox/index.js +256 -163
- package/firefox/profile.js +223 -243
- package/http/index.js +487 -81
- package/http/util.js +40 -36
- package/ie.js +288 -309
- package/index.js +34 -125
- package/io/exec.js +58 -39
- package/io/index.js +72 -60
- package/lib/README +4 -0
- package/lib/actions.js +596 -0
- package/lib/by.js +277 -0
- package/lib/capabilities.js +450 -0
- package/lib/{webdriver/command.js → command.js} +91 -72
- package/lib/{webdriver/button.js → devmode.js} +13 -8
- package/lib/error.js +690 -0
- package/lib/events.js +212 -0
- package/lib/firefox/amd64/libnoblur64.so +0 -0
- package/lib/firefox/i386/libnoblur.so +0 -0
- package/lib/firefox/webdriver.json +5 -1
- package/lib/firefox/webdriver.xpi +0 -0
- package/lib/{webdriver/key.js → input.js} +84 -2
- package/lib/logging.js +670 -0
- package/lib/{webdriver/promise.js → promise.js} +817 -644
- package/lib/safari/client.js +266 -214
- package/lib/session.js +80 -0
- package/lib/{webdriver/serializable.js → symbols.js} +16 -19
- package/lib/test/build.js +4 -4
- package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
- package/lib/test/data/click_tests/overlapping_elements.html +15 -4
- package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
- package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
- package/lib/test/data/hidden_partially.html +45 -0
- package/lib/test/data/readOnlyPage.html +1 -1
- package/lib/test/data/selectPage.html +18 -2
- package/lib/test/fileserver.js +3 -4
- package/lib/test/index.js +7 -3
- package/lib/test/resources.js +1 -1
- package/lib/until.js +376 -0
- package/lib/webdriver.js +2440 -0
- package/net/index.js +4 -0
- package/net/portprober.js +16 -12
- package/opera.js +295 -314
- package/package.json +6 -5
- package/phantomjs.js +144 -147
- package/proxy.js +10 -6
- package/remote/index.js +289 -238
- package/safari.js +326 -311
- package/test/chrome/options_test.js +11 -9
- package/test/element_finding_test.js +51 -13
- package/test/execute_script_test.js +17 -3
- package/test/firefox/firefox_test.js +0 -32
- package/test/http/http_test.js +671 -61
- package/test/http/util_test.js +25 -23
- package/test/io_test.js +67 -1
- package/test/lib/by_test.js +139 -0
- package/test/lib/capabilities_test.js +111 -0
- package/test/lib/error_test.js +325 -0
- package/test/lib/events_test.js +177 -0
- package/test/lib/logging_test.js +272 -0
- package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
- package/test/lib/promise_error_test.js +808 -0
- package/test/lib/promise_flow_test.js +2282 -0
- package/test/lib/promise_generator_test.js +308 -0
- package/test/lib/promise_test.js +996 -0
- package/test/lib/testutil.js +90 -0
- package/test/lib/until_test.js +400 -0
- package/test/lib/webdriver_test.js +2157 -0
- package/test/page_loading_test.js +7 -9
- package/test/remote_test.js +50 -3
- package/test/session_test.js +53 -0
- package/test/stale_element_test.js +2 -2
- package/test/testing/assert_test.js +374 -0
- package/test/testing/index_test.js +9 -11
- package/testing/assert.js +334 -17
- package/testing/index.js +12 -2
- package/_base.js +0 -200
- package/docs/Changes.html +0 -356
- package/docs/class_bot_Error.html +0 -15
- package/docs/class_webdriver_ActionSequence.html +0 -115
- package/docs/class_webdriver_Alert.html +0 -24
- package/docs/class_webdriver_AlertPromise.html +0 -92
- package/docs/class_webdriver_Capabilities.html +0 -60
- package/docs/class_webdriver_Command.html +0 -15
- package/docs/class_webdriver_EventEmitter.html +0 -35
- package/docs/class_webdriver_FileDetector.html +0 -21
- package/docs/class_webdriver_Locator.html +0 -12
- package/docs/class_webdriver_Serializable.html +0 -9
- package/docs/class_webdriver_Session.html +0 -13
- package/docs/class_webdriver_TouchSequence.html +0 -49
- package/docs/class_webdriver_UnhandledAlertError.html +0 -18
- package/docs/class_webdriver_WebDriver.html +0 -313
- package/docs/class_webdriver_WebDriver_Logs.html +0 -15
- package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
- package/docs/class_webdriver_WebDriver_Options.html +0 -41
- package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
- package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
- package/docs/class_webdriver_WebDriver_Window.html +0 -27
- package/docs/class_webdriver_WebElement.html +0 -223
- package/docs/class_webdriver_WebElementPromise.html +0 -274
- package/docs/class_webdriver_http_Executor.html +0 -22
- package/docs/class_webdriver_http_Request.html +0 -12
- package/docs/class_webdriver_http_Response.html +0 -13
- package/docs/class_webdriver_logging_Entry.html +0 -15
- package/docs/class_webdriver_logging_Level.html +0 -55
- package/docs/class_webdriver_logging_LogRecord.html +0 -45
- package/docs/class_webdriver_logging_Logger.html +0 -119
- package/docs/class_webdriver_logging_Preferences.html +0 -8
- package/docs/class_webdriver_promise_CancellationError.html +0 -17
- package/docs/class_webdriver_promise_ControlFlow.html +0 -153
- package/docs/class_webdriver_promise_Deferred.html +0 -84
- package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
- package/docs/class_webdriver_promise_Promise.html +0 -75
- package/docs/class_webdriver_stacktrace_Frame.html +0 -20
- package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
- package/docs/class_webdriver_testing_Assertion.html +0 -99
- package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
- package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
- package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
- package/docs/class_webdriver_until_Condition.html +0 -7
- package/docs/dossier.css +0 -1
- package/docs/dossier.js +0 -86
- package/docs/enum_bot_ErrorCode.html +0 -3
- package/docs/enum_bot_Error_State.html +0 -2
- package/docs/enum_webdriver_Browser.html +0 -2
- package/docs/enum_webdriver_Button.html +0 -2
- package/docs/enum_webdriver_Capability.html +0 -33
- package/docs/enum_webdriver_CommandName.html +0 -3
- package/docs/enum_webdriver_Key.html +0 -12
- package/docs/enum_webdriver_logging_Type.html +0 -6
- package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
- package/docs/index.html +0 -125
- package/docs/interface_webdriver_CommandExecutor.html +0 -9
- package/docs/interface_webdriver_http_Client.html +0 -10
- package/docs/interface_webdriver_promise_Thenable.html +0 -77
- package/docs/module_selenium-webdriver.html +0 -23
- package/docs/module_selenium-webdriver__base.html +0 -23
- package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
- package/docs/module_selenium-webdriver_builder.html +0 -2
- package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_chrome.html +0 -90
- package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
- package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
- package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
- package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
- package/docs/module_selenium-webdriver_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
- package/docs/module_selenium-webdriver_class_Command.html +0 -15
- package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
- package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
- package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
- package/docs/module_selenium-webdriver_class_Session.html +0 -13
- package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
- package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
- package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
- package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
- package/docs/module_selenium-webdriver_enum_Button.html +0 -2
- package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
- package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
- package/docs/module_selenium-webdriver_enum_Key.html +0 -12
- package/docs/module_selenium-webdriver_error.html +0 -4
- package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
- package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
- package/docs/module_selenium-webdriver_executors.html +0 -10
- package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
- package/docs/module_selenium-webdriver_firefox.html +0 -68
- package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
- package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
- package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
- package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
- package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_http.html +0 -9
- package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
- package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
- package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
- package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
- package/docs/module_selenium-webdriver_http_util.html +0 -17
- package/docs/module_selenium-webdriver_ie.html +0 -11
- package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
- package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
- package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
- package/docs/module_selenium-webdriver_io.html +0 -37
- package/docs/module_selenium-webdriver_io_exec.html +0 -6
- package/docs/module_selenium-webdriver_namespace_By.html +0 -56
- package/docs/module_selenium-webdriver_namespace_error.html +0 -4
- package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
- package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
- package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
- package/docs/module_selenium-webdriver_namespace_until.html +0 -82
- package/docs/module_selenium-webdriver_net.html +0 -7
- package/docs/module_selenium-webdriver_net_portprober.html +0 -12
- package/docs/module_selenium-webdriver_opera.html +0 -62
- package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
- package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
- package/docs/module_selenium-webdriver_phantomjs.html +0 -2
- package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
- package/docs/module_selenium-webdriver_proxy.html +0 -28
- package/docs/module_selenium-webdriver_remote.html +0 -8
- package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
- package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
- package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
- package/docs/module_selenium-webdriver_safari.html +0 -9
- package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
- package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
- package/docs/module_selenium-webdriver_testing.html +0 -74
- package/docs/module_selenium-webdriver_testing_assert.html +0 -9
- package/docs/namespace_bot.html +0 -4
- package/docs/namespace_bot_json.html +0 -20
- package/docs/namespace_bot_response.html +0 -18
- package/docs/namespace_bot_userAgent.html +0 -33
- package/docs/namespace_webdriver.html +0 -30
- package/docs/namespace_webdriver_By.html +0 -56
- package/docs/namespace_webdriver_http.html +0 -6
- package/docs/namespace_webdriver_logging.html +0 -70
- package/docs/namespace_webdriver_promise.html +0 -688
- package/docs/namespace_webdriver_stacktrace.html +0 -17
- package/docs/namespace_webdriver_testing.html +0 -7
- package/docs/namespace_webdriver_testing_assert.html +0 -9
- package/docs/namespace_webdriver_testing_asserts.html +0 -18
- package/docs/namespace_webdriver_until.html +0 -82
- package/docs/source/_base.js.src.html +0 -1
- package/docs/source/builder.js.src.html +0 -1
- package/docs/source/chrome.js.src.html +0 -1
- package/docs/source/error.js.src.html +0 -1
- package/docs/source/executors.js.src.html +0 -1
- package/docs/source/firefox/binary.js.src.html +0 -1
- package/docs/source/firefox/extension.js.src.html +0 -1
- package/docs/source/firefox/index.js.src.html +0 -1
- package/docs/source/firefox/profile.js.src.html +0 -1
- package/docs/source/http/index.js.src.html +0 -1
- package/docs/source/http/util.js.src.html +0 -1
- package/docs/source/ie.js.src.html +0 -1
- package/docs/source/index.js.src.html +0 -1
- package/docs/source/io/exec.js.src.html +0 -1
- package/docs/source/io/index.js.src.html +0 -1
- package/docs/source/lib/atoms/error.js.src.html +0 -1
- package/docs/source/lib/atoms/json.js.src.html +0 -1
- package/docs/source/lib/atoms/response.js.src.html +0 -1
- package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
- package/docs/source/lib/goog/array/array.js.src.html +0 -1
- package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
- package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
- package/docs/source/lib/goog/async/run.js.src.html +0 -1
- package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
- package/docs/source/lib/goog/base.js.src.html +0 -1
- package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
- package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
- package/docs/source/lib/goog/debug/error.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
- package/docs/source/lib/goog/deps.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
- package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
- package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
- package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
- package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/events/event.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
- package/docs/source/lib/goog/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
- package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
- package/docs/source/lib/goog/events/listener.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
- package/docs/source/lib/goog/fs/url.js.src.html +0 -1
- package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
- package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
- package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
- package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
- package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
- package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
- package/docs/source/lib/goog/json/json.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
- package/docs/source/lib/goog/log/log.js.src.html +0 -1
- package/docs/source/lib/goog/math/box.js.src.html +0 -1
- package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
- package/docs/source/lib/goog/math/math.js.src.html +0 -1
- package/docs/source/lib/goog/math/rect.js.src.html +0 -1
- package/docs/source/lib/goog/math/size.js.src.html +0 -1
- package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/object/object.js.src.html +0 -1
- package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
- package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
- package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
- package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
- package/docs/source/lib/goog/string/const.js.src.html +0 -1
- package/docs/source/lib/goog/string/string.js.src.html +0 -1
- package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
- package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
- package/docs/source/lib/goog/structs/map.js.src.html +0 -1
- package/docs/source/lib/goog/structs/set.js.src.html +0 -1
- package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
- package/docs/source/lib/goog/style/style.js.src.html +0 -1
- package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
- package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
- package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
- package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
- package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
- package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
- package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
- package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
- package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
- package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/button.js.src.html +0 -1
- package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
- package/docs/source/lib/webdriver/command.js.src.html +0 -1
- package/docs/source/lib/webdriver/events.js.src.html +0 -1
- package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
- package/docs/source/lib/webdriver/key.js.src.html +0 -1
- package/docs/source/lib/webdriver/locators.js.src.html +0 -1
- package/docs/source/lib/webdriver/logging.js.src.html +0 -1
- package/docs/source/lib/webdriver/promise.js.src.html +0 -1
- package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
- package/docs/source/lib/webdriver/session.js.src.html +0 -1
- package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
- package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/until.js.src.html +0 -1
- package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
- package/docs/source/net/index.js.src.html +0 -1
- package/docs/source/net/portprober.js.src.html +0 -1
- package/docs/source/opera.js.src.html +0 -1
- package/docs/source/phantomjs.js.src.html +0 -1
- package/docs/source/proxy.js.src.html +0 -1
- package/docs/source/remote/index.js.src.html +0 -1
- package/docs/source/safari.js.src.html +0 -1
- package/docs/source/testing/assert.js.src.html +0 -1
- package/docs/source/testing/index.js.src.html +0 -1
- package/docs/types.js +0 -1
- package/lib/atoms/error.js +0 -202
- package/lib/atoms/json.js +0 -80
- package/lib/atoms/response.js +0 -110
- package/lib/atoms/userAgent.js +0 -257
- package/lib/goog/LICENSE +0 -176
- package/lib/goog/array/array.js +0 -1654
- package/lib/goog/asserts/asserts.js +0 -365
- package/lib/goog/async/freelist.js +0 -88
- package/lib/goog/async/nexttick.js +0 -241
- package/lib/goog/async/run.js +0 -133
- package/lib/goog/async/workqueue.js +0 -139
- package/lib/goog/base.js +0 -2548
- package/lib/goog/debug/debug.js +0 -653
- package/lib/goog/debug/entrypointregistry.js +0 -158
- package/lib/goog/debug/error.js +0 -63
- package/lib/goog/debug/logbuffer.js +0 -148
- package/lib/goog/debug/logger.js +0 -873
- package/lib/goog/debug/logrecord.js +0 -242
- package/lib/goog/deps.js +0 -151
- package/lib/goog/disposable/disposable.js +0 -307
- package/lib/goog/disposable/idisposable.js +0 -45
- package/lib/goog/dom/browserfeature.js +0 -72
- package/lib/goog/dom/dom.js +0 -2991
- package/lib/goog/dom/nodetype.js +0 -48
- package/lib/goog/dom/safe.js +0 -347
- package/lib/goog/dom/tagname.js +0 -160
- package/lib/goog/dom/tags.js +0 -41
- package/lib/goog/dom/vendor.js +0 -96
- package/lib/goog/events/browserevent.js +0 -400
- package/lib/goog/events/browserfeature.js +0 -85
- package/lib/goog/events/event.js +0 -143
- package/lib/goog/events/eventid.js +0 -47
- package/lib/goog/events/events.js +0 -984
- package/lib/goog/events/eventtarget.js +0 -394
- package/lib/goog/events/eventtype.js +0 -237
- package/lib/goog/events/keycodes.js +0 -427
- package/lib/goog/events/listenable.js +0 -335
- package/lib/goog/events/listener.js +0 -131
- package/lib/goog/events/listenermap.js +0 -308
- package/lib/goog/fs/url.js +0 -109
- package/lib/goog/functions/functions.js +0 -442
- package/lib/goog/html/safehtml.js +0 -757
- package/lib/goog/html/safescript.js +0 -234
- package/lib/goog/html/safestyle.js +0 -442
- package/lib/goog/html/safestylesheet.js +0 -276
- package/lib/goog/html/safeurl.js +0 -398
- package/lib/goog/html/trustedresourceurl.js +0 -224
- package/lib/goog/html/uncheckedconversions.js +0 -232
- package/lib/goog/i18n/bidi.js +0 -908
- package/lib/goog/iter/iter.js +0 -1302
- package/lib/goog/json/json.js +0 -363
- package/lib/goog/labs/testing/assertthat.js +0 -58
- package/lib/goog/labs/testing/logicmatcher.js +0 -212
- package/lib/goog/labs/testing/matcher.js +0 -80
- package/lib/goog/labs/testing/numbermatcher.js +0 -346
- package/lib/goog/labs/testing/objectmatcher.js +0 -317
- package/lib/goog/labs/testing/stringmatcher.js +0 -415
- package/lib/goog/labs/useragent/browser.js +0 -341
- package/lib/goog/labs/useragent/engine.js +0 -160
- package/lib/goog/labs/useragent/platform.js +0 -160
- package/lib/goog/labs/useragent/util.js +0 -148
- package/lib/goog/log/log.js +0 -197
- package/lib/goog/math/box.js +0 -398
- package/lib/goog/math/coordinate.js +0 -268
- package/lib/goog/math/math.js +0 -451
- package/lib/goog/math/rect.js +0 -476
- package/lib/goog/math/size.js +0 -227
- package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
- package/lib/goog/net/xhrlike.js +0 -124
- package/lib/goog/net/xmlhttp.js +0 -246
- package/lib/goog/net/xmlhttpfactory.js +0 -67
- package/lib/goog/object/object.js +0 -686
- package/lib/goog/promise/promise.js +0 -1350
- package/lib/goog/promise/resolver.js +0 -48
- package/lib/goog/promise/thenable.js +0 -126
- package/lib/goog/reflect/reflect.js +0 -77
- package/lib/goog/string/const.js +0 -182
- package/lib/goog/string/string.js +0 -1599
- package/lib/goog/string/typedstring.js +0 -48
- package/lib/goog/structs/collection.js +0 -56
- package/lib/goog/structs/map.js +0 -457
- package/lib/goog/structs/set.js +0 -279
- package/lib/goog/structs/structs.js +0 -354
- package/lib/goog/style/style.js +0 -2037
- package/lib/goog/testing/asserts.js +0 -1278
- package/lib/goog/testing/events/events.js +0 -767
- package/lib/goog/testing/functionmock.js +0 -175
- package/lib/goog/testing/jsunit.js +0 -162
- package/lib/goog/testing/loosemock.js +0 -242
- package/lib/goog/testing/mock.js +0 -645
- package/lib/goog/testing/mockclock.js +0 -606
- package/lib/goog/testing/mockcontrol.js +0 -220
- package/lib/goog/testing/mockinterface.js +0 -45
- package/lib/goog/testing/mockmatchers.js +0 -400
- package/lib/goog/testing/objectpropertystring.js +0 -68
- package/lib/goog/testing/propertyreplacer.js +0 -262
- package/lib/goog/testing/recordfunction.js +0 -215
- package/lib/goog/testing/stacktrace.js +0 -594
- package/lib/goog/testing/strictmock.js +0 -130
- package/lib/goog/testing/testcase.js +0 -1629
- package/lib/goog/testing/testrunner.js +0 -440
- package/lib/goog/uri/uri.js +0 -1524
- package/lib/goog/uri/utils.js +0 -1064
- package/lib/goog/useragent/product.js +0 -183
- package/lib/goog/useragent/product_isversion.js +0 -144
- package/lib/goog/useragent/useragent.js +0 -572
- package/lib/webdriver/actionsequence.js +0 -356
- package/lib/webdriver/builder.js +0 -207
- package/lib/webdriver/capabilities.js +0 -412
- package/lib/webdriver/events.js +0 -179
- package/lib/webdriver/firefoxdomexecutor.js +0 -175
- package/lib/webdriver/http/corsclient.js +0 -133
- package/lib/webdriver/http/http.js +0 -525
- package/lib/webdriver/http/xhrclient.js +0 -67
- package/lib/webdriver/locators.js +0 -257
- package/lib/webdriver/logging.js +0 -347
- package/lib/webdriver/session.js +0 -74
- package/lib/webdriver/stacktrace.js +0 -619
- package/lib/webdriver/test/builder_test.js +0 -53
- package/lib/webdriver/test/capabilities_test.js +0 -72
- package/lib/webdriver/test/events_test.js +0 -203
- package/lib/webdriver/test/http/corsclient_test.js +0 -151
- package/lib/webdriver/test/http/http_test.js +0 -428
- package/lib/webdriver/test/http/xhrclient_test.js +0 -196
- package/lib/webdriver/test/locators_test.js +0 -59
- package/lib/webdriver/test/logging_test.js +0 -85
- package/lib/webdriver/test/promise_error_test.js +0 -892
- package/lib/webdriver/test/promise_flow_test.js +0 -2365
- package/lib/webdriver/test/promise_generator_test.js +0 -323
- package/lib/webdriver/test/promise_test.js +0 -2012
- package/lib/webdriver/test/stacktrace_test.js +0 -480
- package/lib/webdriver/test/test_bootstrap.js +0 -67
- package/lib/webdriver/test/testing/asserts_test.js +0 -117
- package/lib/webdriver/test/testing/client_test.js +0 -88
- package/lib/webdriver/test/testing/testcase_test.js +0 -229
- package/lib/webdriver/test/testutil.js +0 -209
- package/lib/webdriver/test/testutil_test.js +0 -104
- package/lib/webdriver/test/until_test.js +0 -411
- package/lib/webdriver/test/webdriver_generator_test.js +0 -92
- package/lib/webdriver/test/webdriver_test.js +0 -2369
- package/lib/webdriver/testing/asserts.js +0 -487
- package/lib/webdriver/testing/client.js +0 -179
- package/lib/webdriver/testing/jsunit.js +0 -363
- package/lib/webdriver/testing/testcase.js +0 -168
- package/lib/webdriver/testing/window.js +0 -244
- package/lib/webdriver/touchsequence.js +0 -248
- package/lib/webdriver/until.js +0 -412
- package/lib/webdriver/webdriver.js +0 -2511
- package/test/_base_test.js +0 -129
package/remote/index.js
CHANGED
|
@@ -17,276 +17,318 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
AdmConstants = require('adm-zip/util/constants'),
|
|
20
|
+
const AdmZip = require('adm-zip'),
|
|
22
21
|
fs = require('fs'),
|
|
23
22
|
path = require('path'),
|
|
24
23
|
url = require('url'),
|
|
25
24
|
util = require('util');
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
webdriver = require('../'),
|
|
29
|
-
promise = require('../').promise,
|
|
30
|
-
httpUtil = require('../http/util'),
|
|
26
|
+
const httpUtil = require('../http/util'),
|
|
31
27
|
exec = require('../io/exec'),
|
|
28
|
+
cmd = require('../lib/command'),
|
|
29
|
+
input = require('../lib/input'),
|
|
30
|
+
promise = require('../lib/promise'),
|
|
31
|
+
webdriver = require('../lib/webdriver'),
|
|
32
32
|
net = require('../net'),
|
|
33
33
|
portprober = require('../net/portprober');
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* A record object that defines the configuration options for a DriverService
|
|
39
|
+
* instance.
|
|
39
40
|
*
|
|
40
|
-
*
|
|
41
|
-
* loopback address.
|
|
42
|
-
* - `port` - The port to start the server on (must be > 0). If the port is
|
|
43
|
-
* provided as a promise, the service will wait for the promise to resolve
|
|
44
|
-
* before starting.
|
|
45
|
-
* - `args` - The arguments to pass to the service. If a promise is provided,
|
|
46
|
-
* the service will wait for it to resolve before starting.
|
|
47
|
-
* - `path` - The base path on the server for the WebDriver wire protocol
|
|
48
|
-
* (e.g. '/wd/hub'). Defaults to '/'.
|
|
49
|
-
* - `env` - The environment variables that should be visible to the server
|
|
50
|
-
* process. Defaults to inheriting the current process's environment.
|
|
51
|
-
* - `stdio` - IO configuration for the spawned server process. For more
|
|
52
|
-
* information, refer to the documentation of `child_process.spawn`.
|
|
53
|
-
*
|
|
54
|
-
* @typedef {{
|
|
55
|
-
* loopback: (boolean|undefined),
|
|
56
|
-
* port: (number|!webdriver.promise.Promise.<number>),
|
|
57
|
-
* args: !(Array.<string>|webdriver.promise.Promise.<!Array.<string>>),
|
|
58
|
-
* path: (string|undefined),
|
|
59
|
-
* env: (!Object.<string, string>|undefined),
|
|
60
|
-
* stdio: (string|!Array.<string|number|!Stream|null|undefined>|undefined)
|
|
61
|
-
* }}
|
|
41
|
+
* @record
|
|
62
42
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
43
|
+
function ServiceOptions() {}
|
|
65
44
|
|
|
66
45
|
/**
|
|
67
|
-
*
|
|
46
|
+
* Whether the service should only be accessed on this host's loopback address.
|
|
68
47
|
*
|
|
69
|
-
*
|
|
70
|
-
* https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol.
|
|
71
|
-
* Furthermore, the managed server should support multiple concurrent sessions,
|
|
72
|
-
* so that this class may be reused for multiple clients.
|
|
73
|
-
*
|
|
74
|
-
* @param {string} executable Path to the executable to run.
|
|
75
|
-
* @param {!ServiceOptions} options Configuration options for the service.
|
|
76
|
-
* @constructor
|
|
48
|
+
* @type {(boolean|undefined)}
|
|
77
49
|
*/
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
/** @private {string} */
|
|
81
|
-
this.executable_ = executable;
|
|
82
|
-
|
|
83
|
-
/** @private {boolean} */
|
|
84
|
-
this.loopbackOnly_ = !!options.loopback;
|
|
85
|
-
|
|
86
|
-
/** @private {(number|!webdriver.promise.Promise.<number>)} */
|
|
87
|
-
this.port_ = options.port;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* @private {!(Array.<string>|webdriver.promise.Promise.<!Array.<string>>)}
|
|
91
|
-
*/
|
|
92
|
-
this.args_ = options.args;
|
|
93
|
-
|
|
94
|
-
/** @private {string} */
|
|
95
|
-
this.path_ = options.path || '/';
|
|
96
|
-
|
|
97
|
-
/** @private {!Object.<string, string>} */
|
|
98
|
-
this.env_ = options.env || process.env;
|
|
99
|
-
|
|
100
|
-
/** @private {(string|!Array.<string|number|!Stream|null|undefined>)} */
|
|
101
|
-
this.stdio_ = options.stdio || 'ignore';
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* A promise for the managed subprocess, or null if the server has not been
|
|
105
|
-
* started yet. This promise will never be rejected.
|
|
106
|
-
* @private {promise.Promise.<!exec.Command>}
|
|
107
|
-
*/
|
|
108
|
-
this.command_ = null;
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Promise that resolves to the server's address or null if the server has
|
|
112
|
-
* not been started. This promise will be rejected if the server terminates
|
|
113
|
-
* before it starts accepting WebDriver requests.
|
|
114
|
-
* @private {promise.Promise.<string>}
|
|
115
|
-
*/
|
|
116
|
-
this.address_ = null;
|
|
117
|
-
}
|
|
50
|
+
ServiceOptions.prototype.loopback;
|
|
118
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The host name to access the server on. If this option is specified, the
|
|
54
|
+
* {@link #loopback} option will be ignored.
|
|
55
|
+
*
|
|
56
|
+
* @type {(string|undefined)}
|
|
57
|
+
*/
|
|
58
|
+
ServiceOptions.prototype.hostname;
|
|
119
59
|
|
|
120
60
|
/**
|
|
121
|
-
* The
|
|
122
|
-
*
|
|
123
|
-
*
|
|
61
|
+
* The port to start the server on (must be > 0). If the port is provided as a
|
|
62
|
+
* promise, the service will wait for the promise to resolve before starting.
|
|
63
|
+
*
|
|
64
|
+
* @type {(number|!promise.Promise<number>)}
|
|
124
65
|
*/
|
|
125
|
-
|
|
66
|
+
ServiceOptions.prototype.port;
|
|
126
67
|
|
|
68
|
+
/**
|
|
69
|
+
* The arguments to pass to the service. If a promise is provided, the service
|
|
70
|
+
* will wait for it to resolve before starting.
|
|
71
|
+
*
|
|
72
|
+
* @type {!(Array<string>|promise.Promise<!Array<string>>)}
|
|
73
|
+
*/
|
|
74
|
+
ServiceOptions.prototype.args;
|
|
127
75
|
|
|
128
76
|
/**
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
77
|
+
* The base path on the server for the WebDriver wire protocol (e.g. '/wd/hub').
|
|
78
|
+
* Defaults to '/'.
|
|
79
|
+
*
|
|
80
|
+
* @type {(string|undefined|null)}
|
|
132
81
|
*/
|
|
133
|
-
|
|
134
|
-
if (this.address_) {
|
|
135
|
-
return this.address_;
|
|
136
|
-
}
|
|
137
|
-
throw Error('Server has not been started.');
|
|
138
|
-
};
|
|
82
|
+
ServiceOptions.prototype.path;
|
|
139
83
|
|
|
84
|
+
/**
|
|
85
|
+
* The environment variables that should be visible to the server process.
|
|
86
|
+
* Defaults to inheriting the current process's environment.
|
|
87
|
+
*
|
|
88
|
+
* @type {(Object<string, string>|undefined)}
|
|
89
|
+
*/
|
|
90
|
+
ServiceOptions.prototype.env;
|
|
140
91
|
|
|
141
92
|
/**
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
93
|
+
* IO configuration for the spawned server process. For more information, refer
|
|
94
|
+
* to the documentation of `child_process.spawn`.
|
|
95
|
+
*
|
|
96
|
+
* @type {(string|!Array<string|number|!stream.Stream|null|undefined>|
|
|
97
|
+
* undefined)}
|
|
98
|
+
* @see https://nodejs.org/dist/latest-v4.x/docs/api/child_process.html#child_process_options_stdio
|
|
145
99
|
*/
|
|
146
|
-
|
|
147
|
-
return !!this.address_;
|
|
148
|
-
};
|
|
100
|
+
ServiceOptions.prototype.stdio;
|
|
149
101
|
|
|
150
102
|
|
|
151
103
|
/**
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* rejected.
|
|
104
|
+
* Manages the life and death of a native executable WebDriver server.
|
|
105
|
+
*
|
|
106
|
+
* It is expected that the driver server implements the
|
|
107
|
+
* https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol.
|
|
108
|
+
* Furthermore, the managed server should support multiple concurrent sessions,
|
|
109
|
+
* so that this class may be reused for multiple clients.
|
|
159
110
|
*/
|
|
160
|
-
DriverService
|
|
161
|
-
|
|
162
|
-
|
|
111
|
+
class DriverService {
|
|
112
|
+
/**
|
|
113
|
+
* @param {string} executable Path to the executable to run.
|
|
114
|
+
* @param {!ServiceOptions} options Configuration options for the service.
|
|
115
|
+
*/
|
|
116
|
+
constructor(executable, options) {
|
|
117
|
+
/** @private {string} */
|
|
118
|
+
this.executable_ = executable;
|
|
119
|
+
|
|
120
|
+
/** @private {boolean} */
|
|
121
|
+
this.loopbackOnly_ = !!options.loopback;
|
|
122
|
+
|
|
123
|
+
/** @private {(string|undefined)} */
|
|
124
|
+
this.hostname_ = options.hostname;
|
|
125
|
+
|
|
126
|
+
/** @private {(number|!promise.Promise<number>)} */
|
|
127
|
+
this.port_ = options.port;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @private {!(Array<string>|promise.Promise<!Array<string>>)}
|
|
131
|
+
*/
|
|
132
|
+
this.args_ = options.args;
|
|
133
|
+
|
|
134
|
+
/** @private {string} */
|
|
135
|
+
this.path_ = options.path || '/';
|
|
136
|
+
|
|
137
|
+
/** @private {!Object<string, string>} */
|
|
138
|
+
this.env_ = options.env || process.env;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @private {(string|!Array<string|number|!stream.Stream|null|undefined>)}
|
|
142
|
+
*/
|
|
143
|
+
this.stdio_ = options.stdio || 'ignore';
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* A promise for the managed subprocess, or null if the server has not been
|
|
147
|
+
* started yet. This promise will never be rejected.
|
|
148
|
+
* @private {promise.Deferred<!exec.Command>}
|
|
149
|
+
*/
|
|
150
|
+
this.command_ = null;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Promise that resolves to the server's address or null if the server has
|
|
154
|
+
* not been started. This promise will be rejected if the server terminates
|
|
155
|
+
* before it starts accepting WebDriver requests.
|
|
156
|
+
* @private {promise.Deferred<string>}
|
|
157
|
+
*/
|
|
158
|
+
this.address_ = null;
|
|
163
159
|
}
|
|
164
160
|
|
|
165
|
-
|
|
161
|
+
/**
|
|
162
|
+
* @return {!promise.Promise<string>} A promise that resolves to
|
|
163
|
+
* the server's address.
|
|
164
|
+
* @throws {Error} If the server has not been started.
|
|
165
|
+
*/
|
|
166
|
+
address() {
|
|
167
|
+
if (this.address_) {
|
|
168
|
+
return this.address_.promise;
|
|
169
|
+
}
|
|
170
|
+
throw Error('Server has not been started.');
|
|
171
|
+
}
|
|
166
172
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
+
/**
|
|
174
|
+
* Returns whether the underlying process is still running. This does not take
|
|
175
|
+
* into account whether the process is in the process of shutting down.
|
|
176
|
+
* @return {boolean} Whether the underlying service process is running.
|
|
177
|
+
*/
|
|
178
|
+
isRunning() {
|
|
179
|
+
return !!this.address_;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Starts the server if it is not already running.
|
|
184
|
+
* @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the
|
|
185
|
+
* server to start accepting requests. Defaults to 30 seconds.
|
|
186
|
+
* @return {!promise.Promise<string>} A promise that will resolve
|
|
187
|
+
* to the server's base URL when it has started accepting requests. If the
|
|
188
|
+
* timeout expires before the server has started, the promise will be
|
|
189
|
+
* rejected.
|
|
190
|
+
*/
|
|
191
|
+
start(opt_timeoutMs) {
|
|
192
|
+
if (this.address_) {
|
|
193
|
+
return this.address_.promise;
|
|
173
194
|
}
|
|
174
|
-
return promise.when(self.args_, function(args) {
|
|
175
|
-
var command = exec(self.executable_, {
|
|
176
|
-
args: args,
|
|
177
|
-
env: self.env_,
|
|
178
|
-
stdio: self.stdio_
|
|
179
|
-
});
|
|
180
195
|
|
|
181
|
-
|
|
196
|
+
var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
|
|
197
|
+
|
|
198
|
+
var self = this;
|
|
199
|
+
this.command_ = promise.defer();
|
|
200
|
+
this.address_ = promise.defer();
|
|
201
|
+
this.address_.fulfill(promise.when(this.port_, function(port) {
|
|
202
|
+
if (port <= 0) {
|
|
203
|
+
throw Error('Port must be > 0: ' + port);
|
|
204
|
+
}
|
|
205
|
+
return promise.when(self.args_, function(args) {
|
|
206
|
+
var command = exec(self.executable_, {
|
|
207
|
+
args: args,
|
|
208
|
+
env: self.env_,
|
|
209
|
+
stdio: self.stdio_
|
|
210
|
+
});
|
|
182
211
|
|
|
183
|
-
|
|
184
|
-
var error = result.code == null ?
|
|
185
|
-
Error('Server was killed with ' + result.signal) :
|
|
186
|
-
Error('Server terminated early with status ' + result.code);
|
|
187
|
-
self.address_.reject(error);
|
|
188
|
-
self.address_ = null;
|
|
189
|
-
self.command_ = null;
|
|
190
|
-
throw error;
|
|
191
|
-
});
|
|
212
|
+
self.command_.fulfill(command);
|
|
192
213
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
214
|
+
var earlyTermination = command.result().then(function(result) {
|
|
215
|
+
var error = result.code == null ?
|
|
216
|
+
Error('Server was killed with ' + result.signal) :
|
|
217
|
+
Error('Server terminated early with status ' + result.code);
|
|
218
|
+
self.address_.reject(error);
|
|
219
|
+
self.address_ = null;
|
|
220
|
+
self.command_ = null;
|
|
221
|
+
throw error;
|
|
222
|
+
});
|
|
200
223
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
224
|
+
var hostname = self.hostname_;
|
|
225
|
+
if (!hostname) {
|
|
226
|
+
hostname = !self.loopbackOnly_ && net.getAddress()
|
|
227
|
+
|| net.getLoopbackAddress();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
var serverUrl = url.format({
|
|
231
|
+
protocol: 'http',
|
|
232
|
+
hostname: hostname,
|
|
233
|
+
port: port,
|
|
234
|
+
pathname: self.path_
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
return new promise.Promise(function(fulfill, reject) {
|
|
238
|
+
var ready = httpUtil.waitForServer(serverUrl, timeout)
|
|
239
|
+
.then(fulfill, reject);
|
|
240
|
+
earlyTermination.catch(function(e) {
|
|
241
|
+
ready.cancel(/** @type {Error} */(e));
|
|
242
|
+
reject(Error(e.message));
|
|
243
|
+
});
|
|
244
|
+
}).then(function() {
|
|
245
|
+
return serverUrl;
|
|
207
246
|
});
|
|
208
|
-
}).then(function() {
|
|
209
|
-
return serverUrl;
|
|
210
247
|
});
|
|
211
|
-
});
|
|
212
|
-
}));
|
|
248
|
+
}));
|
|
213
249
|
|
|
214
|
-
|
|
215
|
-
}
|
|
250
|
+
return this.address_.promise;
|
|
251
|
+
}
|
|
216
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Stops the service if it is not currently running. This function will kill
|
|
255
|
+
* the server immediately. To synchronize with the active control flow, use
|
|
256
|
+
* {@link #stop()}.
|
|
257
|
+
* @return {!promise.Promise} A promise that will be resolved when
|
|
258
|
+
* the server has been stopped.
|
|
259
|
+
*/
|
|
260
|
+
kill() {
|
|
261
|
+
if (!this.address_ || !this.command_) {
|
|
262
|
+
return promise.fulfilled(); // Not currently running.
|
|
263
|
+
}
|
|
264
|
+
return this.command_.promise.then(function(command) {
|
|
265
|
+
command.kill('SIGTERM');
|
|
266
|
+
});
|
|
267
|
+
}
|
|
217
268
|
|
|
218
|
-
/**
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (!this.address_ || !this.command_) {
|
|
227
|
-
return promise.fulfilled(); // Not currently running.
|
|
269
|
+
/**
|
|
270
|
+
* Schedules a task in the current control flow to stop the server if it is
|
|
271
|
+
* currently running.
|
|
272
|
+
* @return {!promise.Promise} A promise that will be resolved when
|
|
273
|
+
* the server has been stopped.
|
|
274
|
+
*/
|
|
275
|
+
stop() {
|
|
276
|
+
return promise.controlFlow().execute(this.kill.bind(this));
|
|
228
277
|
}
|
|
229
|
-
|
|
230
|
-
command.kill('SIGTERM');
|
|
231
|
-
});
|
|
232
|
-
};
|
|
278
|
+
}
|
|
233
279
|
|
|
234
280
|
|
|
235
281
|
/**
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
* @
|
|
239
|
-
* the server has been stopped.
|
|
282
|
+
* The default amount of time, in milliseconds, to wait for the server to
|
|
283
|
+
* start.
|
|
284
|
+
* @const {number}
|
|
240
285
|
*/
|
|
241
|
-
DriverService.
|
|
242
|
-
return promise.controlFlow().execute(this.kill.bind(this));
|
|
243
|
-
};
|
|
244
|
-
|
|
286
|
+
DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
|
|
245
287
|
|
|
246
288
|
|
|
247
289
|
/**
|
|
248
290
|
* Manages the life and death of the
|
|
249
291
|
* <a href="http://selenium-release.storage.googleapis.com/index.html">
|
|
250
292
|
* standalone Selenium server</a>.
|
|
251
|
-
*
|
|
252
|
-
* @param {string} jar Path to the Selenium server jar.
|
|
253
|
-
* @param {SeleniumServer.Options=} opt_options Configuration options for the
|
|
254
|
-
* server.
|
|
255
|
-
* @throws {Error} If the path to the Selenium jar is not specified or if an
|
|
256
|
-
* invalid port is specified.
|
|
257
|
-
* @constructor
|
|
258
|
-
* @extends {DriverService}
|
|
259
293
|
*/
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
294
|
+
class SeleniumServer extends DriverService {
|
|
295
|
+
/**
|
|
296
|
+
* @param {string} jar Path to the Selenium server jar.
|
|
297
|
+
* @param {SeleniumServer.Options=} opt_options Configuration options for the
|
|
298
|
+
* server.
|
|
299
|
+
* @throws {Error} If the path to the Selenium jar is not specified or if an
|
|
300
|
+
* invalid port is specified.
|
|
301
|
+
*/
|
|
302
|
+
constructor(jar, opt_options) {
|
|
303
|
+
if (!jar) {
|
|
304
|
+
throw Error('Path to the Selenium jar not specified');
|
|
305
|
+
}
|
|
264
306
|
|
|
265
|
-
|
|
307
|
+
var options = opt_options || {};
|
|
266
308
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
309
|
+
if (options.port < 0) {
|
|
310
|
+
throw Error('Port must be >= 0: ' + options.port);
|
|
311
|
+
}
|
|
270
312
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
313
|
+
var port = options.port || portprober.findFreePort();
|
|
314
|
+
var args = promise.when(options.jvmArgs || [], function(jvmArgs) {
|
|
315
|
+
return promise.when(options.args || [], function(args) {
|
|
316
|
+
return promise.when(port, function(port) {
|
|
317
|
+
return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args);
|
|
318
|
+
});
|
|
276
319
|
});
|
|
277
320
|
});
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
321
|
+
|
|
322
|
+
super('java', {
|
|
323
|
+
loopback: options.loopback,
|
|
324
|
+
port: port,
|
|
325
|
+
args: args,
|
|
326
|
+
path: '/wd/hub',
|
|
327
|
+
env: options.env,
|
|
328
|
+
stdio: options.stdio
|
|
329
|
+
});
|
|
330
|
+
}
|
|
288
331
|
}
|
|
289
|
-
util.inherits(SeleniumServer, DriverService);
|
|
290
332
|
|
|
291
333
|
|
|
292
334
|
/**
|
|
@@ -308,13 +350,14 @@ util.inherits(SeleniumServer, DriverService);
|
|
|
308
350
|
*
|
|
309
351
|
* @typedef {{
|
|
310
352
|
* loopback: (boolean|undefined),
|
|
311
|
-
* port: (number|!
|
|
312
|
-
* args: !(Array
|
|
313
|
-
* jvmArgs: (!Array
|
|
314
|
-
* !
|
|
353
|
+
* port: (number|!promise.Promise<number>),
|
|
354
|
+
* args: !(Array<string>|promise.Promise<!Array<string>>),
|
|
355
|
+
* jvmArgs: (!Array<string>|
|
|
356
|
+
* !promise.Promise<!Array<string>>|
|
|
315
357
|
* undefined),
|
|
316
|
-
* env: (!Object
|
|
317
|
-
* stdio: (string|!Array
|
|
358
|
+
* env: (!Object<string, string>|undefined),
|
|
359
|
+
* stdio: (string|!Array<string|number|!stream.Stream|null|undefined>|
|
|
360
|
+
* undefined)
|
|
318
361
|
* }}
|
|
319
362
|
*/
|
|
320
363
|
SeleniumServer.Options;
|
|
@@ -335,39 +378,47 @@ SeleniumServer.Options;
|
|
|
335
378
|
* Java Selenium server. The file detector will fail if used with a server that
|
|
336
379
|
* only supports standard WebDriver commands (such as the ChromeDriver).
|
|
337
380
|
*
|
|
338
|
-
* @constructor
|
|
339
|
-
* @extends {webdriver.FileDetector}
|
|
340
381
|
* @final
|
|
341
382
|
*/
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
383
|
+
class FileDetector extends input.FileDetector {
|
|
384
|
+
/**
|
|
385
|
+
* Prepares a `file` for use with the remote browser. If the provided path
|
|
386
|
+
* does not reference a normal file (i.e. it does not exist or is a
|
|
387
|
+
* directory), then the promise returned by this method will be resolved with
|
|
388
|
+
* the original file path. Otherwise, this method will upload the file to the
|
|
389
|
+
* remote server, which will return the file's path on the remote system so
|
|
390
|
+
* it may be referenced in subsequent commands.
|
|
391
|
+
*
|
|
392
|
+
* @override
|
|
393
|
+
*/
|
|
394
|
+
handleFile(driver, file) {
|
|
395
|
+
return promise.checkedNodeCall(fs.stat, file).then(function(stats) {
|
|
396
|
+
if (stats.isDirectory()) {
|
|
397
|
+
return file; // Not a valid file, return original input.
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
var zip = new AdmZip();
|
|
401
|
+
zip.addLocalFile(file);
|
|
402
|
+
// Stored compression, see https://en.wikipedia.org/wiki/Zip_(file_format)
|
|
403
|
+
zip.getEntries()[0].header.method = 0;
|
|
404
|
+
|
|
405
|
+
var command = new cmd.Command(cmd.Name.UPLOAD_FILE)
|
|
406
|
+
.setParameter('file', zip.toBuffer().toString('base64'));
|
|
407
|
+
return driver.schedule(command,
|
|
408
|
+
'remote.FileDetector.handleFile(' + file + ')');
|
|
409
|
+
}, function(err) {
|
|
410
|
+
if (err.code === 'ENOENT') {
|
|
411
|
+
return file; // Not a file; return original input.
|
|
412
|
+
}
|
|
413
|
+
throw err;
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
}
|
|
352
417
|
|
|
353
|
-
var zip = new AdmZip();
|
|
354
|
-
zip.addLocalFile(filePath);
|
|
355
|
-
zip.getEntries()[0].header.method = AdmConstants.STORED;
|
|
356
|
-
|
|
357
|
-
var command = new webdriver.Command(webdriver.CommandName.UPLOAD_FILE)
|
|
358
|
-
.setParameter('file', zip.toBuffer().toString('base64'));
|
|
359
|
-
return driver.schedule(command,
|
|
360
|
-
'remote.FileDetector.handleFile(' + filePath + ')');
|
|
361
|
-
}, function(err) {
|
|
362
|
-
if (err.code === 'ENOENT') {
|
|
363
|
-
return filePath; // Not a file; return original input.
|
|
364
|
-
}
|
|
365
|
-
throw err;
|
|
366
|
-
});
|
|
367
|
-
};
|
|
368
418
|
|
|
369
419
|
// PUBLIC API
|
|
370
420
|
|
|
371
421
|
exports.DriverService = DriverService;
|
|
372
422
|
exports.FileDetector = FileDetector;
|
|
373
423
|
exports.SeleniumServer = SeleniumServer;
|
|
424
|
+
exports.ServiceOptions = ServiceOptions; // Exported for API docs.
|