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/firefox/profile.js
CHANGED
|
@@ -22,33 +22,32 @@
|
|
|
22
22
|
|
|
23
23
|
'use strict';
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
const AdmZip = require('adm-zip'),
|
|
26
26
|
AdmConstants = require('adm-zip/util/constants'),
|
|
27
27
|
fs = require('fs'),
|
|
28
28
|
path = require('path'),
|
|
29
|
-
util = require('util'),
|
|
30
29
|
vm = require('vm');
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
promise = require('
|
|
34
|
-
|
|
31
|
+
const isDevMode = require('../lib/devmode'),
|
|
32
|
+
promise = require('../lib/promise'),
|
|
33
|
+
Symbols = require('../lib/symbols'),
|
|
35
34
|
io = require('../io'),
|
|
36
35
|
extension = require('./extension');
|
|
37
36
|
|
|
38
37
|
|
|
39
38
|
/** @const */
|
|
40
|
-
|
|
39
|
+
const WEBDRIVER_PREFERENCES_PATH = isDevMode
|
|
41
40
|
? path.join(__dirname, '../../../firefox-driver/webdriver.json')
|
|
42
41
|
: path.join(__dirname, '../lib/firefox/webdriver.json');
|
|
43
42
|
|
|
44
43
|
/** @const */
|
|
45
|
-
|
|
44
|
+
const WEBDRIVER_EXTENSION_PATH = isDevMode
|
|
46
45
|
? path.join(__dirname,
|
|
47
46
|
'../../../../build/javascript/firefox-driver/webdriver.xpi')
|
|
48
47
|
: path.join(__dirname, '../lib/firefox/webdriver.xpi');
|
|
49
48
|
|
|
50
49
|
/** @const */
|
|
51
|
-
|
|
50
|
+
const WEBDRIVER_EXTENSION_NAME = 'fxdriver@googlecode.com';
|
|
52
51
|
|
|
53
52
|
|
|
54
53
|
|
|
@@ -61,8 +60,9 @@ var defaultPreferences = null;
|
|
|
61
60
|
*/
|
|
62
61
|
function getDefaultPreferences() {
|
|
63
62
|
if (!defaultPreferences) {
|
|
64
|
-
var contents =
|
|
65
|
-
|
|
63
|
+
var contents = /** @type {string} */(
|
|
64
|
+
fs.readFileSync(WEBDRIVER_PREFERENCES_PATH, 'utf8'));
|
|
65
|
+
defaultPreferences = /** @type {!Object} */(JSON.parse(contents));
|
|
66
66
|
}
|
|
67
67
|
return defaultPreferences;
|
|
68
68
|
}
|
|
@@ -71,7 +71,7 @@ function getDefaultPreferences() {
|
|
|
71
71
|
/**
|
|
72
72
|
* Parses a user.js file in a Firefox profile directory.
|
|
73
73
|
* @param {string} f Path to the file to parse.
|
|
74
|
-
* @return {!promise.Promise
|
|
74
|
+
* @return {!promise.Promise<!Object>} A promise for the parsed preferences as
|
|
75
75
|
* a JSON object. If the file does not exist, an empty object will be
|
|
76
76
|
* returned.
|
|
77
77
|
*/
|
|
@@ -95,38 +95,27 @@ function loadUserPrefs(f) {
|
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
97
|
|
|
98
|
-
vm.runInContext(contents, context, f);
|
|
98
|
+
vm.runInContext(/** @type {string} */(contents), context, f);
|
|
99
99
|
done.fulfill(prefs);
|
|
100
100
|
});
|
|
101
101
|
return done.promise;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
|
|
105
|
-
/**
|
|
106
|
-
* Copies the properties of one object into another.
|
|
107
|
-
* @param {!Object} a The destination object.
|
|
108
|
-
* @param {!Object} b The source object to apply as a mixin.
|
|
109
|
-
*/
|
|
110
|
-
function mixin(a, b) {
|
|
111
|
-
Object.keys(b).forEach(function(key) {
|
|
112
|
-
a[key] = b[key];
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
105
|
|
|
117
106
|
/**
|
|
118
|
-
* @param {!Object}
|
|
107
|
+
* @param {!Object} prefs The default preferences to write. Will be
|
|
119
108
|
* overridden by user.js preferences in the template directory and the
|
|
120
109
|
* frozen preferences required by WebDriver.
|
|
121
110
|
* @param {string} dir Path to the directory write the file to.
|
|
122
|
-
* @return {!promise.Promise
|
|
111
|
+
* @return {!promise.Promise<string>} A promise for the profile directory,
|
|
123
112
|
* to be fulfilled when user preferences have been written.
|
|
124
113
|
*/
|
|
125
114
|
function writeUserPrefs(prefs, dir) {
|
|
126
115
|
var userPrefs = path.join(dir, 'user.js');
|
|
127
116
|
return loadUserPrefs(userPrefs).then(function(overrides) {
|
|
128
|
-
|
|
129
|
-
|
|
117
|
+
Object.assign(prefs, overrides);
|
|
118
|
+
Object.assign(prefs, getDefaultPreferences()['frozen']);
|
|
130
119
|
|
|
131
120
|
var contents = Object.keys(prefs).map(function(key) {
|
|
132
121
|
return 'user_pref(' + JSON.stringify(key) + ', ' +
|
|
@@ -151,54 +140,48 @@ function writeUserPrefs(prefs, dir) {
|
|
|
151
140
|
* @param {string} dir The profile directory to install to.
|
|
152
141
|
* @param {boolean=} opt_excludeWebDriverExt Whether to skip installation of
|
|
153
142
|
* the default WebDriver extension.
|
|
154
|
-
* @return {!
|
|
143
|
+
* @return {!Promise<string>} A promise for the main profile directory
|
|
155
144
|
* once all extensions have been installed.
|
|
156
145
|
*/
|
|
157
146
|
function installExtensions(extensions, dir, opt_excludeWebDriverExt) {
|
|
158
147
|
var hasWebDriver = !!opt_excludeWebDriverExt;
|
|
159
148
|
var next = 0;
|
|
160
149
|
var extensionDir = path.join(dir, 'extensions');
|
|
161
|
-
var done = promise.defer();
|
|
162
|
-
|
|
163
|
-
return io.exists(extensionDir).then(function(exists) {
|
|
164
|
-
if (!exists) {
|
|
165
|
-
return promise.checkedNodeCall(fs.mkdir, extensionDir);
|
|
166
|
-
}
|
|
167
|
-
}).then(function() {
|
|
168
|
-
installNext();
|
|
169
|
-
return done.promise;
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
function installNext() {
|
|
173
|
-
if (!done.isPending()) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
150
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
151
|
+
return new Promise(function(fulfill, reject) {
|
|
152
|
+
io.exists(extensionDir).then(function(exists) {
|
|
153
|
+
if (!exists) {
|
|
154
|
+
return promise.checkedNodeCall(fs.mkdir, extensionDir);
|
|
155
|
+
}
|
|
156
|
+
}).then(installNext);
|
|
157
|
+
|
|
158
|
+
function installNext() {
|
|
159
|
+
if (next >= extensions.length) {
|
|
160
|
+
if (hasWebDriver) {
|
|
161
|
+
fulfill(dir);
|
|
162
|
+
} else {
|
|
163
|
+
install(WEBDRIVER_EXTENSION_PATH);
|
|
164
|
+
}
|
|
180
165
|
} else {
|
|
181
|
-
install(
|
|
166
|
+
install(extensions[next++]);
|
|
182
167
|
}
|
|
183
|
-
} else {
|
|
184
|
-
install(extensions[next++]);
|
|
185
168
|
}
|
|
186
|
-
}
|
|
187
169
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
170
|
+
function install(ext) {
|
|
171
|
+
extension.install(ext, extensionDir).then(function(id) {
|
|
172
|
+
hasWebDriver = hasWebDriver || (id === WEBDRIVER_EXTENSION_NAME);
|
|
173
|
+
installNext();
|
|
174
|
+
}, reject);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
194
177
|
}
|
|
195
178
|
|
|
196
179
|
|
|
197
180
|
/**
|
|
198
181
|
* Decodes a base64 encoded profile.
|
|
199
182
|
* @param {string} data The base64 encoded string.
|
|
200
|
-
* @return {!
|
|
201
|
-
*
|
|
183
|
+
* @return {!Promise<string>} A promise for the path to the decoded profile
|
|
184
|
+
* directory.
|
|
202
185
|
*/
|
|
203
186
|
function decode(data) {
|
|
204
187
|
return io.tmpFile().then(function(file) {
|
|
@@ -219,210 +202,207 @@ function decode(data) {
|
|
|
219
202
|
* Models a Firefox proifle directory for use with the FirefoxDriver. The
|
|
220
203
|
* {@code Proifle} directory uses an in-memory model until {@link #writeToDisk}
|
|
221
204
|
* is called.
|
|
222
|
-
* @param {string=} opt_dir Path to an existing Firefox profile directory to
|
|
223
|
-
* use a template for this profile. If not specified, a blank profile will
|
|
224
|
-
* be used.
|
|
225
|
-
* @constructor
|
|
226
|
-
* @extends {Serializable.<string>}
|
|
227
205
|
*/
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Registers an extension to be included with this profile.
|
|
254
|
-
* @param {string} extension Path to the extension to include, as either an
|
|
255
|
-
* unpacked extension directory or the path to a xpi file.
|
|
256
|
-
*/
|
|
257
|
-
Profile.prototype.addExtension = function(extension) {
|
|
258
|
-
this.extensions_.push(extension);
|
|
259
|
-
};
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Sets a desired preference for this profile.
|
|
264
|
-
* @param {string} key The preference key.
|
|
265
|
-
* @param {(string|number|boolean)} value The preference value.
|
|
266
|
-
* @throws {Error} If attempting to set a frozen preference.
|
|
267
|
-
*/
|
|
268
|
-
Profile.prototype.setPreference = function(key, value) {
|
|
269
|
-
var frozen = getDefaultPreferences()['frozen'];
|
|
270
|
-
if (frozen.hasOwnProperty(key) && frozen[key] !== value) {
|
|
271
|
-
throw Error('You may not set ' + key + '=' + JSON.stringify(value)
|
|
272
|
-
+ '; value is frozen for proper WebDriver functionality ('
|
|
273
|
-
+ key + '=' + JSON.stringify(frozen[key]) + ')');
|
|
206
|
+
class Profile {
|
|
207
|
+
/**
|
|
208
|
+
* @param {string=} opt_dir Path to an existing Firefox profile directory to
|
|
209
|
+
* use a template for this profile. If not specified, a blank profile will
|
|
210
|
+
* be used.
|
|
211
|
+
*/
|
|
212
|
+
constructor(opt_dir) {
|
|
213
|
+
/** @private {!Object} */
|
|
214
|
+
this.preferences_ = {};
|
|
215
|
+
|
|
216
|
+
Object.assign(this.preferences_, getDefaultPreferences()['mutable']);
|
|
217
|
+
Object.assign(this.preferences_, getDefaultPreferences()['frozen']);
|
|
218
|
+
|
|
219
|
+
/** @private {boolean} */
|
|
220
|
+
this.nativeEventsEnabled_ = true;
|
|
221
|
+
|
|
222
|
+
/** @private {(string|undefined)} */
|
|
223
|
+
this.template_ = opt_dir;
|
|
224
|
+
|
|
225
|
+
/** @private {number} */
|
|
226
|
+
this.port_ = 0;
|
|
227
|
+
|
|
228
|
+
/** @private {!Array<string>} */
|
|
229
|
+
this.extensions_ = [];
|
|
274
230
|
}
|
|
275
|
-
this.preferences_[key] = value;
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Returns the currently configured value of a profile preference. This does
|
|
281
|
-
* not include any defaults defined in the profile's template directory user.js
|
|
282
|
-
* file (if a template were specified on construction).
|
|
283
|
-
* @param {string} key The desired preference.
|
|
284
|
-
* @return {(string|number|boolean|undefined)} The current value of the
|
|
285
|
-
* requested preference.
|
|
286
|
-
*/
|
|
287
|
-
Profile.prototype.getPreference = function(key) {
|
|
288
|
-
return this.preferences_[key];
|
|
289
|
-
};
|
|
290
231
|
|
|
232
|
+
/**
|
|
233
|
+
* Registers an extension to be included with this profile.
|
|
234
|
+
* @param {string} extension Path to the extension to include, as either an
|
|
235
|
+
* unpacked extension directory or the path to a xpi file.
|
|
236
|
+
*/
|
|
237
|
+
addExtension(extension) {
|
|
238
|
+
this.extensions_.push(extension);
|
|
239
|
+
}
|
|
291
240
|
|
|
292
|
-
/**
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
this.port_ = port;
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* @return {boolean} Whether the FirefoxDriver is configured to automatically
|
|
313
|
-
* accept untrusted SSL certificates.
|
|
314
|
-
*/
|
|
315
|
-
Profile.prototype.acceptUntrustedCerts = function() {
|
|
316
|
-
return !!this.preferences_['webdriver_accept_untrusted_certs'];
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Sets whether the FirefoxDriver should automatically accept untrusted SSL
|
|
322
|
-
* certificates.
|
|
323
|
-
* @param {boolean} value .
|
|
324
|
-
*/
|
|
325
|
-
Profile.prototype.setAcceptUntrustedCerts = function(value) {
|
|
326
|
-
this.preferences_['webdriver_accept_untrusted_certs'] = !!value;
|
|
327
|
-
};
|
|
328
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Sets a desired preference for this profile.
|
|
243
|
+
* @param {string} key The preference key.
|
|
244
|
+
* @param {(string|number|boolean)} value The preference value.
|
|
245
|
+
* @throws {Error} If attempting to set a frozen preference.
|
|
246
|
+
*/
|
|
247
|
+
setPreference(key, value) {
|
|
248
|
+
var frozen = getDefaultPreferences()['frozen'];
|
|
249
|
+
if (frozen.hasOwnProperty(key) && frozen[key] !== value) {
|
|
250
|
+
throw Error('You may not set ' + key + '=' + JSON.stringify(value)
|
|
251
|
+
+ '; value is frozen for proper WebDriver functionality ('
|
|
252
|
+
+ key + '=' + JSON.stringify(frozen[key]) + ')');
|
|
253
|
+
}
|
|
254
|
+
this.preferences_[key] = value;
|
|
255
|
+
}
|
|
329
256
|
|
|
330
|
-
/**
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
257
|
+
/**
|
|
258
|
+
* Returns the currently configured value of a profile preference. This does
|
|
259
|
+
* not include any defaults defined in the profile's template directory user.js
|
|
260
|
+
* file (if a template were specified on construction).
|
|
261
|
+
* @param {string} key The desired preference.
|
|
262
|
+
* @return {(string|number|boolean|undefined)} The current value of the
|
|
263
|
+
* requested preference.
|
|
264
|
+
*/
|
|
265
|
+
getPreference(key) {
|
|
266
|
+
return this.preferences_[key];
|
|
267
|
+
}
|
|
337
268
|
|
|
269
|
+
/**
|
|
270
|
+
* Specifies which host the driver should listen for commands on. If not
|
|
271
|
+
* specified, the driver will default to "localhost". This option should be
|
|
272
|
+
* specified when "localhost" is not mapped to the loopback address
|
|
273
|
+
* (127.0.0.1) in `/etc/hosts`.
|
|
274
|
+
*
|
|
275
|
+
* @param {string} host the host the driver should listen for commands on
|
|
276
|
+
*/
|
|
277
|
+
setHost(host) {
|
|
278
|
+
this.preferences_['webdriver_firefox_allowed_hosts'] = host;
|
|
279
|
+
}
|
|
338
280
|
|
|
339
|
-
/**
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
281
|
+
/**
|
|
282
|
+
* @return {number} The port this profile is currently configured to use, or
|
|
283
|
+
* 0 if the port will be selected at random when the profile is written
|
|
284
|
+
* to disk.
|
|
285
|
+
*/
|
|
286
|
+
getPort() {
|
|
287
|
+
return this.port_;
|
|
288
|
+
}
|
|
346
289
|
|
|
290
|
+
/**
|
|
291
|
+
* Sets the port to use for the WebDriver extension loaded by this profile.
|
|
292
|
+
* @param {number} port The desired port, or 0 to use any free port.
|
|
293
|
+
*/
|
|
294
|
+
setPort(port) {
|
|
295
|
+
this.port_ = port;
|
|
296
|
+
}
|
|
347
297
|
|
|
348
|
-
/**
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
}
|
|
298
|
+
/**
|
|
299
|
+
* @return {boolean} Whether the FirefoxDriver is configured to automatically
|
|
300
|
+
* accept untrusted SSL certificates.
|
|
301
|
+
*/
|
|
302
|
+
acceptUntrustedCerts() {
|
|
303
|
+
return !!this.preferences_['webdriver_accept_untrusted_certs'];
|
|
304
|
+
}
|
|
355
305
|
|
|
306
|
+
/**
|
|
307
|
+
* Sets whether the FirefoxDriver should automatically accept untrusted SSL
|
|
308
|
+
* certificates.
|
|
309
|
+
* @param {boolean} value .
|
|
310
|
+
*/
|
|
311
|
+
setAcceptUntrustedCerts(value) {
|
|
312
|
+
this.preferences_['webdriver_accept_untrusted_certs'] = !!value;
|
|
313
|
+
}
|
|
356
314
|
|
|
357
|
-
/**
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
}
|
|
315
|
+
/**
|
|
316
|
+
* Sets whether to assume untrusted certificates come from untrusted issuers.
|
|
317
|
+
* @param {boolean} value .
|
|
318
|
+
*/
|
|
319
|
+
setAssumeUntrustedCertIssuer(value) {
|
|
320
|
+
this.preferences_['webdriver_assume_untrusted_issuer'] = !!value;
|
|
321
|
+
}
|
|
364
322
|
|
|
323
|
+
/**
|
|
324
|
+
* @return {boolean} Whether to assume untrusted certs come from untrusted
|
|
325
|
+
* issuers.
|
|
326
|
+
*/
|
|
327
|
+
assumeUntrustedCertIssuer() {
|
|
328
|
+
return !!this.preferences_['webdriver_assume_untrusted_issuer'];
|
|
329
|
+
}
|
|
365
330
|
|
|
366
|
-
/**
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
* @return {!promise.Promise.<string>} A promise for the path to the new
|
|
373
|
-
* profile directory.
|
|
374
|
-
*/
|
|
375
|
-
Profile.prototype.writeToDisk = function(opt_excludeWebDriverExt) {
|
|
376
|
-
var profileDir = io.tmpDir();
|
|
377
|
-
if (this.template_) {
|
|
378
|
-
profileDir = profileDir.then(function(dir) {
|
|
379
|
-
return io.copyDir(
|
|
380
|
-
this.template_, dir, /(parent\.lock|lock|\.parentlock)/);
|
|
381
|
-
}.bind(this));
|
|
331
|
+
/**
|
|
332
|
+
* Sets whether to use native events with this profile.
|
|
333
|
+
* @param {boolean} enabled .
|
|
334
|
+
*/
|
|
335
|
+
setNativeEventsEnabled(enabled) {
|
|
336
|
+
this.nativeEventsEnabled_ = enabled;
|
|
382
337
|
}
|
|
383
338
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
339
|
+
/**
|
|
340
|
+
* Returns whether native events are enabled in this profile.
|
|
341
|
+
* @return {boolean} .
|
|
342
|
+
*/
|
|
343
|
+
nativeEventsEnabled() {
|
|
344
|
+
return this.nativeEventsEnabled_;
|
|
345
|
+
}
|
|
387
346
|
|
|
388
|
-
|
|
389
|
-
|
|
347
|
+
/**
|
|
348
|
+
* Writes this profile to disk.
|
|
349
|
+
* @param {boolean=} opt_excludeWebDriverExt Whether to exclude the WebDriver
|
|
350
|
+
* extension from the generated profile. Used to reduce the size of an
|
|
351
|
+
* {@link #encode() encoded profile} since the server will always install
|
|
352
|
+
* the extension itself.
|
|
353
|
+
* @return {!Promise<string>} A promise for the path to the new profile
|
|
354
|
+
* directory.
|
|
355
|
+
*/
|
|
356
|
+
writeToDisk(opt_excludeWebDriverExt) {
|
|
357
|
+
var profileDir = io.tmpDir();
|
|
358
|
+
if (this.template_) {
|
|
359
|
+
profileDir = profileDir.then(function(dir) {
|
|
360
|
+
return io.copyDir(
|
|
361
|
+
/** @type {string} */(this.template_),
|
|
362
|
+
dir, /(parent\.lock|lock|\.parentlock)/);
|
|
363
|
+
}.bind(this));
|
|
364
|
+
}
|
|
390
365
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
return installExtensions(extensions, dir, !!opt_excludeWebDriverExt);
|
|
395
|
-
});
|
|
396
|
-
};
|
|
366
|
+
// Freeze preferences for async operations.
|
|
367
|
+
var prefs = {};
|
|
368
|
+
Object.assign(prefs, this.preferences_);
|
|
397
369
|
|
|
370
|
+
// Freeze extensions for async operations.
|
|
371
|
+
var extensions = this.extensions_.concat();
|
|
398
372
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
Profile.prototype.encode = function() {
|
|
404
|
-
return this.writeToDisk(true).then(function(dir) {
|
|
405
|
-
var zip = new AdmZip();
|
|
406
|
-
zip.addLocalFolder(dir, '');
|
|
407
|
-
zip.getEntries()[0].header.method = AdmConstants.STORED;
|
|
408
|
-
return io.tmpFile().then(function(file) {
|
|
409
|
-
zip.writeZip(file); // Sync! Why oh why :-(
|
|
410
|
-
return promise.checkedNodeCall(fs.readFile, file);
|
|
373
|
+
return profileDir.then(function(dir) {
|
|
374
|
+
return writeUserPrefs(prefs, dir);
|
|
375
|
+
}).then(function(dir) {
|
|
376
|
+
return installExtensions(extensions, dir, !!opt_excludeWebDriverExt);
|
|
411
377
|
});
|
|
412
|
-
}
|
|
413
|
-
return new Buffer(data).toString('base64');
|
|
414
|
-
});
|
|
415
|
-
};
|
|
378
|
+
}
|
|
416
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Encodes this profile as a zipped, base64 encoded directory.
|
|
382
|
+
* @return {!Promise<string>} A promise for the encoded profile.
|
|
383
|
+
*/
|
|
384
|
+
encode() {
|
|
385
|
+
return this.writeToDisk(true).then(function(dir) {
|
|
386
|
+
var zip = new AdmZip();
|
|
387
|
+
zip.addLocalFolder(dir, '');
|
|
388
|
+
zip.getEntries()[0].header.method = AdmConstants.STORED;
|
|
389
|
+
return io.tmpFile().then(function(file) {
|
|
390
|
+
zip.writeZip(file); // Sync! Why oh why :-(
|
|
391
|
+
return promise.checkedNodeCall(fs.readFile, file);
|
|
392
|
+
});
|
|
393
|
+
}).then(function(data) {
|
|
394
|
+
return new Buffer(data).toString('base64');
|
|
395
|
+
});
|
|
396
|
+
}
|
|
417
397
|
|
|
418
|
-
/**
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
}
|
|
398
|
+
/**
|
|
399
|
+
* Encodes this profile as a zipped, base64 encoded directory.
|
|
400
|
+
* @return {!Promise<string>} A promise for the encoded profile.
|
|
401
|
+
*/
|
|
402
|
+
[Symbols.serialize]() {
|
|
403
|
+
return this.encode();
|
|
404
|
+
}
|
|
405
|
+
}
|
|
426
406
|
|
|
427
407
|
|
|
428
408
|
// PUBLIC API
|