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.
- package/CHANGES.md +57 -0
- package/NOTICE +1 -1
- package/README.md +56 -6
- package/builder.js +375 -358
- package/chrome.js +549 -586
- package/edge.js +378 -0
- package/error.js +597 -5
- package/example/google_search_generator.js +2 -4
- package/example/logging.js +6 -2
- package/executors.js +11 -27
- package/firefox/binary.js +79 -87
- package/firefox/extension.js +10 -18
- package/firefox/index.js +173 -173
- package/firefox/profile.js +220 -240
- package/http/index.js +396 -79
- package/http/util.js +35 -35
- package/ie.js +288 -309
- package/index.js +34 -125
- package/io/exec.js +58 -39
- package/io/index.js +54 -48
- package/lib/actions.js +594 -0
- package/lib/by.js +276 -0
- package/lib/capabilities.js +404 -0
- package/lib/{webdriver/command.js → command.js} +88 -72
- package/lib/{webdriver/button.js → devmode.js} +13 -8
- package/lib/events.js +210 -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} +82 -2
- package/lib/logging.js +668 -0
- package/lib/{webdriver/promise.js → promise.js} +688 -644
- package/lib/session.js +79 -0
- package/lib/{webdriver/serializable.js → symbols.js} +11 -16
- 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/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 +428 -0
- package/lib/webdriver.js +2351 -0
- package/net/portprober.js +15 -11
- package/opera.js +295 -314
- package/package.json +6 -5
- package/phantomjs.js +135 -140
- package/proxy.js +6 -4
- package/remote/index.js +229 -221
- package/safari.js +319 -310
- package/test/chrome/options_test.js +11 -9
- package/test/element_finding_test.js +51 -13
- package/test/error_test.js +163 -0
- package/test/execute_script_test.js +1 -1
- package/test/http/http_test.js +317 -55
- package/test/http/util_test.js +25 -23
- package/test/io_test.js +6 -1
- package/test/lib/by_test.js +127 -0
- package/test/lib/capabilities_test.js +84 -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 +436 -0
- package/test/lib/webdriver_test.js +2207 -0
- package/test/page_loading_test.js +7 -9
- 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 +10 -0
- 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,18 +17,19 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const AdmZip = require('adm-zip'),
|
|
21
21
|
AdmConstants = require('adm-zip/util/constants'),
|
|
22
22
|
fs = require('fs'),
|
|
23
23
|
path = require('path'),
|
|
24
24
|
url = require('url'),
|
|
25
25
|
util = require('util');
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
webdriver = require('../'),
|
|
29
|
-
promise = require('../').promise,
|
|
30
|
-
httpUtil = require('../http/util'),
|
|
27
|
+
const httpUtil = require('../http/util'),
|
|
31
28
|
exec = require('../io/exec'),
|
|
29
|
+
cmd = require('../lib/command'),
|
|
30
|
+
input = require('../lib/input'),
|
|
31
|
+
promise = require('../lib/promise'),
|
|
32
|
+
webdriver = require('../lib/webdriver'),
|
|
32
33
|
net = require('../net'),
|
|
33
34
|
portprober = require('../net/portprober');
|
|
34
35
|
|
|
@@ -39,6 +40,8 @@ var _base = require('../_base'),
|
|
|
39
40
|
*
|
|
40
41
|
* - `loopback` - Whether the service should only be accessed on this host's
|
|
41
42
|
* loopback address.
|
|
43
|
+
* - `hostname` - The host name to access the server on. If this option is
|
|
44
|
+
* specified, the `loopback` option will be ignored.
|
|
42
45
|
* - `port` - The port to start the server on (must be > 0). If the port is
|
|
43
46
|
* provided as a promise, the service will wait for the promise to resolve
|
|
44
47
|
* before starting.
|
|
@@ -53,11 +56,13 @@ var _base = require('../_base'),
|
|
|
53
56
|
*
|
|
54
57
|
* @typedef {{
|
|
55
58
|
* loopback: (boolean|undefined),
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
59
|
+
* hostname: (string|undefined),
|
|
60
|
+
* port: (number|!promise.Promise<number>),
|
|
61
|
+
* args: !(Array<string>|promise.Promise<!Array<string>>),
|
|
62
|
+
* path: (string|undefined|null),
|
|
63
|
+
* env: (Object<string, string>|undefined),
|
|
64
|
+
* stdio: (string|!Array<string|number|!stream.Stream|null|undefined>|
|
|
65
|
+
* undefined)
|
|
61
66
|
* }}
|
|
62
67
|
*/
|
|
63
68
|
var ServiceOptions;
|
|
@@ -70,223 +75,228 @@ var ServiceOptions;
|
|
|
70
75
|
* https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol.
|
|
71
76
|
* Furthermore, the managed server should support multiple concurrent sessions,
|
|
72
77
|
* 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
|
|
77
78
|
*/
|
|
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
|
-
|
|
79
|
+
class DriverService {
|
|
89
80
|
/**
|
|
90
|
-
* @
|
|
81
|
+
* @param {string} executable Path to the executable to run.
|
|
82
|
+
* @param {!ServiceOptions} options Configuration options for the service.
|
|
91
83
|
*/
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
84
|
+
constructor(executable, options) {
|
|
85
|
+
/** @private {string} */
|
|
86
|
+
this.executable_ = executable;
|
|
87
|
+
|
|
88
|
+
/** @private {boolean} */
|
|
89
|
+
this.loopbackOnly_ = !!options.loopback;
|
|
90
|
+
|
|
91
|
+
/** @private {(string|undefined)} */
|
|
92
|
+
this.hostname_ = options.hostname;
|
|
93
|
+
|
|
94
|
+
/** @private {(number|!promise.Promise<number>)} */
|
|
95
|
+
this.port_ = options.port;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @private {!(Array<string>|promise.Promise<!Array<string>>)}
|
|
99
|
+
*/
|
|
100
|
+
this.args_ = options.args;
|
|
101
|
+
|
|
102
|
+
/** @private {string} */
|
|
103
|
+
this.path_ = options.path || '/';
|
|
104
|
+
|
|
105
|
+
/** @private {!Object<string, string>} */
|
|
106
|
+
this.env_ = options.env || process.env;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @private {(string|!Array<string|number|!stream.Stream|null|undefined>)}
|
|
110
|
+
*/
|
|
111
|
+
this.stdio_ = options.stdio || 'ignore';
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* A promise for the managed subprocess, or null if the server has not been
|
|
115
|
+
* started yet. This promise will never be rejected.
|
|
116
|
+
* @private {promise.Deferred<!exec.Command>}
|
|
117
|
+
*/
|
|
118
|
+
this.command_ = null;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Promise that resolves to the server's address or null if the server has
|
|
122
|
+
* not been started. This promise will be rejected if the server terminates
|
|
123
|
+
* before it starts accepting WebDriver requests.
|
|
124
|
+
* @private {promise.Deferred<string>}
|
|
125
|
+
*/
|
|
126
|
+
this.address_ = null;
|
|
127
|
+
}
|
|
102
128
|
|
|
103
129
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* @
|
|
130
|
+
* @return {!promise.Promise<string>} A promise that resolves to
|
|
131
|
+
* the server's address.
|
|
132
|
+
* @throws {Error} If the server has not been started.
|
|
107
133
|
*/
|
|
108
|
-
|
|
134
|
+
address() {
|
|
135
|
+
if (this.address_) {
|
|
136
|
+
return this.address_.promise;
|
|
137
|
+
}
|
|
138
|
+
throw Error('Server has not been started.');
|
|
139
|
+
}
|
|
109
140
|
|
|
110
141
|
/**
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* @private {promise.Promise.<string>}
|
|
142
|
+
* Returns whether the underlying process is still running. This does not take
|
|
143
|
+
* into account whether the process is in the process of shutting down.
|
|
144
|
+
* @return {boolean} Whether the underlying service process is running.
|
|
115
145
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* The default amount of time, in milliseconds, to wait for the server to
|
|
122
|
-
* start.
|
|
123
|
-
* @type {number}
|
|
124
|
-
*/
|
|
125
|
-
DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* @return {!webdriver.promise.Promise.<string>} A promise that resolves to
|
|
130
|
-
* the server's address.
|
|
131
|
-
* @throws {Error} If the server has not been started.
|
|
132
|
-
*/
|
|
133
|
-
DriverService.prototype.address = function() {
|
|
134
|
-
if (this.address_) {
|
|
135
|
-
return this.address_;
|
|
146
|
+
isRunning() {
|
|
147
|
+
return !!this.address_;
|
|
136
148
|
}
|
|
137
|
-
throw Error('Server has not been started.');
|
|
138
|
-
};
|
|
139
|
-
|
|
140
149
|
|
|
141
|
-
/**
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
* @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the
|
|
154
|
-
* server to start accepting requests. Defaults to 30 seconds.
|
|
155
|
-
* @return {!promise.Promise.<string>} A promise that will resolve
|
|
156
|
-
* to the server's base URL when it has started accepting requests. If the
|
|
157
|
-
* timeout expires before the server has started, the promise will be
|
|
158
|
-
* rejected.
|
|
159
|
-
*/
|
|
160
|
-
DriverService.prototype.start = function(opt_timeoutMs) {
|
|
161
|
-
if (this.address_) {
|
|
162
|
-
return this.address_;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
|
|
166
|
-
|
|
167
|
-
var self = this;
|
|
168
|
-
this.command_ = promise.defer();
|
|
169
|
-
this.address_ = promise.defer();
|
|
170
|
-
this.address_.fulfill(promise.when(this.port_, function(port) {
|
|
171
|
-
if (port <= 0) {
|
|
172
|
-
throw Error('Port must be > 0: ' + port);
|
|
150
|
+
/**
|
|
151
|
+
* Starts the server if it is not already running.
|
|
152
|
+
* @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the
|
|
153
|
+
* server to start accepting requests. Defaults to 30 seconds.
|
|
154
|
+
* @return {!promise.Promise<string>} A promise that will resolve
|
|
155
|
+
* to the server's base URL when it has started accepting requests. If the
|
|
156
|
+
* timeout expires before the server has started, the promise will be
|
|
157
|
+
* rejected.
|
|
158
|
+
*/
|
|
159
|
+
start(opt_timeoutMs) {
|
|
160
|
+
if (this.address_) {
|
|
161
|
+
return this.address_.promise;
|
|
173
162
|
}
|
|
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
163
|
|
|
181
|
-
|
|
164
|
+
var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
|
|
165
|
+
|
|
166
|
+
var self = this;
|
|
167
|
+
this.command_ = promise.defer();
|
|
168
|
+
this.address_ = promise.defer();
|
|
169
|
+
this.address_.fulfill(promise.when(this.port_, function(port) {
|
|
170
|
+
if (port <= 0) {
|
|
171
|
+
throw Error('Port must be > 0: ' + port);
|
|
172
|
+
}
|
|
173
|
+
return promise.when(self.args_, function(args) {
|
|
174
|
+
var command = exec(self.executable_, {
|
|
175
|
+
args: args,
|
|
176
|
+
env: self.env_,
|
|
177
|
+
stdio: self.stdio_
|
|
178
|
+
});
|
|
182
179
|
|
|
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
|
-
});
|
|
180
|
+
self.command_.fulfill(command);
|
|
192
181
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
182
|
+
var earlyTermination = command.result().then(function(result) {
|
|
183
|
+
var error = result.code == null ?
|
|
184
|
+
Error('Server was killed with ' + result.signal) :
|
|
185
|
+
Error('Server terminated early with status ' + result.code);
|
|
186
|
+
self.address_.reject(error);
|
|
187
|
+
self.address_ = null;
|
|
188
|
+
self.command_ = null;
|
|
189
|
+
throw error;
|
|
190
|
+
});
|
|
200
191
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
192
|
+
var hostname = self.hostname_;
|
|
193
|
+
if (!hostname) {
|
|
194
|
+
hostname = !self.loopbackOnly_ && net.getAddress()
|
|
195
|
+
|| net.getLoopbackAddress();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
var serverUrl = url.format({
|
|
199
|
+
protocol: 'http',
|
|
200
|
+
hostname: hostname,
|
|
201
|
+
port: port,
|
|
202
|
+
pathname: self.path_
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
return new promise.Promise(function(fulfill, reject) {
|
|
206
|
+
var ready = httpUtil.waitForServer(serverUrl, timeout)
|
|
207
|
+
.then(fulfill, reject);
|
|
208
|
+
earlyTermination.thenCatch(function(e) {
|
|
209
|
+
ready.cancel(/** @type {Error} */(e));
|
|
210
|
+
reject(Error(e.message));
|
|
211
|
+
});
|
|
212
|
+
}).then(function() {
|
|
213
|
+
return serverUrl;
|
|
207
214
|
});
|
|
208
|
-
}).then(function() {
|
|
209
|
-
return serverUrl;
|
|
210
215
|
});
|
|
211
|
-
});
|
|
212
|
-
}));
|
|
216
|
+
}));
|
|
213
217
|
|
|
214
|
-
|
|
215
|
-
}
|
|
218
|
+
return this.address_.promise;
|
|
219
|
+
}
|
|
216
220
|
|
|
221
|
+
/**
|
|
222
|
+
* Stops the service if it is not currently running. This function will kill
|
|
223
|
+
* the server immediately. To synchronize with the active control flow, use
|
|
224
|
+
* {@link #stop()}.
|
|
225
|
+
* @return {!promise.Promise} A promise that will be resolved when
|
|
226
|
+
* the server has been stopped.
|
|
227
|
+
*/
|
|
228
|
+
kill() {
|
|
229
|
+
if (!this.address_ || !this.command_) {
|
|
230
|
+
return promise.fulfilled(); // Not currently running.
|
|
231
|
+
}
|
|
232
|
+
return this.command_.promise.then(function(command) {
|
|
233
|
+
command.kill('SIGTERM');
|
|
234
|
+
});
|
|
235
|
+
}
|
|
217
236
|
|
|
218
|
-
/**
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (!this.address_ || !this.command_) {
|
|
227
|
-
return promise.fulfilled(); // Not currently running.
|
|
237
|
+
/**
|
|
238
|
+
* Schedules a task in the current control flow to stop the server if it is
|
|
239
|
+
* currently running.
|
|
240
|
+
* @return {!promise.Promise} A promise that will be resolved when
|
|
241
|
+
* the server has been stopped.
|
|
242
|
+
*/
|
|
243
|
+
stop() {
|
|
244
|
+
return promise.controlFlow().execute(this.kill.bind(this));
|
|
228
245
|
}
|
|
229
|
-
|
|
230
|
-
command.kill('SIGTERM');
|
|
231
|
-
});
|
|
232
|
-
};
|
|
246
|
+
}
|
|
233
247
|
|
|
234
248
|
|
|
235
249
|
/**
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
* @
|
|
239
|
-
* the server has been stopped.
|
|
250
|
+
* The default amount of time, in milliseconds, to wait for the server to
|
|
251
|
+
* start.
|
|
252
|
+
* @const {number}
|
|
240
253
|
*/
|
|
241
|
-
DriverService.
|
|
242
|
-
return promise.controlFlow().execute(this.kill.bind(this));
|
|
243
|
-
};
|
|
244
|
-
|
|
254
|
+
DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
|
|
245
255
|
|
|
246
256
|
|
|
247
257
|
/**
|
|
248
258
|
* Manages the life and death of the
|
|
249
259
|
* <a href="http://selenium-release.storage.googleapis.com/index.html">
|
|
250
260
|
* 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
261
|
*/
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
class SeleniumServer extends DriverService {
|
|
263
|
+
/**
|
|
264
|
+
* @param {string} jar Path to the Selenium server jar.
|
|
265
|
+
* @param {SeleniumServer.Options=} opt_options Configuration options for the
|
|
266
|
+
* server.
|
|
267
|
+
* @throws {Error} If the path to the Selenium jar is not specified or if an
|
|
268
|
+
* invalid port is specified.
|
|
269
|
+
*/
|
|
270
|
+
constructor(jar, opt_options) {
|
|
271
|
+
if (!jar) {
|
|
272
|
+
throw Error('Path to the Selenium jar not specified');
|
|
273
|
+
}
|
|
264
274
|
|
|
265
|
-
|
|
275
|
+
var options = opt_options || {};
|
|
266
276
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
277
|
+
if (options.port < 0) {
|
|
278
|
+
throw Error('Port must be >= 0: ' + options.port);
|
|
279
|
+
}
|
|
270
280
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
281
|
+
var port = options.port || portprober.findFreePort();
|
|
282
|
+
var args = promise.when(options.jvmArgs || [], function(jvmArgs) {
|
|
283
|
+
return promise.when(options.args || [], function(args) {
|
|
284
|
+
return promise.when(port, function(port) {
|
|
285
|
+
return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args);
|
|
286
|
+
});
|
|
276
287
|
});
|
|
277
288
|
});
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
289
|
+
|
|
290
|
+
super('java', {
|
|
291
|
+
loopback: options.loopback,
|
|
292
|
+
port: port,
|
|
293
|
+
args: args,
|
|
294
|
+
path: '/wd/hub',
|
|
295
|
+
env: options.env,
|
|
296
|
+
stdio: options.stdio
|
|
297
|
+
});
|
|
298
|
+
}
|
|
288
299
|
}
|
|
289
|
-
util.inherits(SeleniumServer, DriverService);
|
|
290
300
|
|
|
291
301
|
|
|
292
302
|
/**
|
|
@@ -308,13 +318,14 @@ util.inherits(SeleniumServer, DriverService);
|
|
|
308
318
|
*
|
|
309
319
|
* @typedef {{
|
|
310
320
|
* loopback: (boolean|undefined),
|
|
311
|
-
* port: (number|!
|
|
312
|
-
* args: !(Array
|
|
313
|
-
* jvmArgs: (!Array
|
|
314
|
-
* !
|
|
321
|
+
* port: (number|!promise.Promise<number>),
|
|
322
|
+
* args: !(Array<string>|promise.Promise<!Array<string>>),
|
|
323
|
+
* jvmArgs: (!Array<string>|
|
|
324
|
+
* !promise.Promise<!Array<string>>|
|
|
315
325
|
* undefined),
|
|
316
|
-
* env: (!Object
|
|
317
|
-
* stdio: (string|!Array
|
|
326
|
+
* env: (!Object<string, string>|undefined),
|
|
327
|
+
* stdio: (string|!Array<string|number|!stream.Stream|null|undefined>|
|
|
328
|
+
* undefined)
|
|
318
329
|
* }}
|
|
319
330
|
*/
|
|
320
331
|
SeleniumServer.Options;
|
|
@@ -335,36 +346,33 @@ SeleniumServer.Options;
|
|
|
335
346
|
* Java Selenium server. The file detector will fail if used with a server that
|
|
336
347
|
* only supports standard WebDriver commands (such as the ChromeDriver).
|
|
337
348
|
*
|
|
338
|
-
* @constructor
|
|
339
|
-
* @extends {webdriver.FileDetector}
|
|
340
349
|
* @final
|
|
341
350
|
*/
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
351
|
+
class FileDetector extends input.FileDetector {
|
|
352
|
+
/** @override */
|
|
353
|
+
handleFile(driver, filePath) {
|
|
354
|
+
return promise.checkedNodeCall(fs.stat, filePath).then(function(stats) {
|
|
355
|
+
if (stats.isDirectory()) {
|
|
356
|
+
throw TypeError('Uploading directories is not supported: ' + filePath);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
var zip = new AdmZip();
|
|
360
|
+
zip.addLocalFile(filePath);
|
|
361
|
+
zip.getEntries()[0].header.method = AdmConstants.STORED;
|
|
362
|
+
|
|
363
|
+
var command = new cmd.Command(cmd.Name.UPLOAD_FILE)
|
|
364
|
+
.setParameter('file', zip.toBuffer().toString('base64'));
|
|
365
|
+
return driver.schedule(command,
|
|
366
|
+
'remote.FileDetector.handleFile(' + filePath + ')');
|
|
367
|
+
}, function(err) {
|
|
368
|
+
if (err.code === 'ENOENT') {
|
|
369
|
+
return filePath; // Not a file; return original input.
|
|
370
|
+
}
|
|
371
|
+
throw err;
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
352
375
|
|
|
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
376
|
|
|
369
377
|
// PUBLIC API
|
|
370
378
|
|