selenium-webdriver 2.47.0 → 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 +96 -0
- package/NOTICE +1 -1
- package/README.md +57 -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 +80 -114
- package/firefox/extension.js +10 -19
- package/firefox/index.js +175 -171
- package/firefox/profile.js +221 -239
- package/http/index.js +396 -77
- 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} +89 -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 +6 -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/promise.js +3093 -0
- package/lib/safari/client.js +697 -659
- package/lib/session.js +79 -0
- package/{test/promise_aplus_test.js → lib/symbols.js} +15 -25
- package/lib/test/build.js +4 -4
- package/lib/test/data/click_tests/disappearing_element.html +62 -0
- package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
- package/lib/test/data/click_tests/overlapping_elements.html +70 -0
- 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 +3 -1
- package/lib/test/data/selectPage.html +18 -2
- package/lib/test/data/simpleTest.html +1 -0
- package/lib/test/fileserver.js +3 -4
- package/lib/test/index.js +13 -4
- 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 +234 -219
- 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/firefox/firefox_test.js +24 -0
- package/test/http/http_test.js +354 -43
- 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/lib/promise_aplus_test.js +74 -0
- 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 -317
- 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 -91
- 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 -216
- package/docs/class_webdriver_WebElementPromise.html +0 -266
- 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 -18
- package/docs/class_webdriver_promise_ControlFlow.html +0 -109
- package/docs/class_webdriver_promise_Deferred.html +0 -84
- package/docs/class_webdriver_promise_Promise.html +0 -74
- 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 -123
- 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 -216
- package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -266
- 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 -67
- package/docs/module_selenium-webdriver_firefox_binary.html +0 -4
- package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -21
- package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -21
- 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 -162
- 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 -40
- 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 -165
- 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/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/testing/watchers.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 -1655
- 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 -139
- package/lib/goog/async/workqueue.js +0 -139
- package/lib/goog/base.js +0 -2547
- 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 -2995
- 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 -42
- package/lib/goog/dom/vendor.js +0 -96
- package/lib/goog/events/browserevent.js +0 -386
- 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 -233
- package/lib/goog/events/keycodes.js +0 -420
- 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 -105
- package/lib/goog/functions/functions.js +0 -332
- package/lib/goog/html/safehtml.js +0 -756
- 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 -431
- package/lib/goog/html/trustedresourceurl.js +0 -224
- package/lib/goog/html/uncheckedconversions.js +0 -231
- package/lib/goog/i18n/bidi.js +0 -908
- package/lib/goog/iter/iter.js +0 -1305
- package/lib/goog/json/json.js +0 -365
- 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 -327
- 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/math/box.js +0 -389
- 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 -1310
- package/lib/goog/promise/resolver.js +0 -48
- package/lib/goog/promise/thenable.js +0 -126
- package/lib/goog/reflect/reflect.js +0 -78
- package/lib/goog/string/const.js +0 -182
- package/lib/goog/string/string.js +0 -1565
- package/lib/goog/string/typedstring.js +0 -48
- package/lib/goog/structs/collection.js +0 -56
- package/lib/goog/structs/map.js +0 -456
- package/lib/goog/structs/set.js +0 -279
- package/lib/goog/structs/structs.js +0 -354
- package/lib/goog/style/style.js +0 -2054
- package/lib/goog/testing/asserts.js +0 -1265
- package/lib/goog/testing/events/events.js +0 -727
- package/lib/goog/testing/functionmock.js +0 -176
- 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 -617
- 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 -245
- 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 -1569
- package/lib/goog/testing/testrunner.js +0 -440
- package/lib/goog/testing/watchers.js +0 -46
- package/lib/goog/uri/uri.js +0 -1507
- package/lib/goog/uri/utils.js +0 -1116
- package/lib/goog/useragent/product.js +0 -175
- package/lib/goog/useragent/product_isversion.js +0 -143
- package/lib/goog/useragent/useragent.js +0 -538
- package/lib/webdriver/actionsequence.js +0 -356
- package/lib/webdriver/builder.js +0 -208
- package/lib/webdriver/capabilities.js +0 -411
- 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 -523
- 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/promise.js +0 -2609
- package/lib/webdriver/serializable.js +0 -41
- 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 -719
- package/lib/webdriver/test/promise_flow_test.js +0 -1957
- package/lib/webdriver/test/promise_generator_test.js +0 -251
- package/lib/webdriver/test/promise_test.js +0 -1981
- 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 -2492
- package/test/_base_test.js +0 -129
package/remote/index.js
CHANGED
|
@@ -17,17 +17,19 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const AdmZip = require('adm-zip'),
|
|
21
|
+
AdmConstants = require('adm-zip/util/constants'),
|
|
21
22
|
fs = require('fs'),
|
|
22
23
|
path = require('path'),
|
|
23
24
|
url = require('url'),
|
|
24
25
|
util = require('util');
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
webdriver = require('../'),
|
|
28
|
-
promise = require('../').promise,
|
|
29
|
-
httpUtil = require('../http/util'),
|
|
27
|
+
const httpUtil = require('../http/util'),
|
|
30
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'),
|
|
31
33
|
net = require('../net'),
|
|
32
34
|
portprober = require('../net/portprober');
|
|
33
35
|
|
|
@@ -38,6 +40,8 @@ var _base = require('../_base'),
|
|
|
38
40
|
*
|
|
39
41
|
* - `loopback` - Whether the service should only be accessed on this host's
|
|
40
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.
|
|
41
45
|
* - `port` - The port to start the server on (must be > 0). If the port is
|
|
42
46
|
* provided as a promise, the service will wait for the promise to resolve
|
|
43
47
|
* before starting.
|
|
@@ -51,11 +55,14 @@ var _base = require('../_base'),
|
|
|
51
55
|
* information, refer to the documentation of `child_process.spawn`.
|
|
52
56
|
*
|
|
53
57
|
* @typedef {{
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
58
|
+
* loopback: (boolean|undefined),
|
|
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)
|
|
59
66
|
* }}
|
|
60
67
|
*/
|
|
61
68
|
var ServiceOptions;
|
|
@@ -68,227 +75,235 @@ var ServiceOptions;
|
|
|
68
75
|
* https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol.
|
|
69
76
|
* Furthermore, the managed server should support multiple concurrent sessions,
|
|
70
77
|
* so that this class may be reused for multiple clients.
|
|
71
|
-
*
|
|
72
|
-
* @param {string} executable Path to the executable to run.
|
|
73
|
-
* @param {!ServiceOptions} options Configuration options for the service.
|
|
74
|
-
* @constructor
|
|
75
78
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
/** @private {string} */
|
|
79
|
-
this.executable_ = executable;
|
|
80
|
-
|
|
81
|
-
/** @private {boolean} */
|
|
82
|
-
this.loopbackOnly_ = !!options.loopback;
|
|
83
|
-
|
|
84
|
-
/** @private {(number|!webdriver.promise.Promise.<number>)} */
|
|
85
|
-
this.port_ = options.port;
|
|
86
|
-
|
|
79
|
+
class DriverService {
|
|
87
80
|
/**
|
|
88
|
-
* @
|
|
81
|
+
* @param {string} executable Path to the executable to run.
|
|
82
|
+
* @param {!ServiceOptions} options Configuration options for the service.
|
|
89
83
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
+
}
|
|
100
128
|
|
|
101
129
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* @
|
|
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.
|
|
105
133
|
*/
|
|
106
|
-
|
|
134
|
+
address() {
|
|
135
|
+
if (this.address_) {
|
|
136
|
+
return this.address_.promise;
|
|
137
|
+
}
|
|
138
|
+
throw Error('Server has not been started.');
|
|
139
|
+
}
|
|
107
140
|
|
|
108
141
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* @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.
|
|
113
145
|
*/
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* The default amount of time, in milliseconds, to wait for the server to
|
|
120
|
-
* start.
|
|
121
|
-
* @type {number}
|
|
122
|
-
*/
|
|
123
|
-
DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* @return {!webdriver.promise.Promise.<string>} A promise that resolves to
|
|
128
|
-
* the server's address.
|
|
129
|
-
* @throws {Error} If the server has not been started.
|
|
130
|
-
*/
|
|
131
|
-
DriverService.prototype.address = function() {
|
|
132
|
-
if (this.address_) {
|
|
133
|
-
return this.address_;
|
|
146
|
+
isRunning() {
|
|
147
|
+
return !!this.address_;
|
|
134
148
|
}
|
|
135
|
-
throw Error('Server has not been started.');
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Returns whether the underlying process is still running. This does not take
|
|
141
|
-
* into account whether the process is in the process of shutting down.
|
|
142
|
-
* @return {boolean} Whether the underlying service process is running.
|
|
143
|
-
*/
|
|
144
|
-
DriverService.prototype.isRunning = function() {
|
|
145
|
-
return !!this.address_;
|
|
146
|
-
};
|
|
147
|
-
|
|
148
149
|
|
|
149
|
-
/**
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
|
|
164
|
-
|
|
165
|
-
var self = this;
|
|
166
|
-
this.command_ = promise.defer();
|
|
167
|
-
this.address_ = promise.defer();
|
|
168
|
-
this.address_.fulfill(promise.when(this.port_, function(port) {
|
|
169
|
-
if (port <= 0) {
|
|
170
|
-
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;
|
|
171
162
|
}
|
|
172
|
-
return promise.when(self.args_, function(args) {
|
|
173
|
-
var command = exec(self.executable_, {
|
|
174
|
-
args: args,
|
|
175
|
-
env: self.env_,
|
|
176
|
-
stdio: self.stdio_
|
|
177
|
-
});
|
|
178
163
|
|
|
179
|
-
|
|
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
|
+
});
|
|
180
179
|
|
|
181
|
-
|
|
182
|
-
var error = result.code == null ?
|
|
183
|
-
Error('Server was killed with ' + result.signal) :
|
|
184
|
-
Error('Server terminated early with status ' + result.code);
|
|
185
|
-
self.address_.reject(error);
|
|
186
|
-
self.address_ = null;
|
|
187
|
-
self.command_ = null;
|
|
188
|
-
throw error;
|
|
189
|
-
});
|
|
180
|
+
self.command_.fulfill(command);
|
|
190
181
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
+
});
|
|
191
|
+
|
|
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
|
+
});
|
|
198
204
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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;
|
|
205
214
|
});
|
|
206
|
-
}).then(function() {
|
|
207
|
-
return serverUrl;
|
|
208
215
|
});
|
|
209
|
-
});
|
|
210
|
-
}));
|
|
216
|
+
}));
|
|
211
217
|
|
|
212
|
-
|
|
213
|
-
}
|
|
218
|
+
return this.address_.promise;
|
|
219
|
+
}
|
|
214
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
|
+
}
|
|
215
236
|
|
|
216
|
-
/**
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
if (!this.address_ || !this.command_) {
|
|
225
|
-
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));
|
|
226
245
|
}
|
|
227
|
-
|
|
228
|
-
command.kill('SIGTERM');
|
|
229
|
-
});
|
|
230
|
-
};
|
|
246
|
+
}
|
|
231
247
|
|
|
232
248
|
|
|
233
249
|
/**
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
* @
|
|
237
|
-
* the server has been stopped.
|
|
250
|
+
* The default amount of time, in milliseconds, to wait for the server to
|
|
251
|
+
* start.
|
|
252
|
+
* @const {number}
|
|
238
253
|
*/
|
|
239
|
-
DriverService.
|
|
240
|
-
return promise.controlFlow().execute(this.kill.bind(this));
|
|
241
|
-
};
|
|
242
|
-
|
|
254
|
+
DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
|
|
243
255
|
|
|
244
256
|
|
|
245
257
|
/**
|
|
246
258
|
* Manages the life and death of the
|
|
247
259
|
* <a href="http://selenium-release.storage.googleapis.com/index.html">
|
|
248
260
|
* standalone Selenium server</a>.
|
|
249
|
-
*
|
|
250
|
-
* @param {string} jar Path to the Selenium server jar.
|
|
251
|
-
* @param {SeleniumServer.Options=} opt_options Configuration options for the
|
|
252
|
-
* server.
|
|
253
|
-
* @throws {Error} If the path to the Selenium jar is not specified or if an
|
|
254
|
-
* invalid port is specified.
|
|
255
|
-
* @constructor
|
|
256
|
-
* @extends {DriverService}
|
|
257
261
|
*/
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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
|
+
}
|
|
262
274
|
|
|
263
|
-
|
|
275
|
+
var options = opt_options || {};
|
|
264
276
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
277
|
+
if (options.port < 0) {
|
|
278
|
+
throw Error('Port must be >= 0: ' + options.port);
|
|
279
|
+
}
|
|
268
280
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
+
});
|
|
274
287
|
});
|
|
275
288
|
});
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
+
}
|
|
285
299
|
}
|
|
286
|
-
util.inherits(SeleniumServer, DriverService);
|
|
287
300
|
|
|
288
301
|
|
|
289
302
|
/**
|
|
290
303
|
* Options for the Selenium server:
|
|
291
304
|
*
|
|
305
|
+
* - `loopback` - Whether the server should only be accessed on this host's
|
|
306
|
+
* loopback address.
|
|
292
307
|
* - `port` - The port to start the server on (must be > 0). If the port is
|
|
293
308
|
* provided as a promise, the service will wait for the promise to resolve
|
|
294
309
|
* before starting.
|
|
@@ -302,13 +317,15 @@ util.inherits(SeleniumServer, DriverService);
|
|
|
302
317
|
* information, refer to the documentation of `child_process.spawn`.
|
|
303
318
|
*
|
|
304
319
|
* @typedef {{
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
320
|
+
* loopback: (boolean|undefined),
|
|
321
|
+
* port: (number|!promise.Promise<number>),
|
|
322
|
+
* args: !(Array<string>|promise.Promise<!Array<string>>),
|
|
323
|
+
* jvmArgs: (!Array<string>|
|
|
324
|
+
* !promise.Promise<!Array<string>>|
|
|
309
325
|
* undefined),
|
|
310
|
-
* env: (!Object
|
|
311
|
-
* stdio: (string|!Array
|
|
326
|
+
* env: (!Object<string, string>|undefined),
|
|
327
|
+
* stdio: (string|!Array<string|number|!stream.Stream|null|undefined>|
|
|
328
|
+
* undefined)
|
|
312
329
|
* }}
|
|
313
330
|
*/
|
|
314
331
|
SeleniumServer.Options;
|
|
@@ -329,35 +346,33 @@ SeleniumServer.Options;
|
|
|
329
346
|
* Java Selenium server. The file detector will fail if used with a server that
|
|
330
347
|
* only supports standard WebDriver commands (such as the ChromeDriver).
|
|
331
348
|
*
|
|
332
|
-
* @constructor
|
|
333
|
-
* @extends {webdriver.FileDetector}
|
|
334
349
|
* @final
|
|
335
350
|
*/
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
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
|
+
}
|
|
349
375
|
|
|
350
|
-
var command = new webdriver.Command(webdriver.CommandName.UPLOAD_FILE)
|
|
351
|
-
.setParameter('file', zip.toBuffer().toString('base64'));
|
|
352
|
-
return driver.schedule(command,
|
|
353
|
-
'remote.FileDetector.handleFile(' + filePath + ')');
|
|
354
|
-
}, function(err) {
|
|
355
|
-
if (err.code === 'ENOENT') {
|
|
356
|
-
return filePath; // Not a file; return original input.
|
|
357
|
-
}
|
|
358
|
-
throw err;
|
|
359
|
-
});
|
|
360
|
-
};
|
|
361
376
|
|
|
362
377
|
// PUBLIC API
|
|
363
378
|
|