selenium-webdriver 2.48.2 → 2.53.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +116 -0
- package/NOTICE +1 -1
- package/README.md +59 -9
- package/builder.js +375 -358
- package/chrome.js +549 -586
- package/edge.js +378 -0
- package/error.js +9 -6
- package/example/google_search.js +1 -1
- package/example/google_search_generator.js +2 -4
- package/example/logging.js +6 -2
- package/example/sample.js +21 -0
- package/executors.js +11 -27
- package/firefox/binary.js +149 -98
- package/firefox/extension.js +15 -19
- package/firefox/index.js +256 -163
- package/firefox/profile.js +223 -243
- package/http/index.js +487 -81
- package/http/util.js +40 -36
- package/ie.js +288 -309
- package/index.js +34 -125
- package/io/exec.js +58 -39
- package/io/index.js +72 -60
- package/lib/README +4 -0
- package/lib/actions.js +596 -0
- package/lib/by.js +277 -0
- package/lib/capabilities.js +450 -0
- package/lib/{webdriver/command.js → command.js} +91 -72
- package/lib/{webdriver/button.js → devmode.js} +13 -8
- package/lib/error.js +690 -0
- package/lib/events.js +212 -0
- package/lib/firefox/amd64/libnoblur64.so +0 -0
- package/lib/firefox/i386/libnoblur.so +0 -0
- package/lib/firefox/webdriver.json +5 -1
- package/lib/firefox/webdriver.xpi +0 -0
- package/lib/{webdriver/key.js → input.js} +84 -2
- package/lib/logging.js +670 -0
- package/lib/{webdriver/promise.js → promise.js} +817 -644
- package/lib/safari/client.js +266 -214
- package/lib/session.js +80 -0
- package/lib/{webdriver/serializable.js → symbols.js} +16 -19
- package/lib/test/build.js +4 -4
- package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
- package/lib/test/data/click_tests/overlapping_elements.html +15 -4
- package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
- package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
- package/lib/test/data/hidden_partially.html +45 -0
- package/lib/test/data/readOnlyPage.html +1 -1
- package/lib/test/data/selectPage.html +18 -2
- package/lib/test/fileserver.js +3 -4
- package/lib/test/index.js +7 -3
- package/lib/test/resources.js +1 -1
- package/lib/until.js +376 -0
- package/lib/webdriver.js +2440 -0
- package/net/index.js +4 -0
- package/net/portprober.js +16 -12
- package/opera.js +295 -314
- package/package.json +6 -5
- package/phantomjs.js +144 -147
- package/proxy.js +10 -6
- package/remote/index.js +289 -238
- package/safari.js +326 -311
- package/test/chrome/options_test.js +11 -9
- package/test/element_finding_test.js +51 -13
- package/test/execute_script_test.js +17 -3
- package/test/firefox/firefox_test.js +0 -32
- package/test/http/http_test.js +671 -61
- package/test/http/util_test.js +25 -23
- package/test/io_test.js +67 -1
- package/test/lib/by_test.js +139 -0
- package/test/lib/capabilities_test.js +111 -0
- package/test/lib/error_test.js +325 -0
- package/test/lib/events_test.js +177 -0
- package/test/lib/logging_test.js +272 -0
- package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
- package/test/lib/promise_error_test.js +808 -0
- package/test/lib/promise_flow_test.js +2282 -0
- package/test/lib/promise_generator_test.js +308 -0
- package/test/lib/promise_test.js +996 -0
- package/test/lib/testutil.js +90 -0
- package/test/lib/until_test.js +400 -0
- package/test/lib/webdriver_test.js +2157 -0
- package/test/page_loading_test.js +7 -9
- package/test/remote_test.js +50 -3
- package/test/session_test.js +53 -0
- package/test/stale_element_test.js +2 -2
- package/test/testing/assert_test.js +374 -0
- package/test/testing/index_test.js +9 -11
- package/testing/assert.js +334 -17
- package/testing/index.js +12 -2
- package/_base.js +0 -200
- package/docs/Changes.html +0 -356
- package/docs/class_bot_Error.html +0 -15
- package/docs/class_webdriver_ActionSequence.html +0 -115
- package/docs/class_webdriver_Alert.html +0 -24
- package/docs/class_webdriver_AlertPromise.html +0 -92
- package/docs/class_webdriver_Capabilities.html +0 -60
- package/docs/class_webdriver_Command.html +0 -15
- package/docs/class_webdriver_EventEmitter.html +0 -35
- package/docs/class_webdriver_FileDetector.html +0 -21
- package/docs/class_webdriver_Locator.html +0 -12
- package/docs/class_webdriver_Serializable.html +0 -9
- package/docs/class_webdriver_Session.html +0 -13
- package/docs/class_webdriver_TouchSequence.html +0 -49
- package/docs/class_webdriver_UnhandledAlertError.html +0 -18
- package/docs/class_webdriver_WebDriver.html +0 -313
- package/docs/class_webdriver_WebDriver_Logs.html +0 -15
- package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
- package/docs/class_webdriver_WebDriver_Options.html +0 -41
- package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
- package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
- package/docs/class_webdriver_WebDriver_Window.html +0 -27
- package/docs/class_webdriver_WebElement.html +0 -223
- package/docs/class_webdriver_WebElementPromise.html +0 -274
- package/docs/class_webdriver_http_Executor.html +0 -22
- package/docs/class_webdriver_http_Request.html +0 -12
- package/docs/class_webdriver_http_Response.html +0 -13
- package/docs/class_webdriver_logging_Entry.html +0 -15
- package/docs/class_webdriver_logging_Level.html +0 -55
- package/docs/class_webdriver_logging_LogRecord.html +0 -45
- package/docs/class_webdriver_logging_Logger.html +0 -119
- package/docs/class_webdriver_logging_Preferences.html +0 -8
- package/docs/class_webdriver_promise_CancellationError.html +0 -17
- package/docs/class_webdriver_promise_ControlFlow.html +0 -153
- package/docs/class_webdriver_promise_Deferred.html +0 -84
- package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
- package/docs/class_webdriver_promise_Promise.html +0 -75
- package/docs/class_webdriver_stacktrace_Frame.html +0 -20
- package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
- package/docs/class_webdriver_testing_Assertion.html +0 -99
- package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
- package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
- package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
- package/docs/class_webdriver_until_Condition.html +0 -7
- package/docs/dossier.css +0 -1
- package/docs/dossier.js +0 -86
- package/docs/enum_bot_ErrorCode.html +0 -3
- package/docs/enum_bot_Error_State.html +0 -2
- package/docs/enum_webdriver_Browser.html +0 -2
- package/docs/enum_webdriver_Button.html +0 -2
- package/docs/enum_webdriver_Capability.html +0 -33
- package/docs/enum_webdriver_CommandName.html +0 -3
- package/docs/enum_webdriver_Key.html +0 -12
- package/docs/enum_webdriver_logging_Type.html +0 -6
- package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
- package/docs/index.html +0 -125
- package/docs/interface_webdriver_CommandExecutor.html +0 -9
- package/docs/interface_webdriver_http_Client.html +0 -10
- package/docs/interface_webdriver_promise_Thenable.html +0 -77
- package/docs/module_selenium-webdriver.html +0 -23
- package/docs/module_selenium-webdriver__base.html +0 -23
- package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
- package/docs/module_selenium-webdriver_builder.html +0 -2
- package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_chrome.html +0 -90
- package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
- package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
- package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
- package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
- package/docs/module_selenium-webdriver_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
- package/docs/module_selenium-webdriver_class_Command.html +0 -15
- package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
- package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
- package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
- package/docs/module_selenium-webdriver_class_Session.html +0 -13
- package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
- package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
- package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
- package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
- package/docs/module_selenium-webdriver_enum_Button.html +0 -2
- package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
- package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
- package/docs/module_selenium-webdriver_enum_Key.html +0 -12
- package/docs/module_selenium-webdriver_error.html +0 -4
- package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
- package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
- package/docs/module_selenium-webdriver_executors.html +0 -10
- package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
- package/docs/module_selenium-webdriver_firefox.html +0 -68
- package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
- package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
- package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
- package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
- package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_http.html +0 -9
- package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
- package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
- package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
- package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
- package/docs/module_selenium-webdriver_http_util.html +0 -17
- package/docs/module_selenium-webdriver_ie.html +0 -11
- package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
- package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
- package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
- package/docs/module_selenium-webdriver_io.html +0 -37
- package/docs/module_selenium-webdriver_io_exec.html +0 -6
- package/docs/module_selenium-webdriver_namespace_By.html +0 -56
- package/docs/module_selenium-webdriver_namespace_error.html +0 -4
- package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
- package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
- package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
- package/docs/module_selenium-webdriver_namespace_until.html +0 -82
- package/docs/module_selenium-webdriver_net.html +0 -7
- package/docs/module_selenium-webdriver_net_portprober.html +0 -12
- package/docs/module_selenium-webdriver_opera.html +0 -62
- package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
- package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
- package/docs/module_selenium-webdriver_phantomjs.html +0 -2
- package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
- package/docs/module_selenium-webdriver_proxy.html +0 -28
- package/docs/module_selenium-webdriver_remote.html +0 -8
- package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
- package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
- package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
- package/docs/module_selenium-webdriver_safari.html +0 -9
- package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
- package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
- package/docs/module_selenium-webdriver_testing.html +0 -74
- package/docs/module_selenium-webdriver_testing_assert.html +0 -9
- package/docs/namespace_bot.html +0 -4
- package/docs/namespace_bot_json.html +0 -20
- package/docs/namespace_bot_response.html +0 -18
- package/docs/namespace_bot_userAgent.html +0 -33
- package/docs/namespace_webdriver.html +0 -30
- package/docs/namespace_webdriver_By.html +0 -56
- package/docs/namespace_webdriver_http.html +0 -6
- package/docs/namespace_webdriver_logging.html +0 -70
- package/docs/namespace_webdriver_promise.html +0 -688
- package/docs/namespace_webdriver_stacktrace.html +0 -17
- package/docs/namespace_webdriver_testing.html +0 -7
- package/docs/namespace_webdriver_testing_assert.html +0 -9
- package/docs/namespace_webdriver_testing_asserts.html +0 -18
- package/docs/namespace_webdriver_until.html +0 -82
- package/docs/source/_base.js.src.html +0 -1
- package/docs/source/builder.js.src.html +0 -1
- package/docs/source/chrome.js.src.html +0 -1
- package/docs/source/error.js.src.html +0 -1
- package/docs/source/executors.js.src.html +0 -1
- package/docs/source/firefox/binary.js.src.html +0 -1
- package/docs/source/firefox/extension.js.src.html +0 -1
- package/docs/source/firefox/index.js.src.html +0 -1
- package/docs/source/firefox/profile.js.src.html +0 -1
- package/docs/source/http/index.js.src.html +0 -1
- package/docs/source/http/util.js.src.html +0 -1
- package/docs/source/ie.js.src.html +0 -1
- package/docs/source/index.js.src.html +0 -1
- package/docs/source/io/exec.js.src.html +0 -1
- package/docs/source/io/index.js.src.html +0 -1
- package/docs/source/lib/atoms/error.js.src.html +0 -1
- package/docs/source/lib/atoms/json.js.src.html +0 -1
- package/docs/source/lib/atoms/response.js.src.html +0 -1
- package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
- package/docs/source/lib/goog/array/array.js.src.html +0 -1
- package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
- package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
- package/docs/source/lib/goog/async/run.js.src.html +0 -1
- package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
- package/docs/source/lib/goog/base.js.src.html +0 -1
- package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
- package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
- package/docs/source/lib/goog/debug/error.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
- package/docs/source/lib/goog/deps.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
- package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
- package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
- package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
- package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/events/event.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
- package/docs/source/lib/goog/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
- package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
- package/docs/source/lib/goog/events/listener.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
- package/docs/source/lib/goog/fs/url.js.src.html +0 -1
- package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
- package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
- package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
- package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
- package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
- package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
- package/docs/source/lib/goog/json/json.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
- package/docs/source/lib/goog/log/log.js.src.html +0 -1
- package/docs/source/lib/goog/math/box.js.src.html +0 -1
- package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
- package/docs/source/lib/goog/math/math.js.src.html +0 -1
- package/docs/source/lib/goog/math/rect.js.src.html +0 -1
- package/docs/source/lib/goog/math/size.js.src.html +0 -1
- package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/object/object.js.src.html +0 -1
- package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
- package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
- package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
- package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
- package/docs/source/lib/goog/string/const.js.src.html +0 -1
- package/docs/source/lib/goog/string/string.js.src.html +0 -1
- package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
- package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
- package/docs/source/lib/goog/structs/map.js.src.html +0 -1
- package/docs/source/lib/goog/structs/set.js.src.html +0 -1
- package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
- package/docs/source/lib/goog/style/style.js.src.html +0 -1
- package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
- package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
- package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
- package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
- package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
- package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
- package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
- package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
- package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
- package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/button.js.src.html +0 -1
- package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
- package/docs/source/lib/webdriver/command.js.src.html +0 -1
- package/docs/source/lib/webdriver/events.js.src.html +0 -1
- package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
- package/docs/source/lib/webdriver/key.js.src.html +0 -1
- package/docs/source/lib/webdriver/locators.js.src.html +0 -1
- package/docs/source/lib/webdriver/logging.js.src.html +0 -1
- package/docs/source/lib/webdriver/promise.js.src.html +0 -1
- package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
- package/docs/source/lib/webdriver/session.js.src.html +0 -1
- package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
- package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/until.js.src.html +0 -1
- package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
- package/docs/source/net/index.js.src.html +0 -1
- package/docs/source/net/portprober.js.src.html +0 -1
- package/docs/source/opera.js.src.html +0 -1
- package/docs/source/phantomjs.js.src.html +0 -1
- package/docs/source/proxy.js.src.html +0 -1
- package/docs/source/remote/index.js.src.html +0 -1
- package/docs/source/safari.js.src.html +0 -1
- package/docs/source/testing/assert.js.src.html +0 -1
- package/docs/source/testing/index.js.src.html +0 -1
- package/docs/types.js +0 -1
- package/lib/atoms/error.js +0 -202
- package/lib/atoms/json.js +0 -80
- package/lib/atoms/response.js +0 -110
- package/lib/atoms/userAgent.js +0 -257
- package/lib/goog/LICENSE +0 -176
- package/lib/goog/array/array.js +0 -1654
- package/lib/goog/asserts/asserts.js +0 -365
- package/lib/goog/async/freelist.js +0 -88
- package/lib/goog/async/nexttick.js +0 -241
- package/lib/goog/async/run.js +0 -133
- package/lib/goog/async/workqueue.js +0 -139
- package/lib/goog/base.js +0 -2548
- package/lib/goog/debug/debug.js +0 -653
- package/lib/goog/debug/entrypointregistry.js +0 -158
- package/lib/goog/debug/error.js +0 -63
- package/lib/goog/debug/logbuffer.js +0 -148
- package/lib/goog/debug/logger.js +0 -873
- package/lib/goog/debug/logrecord.js +0 -242
- package/lib/goog/deps.js +0 -151
- package/lib/goog/disposable/disposable.js +0 -307
- package/lib/goog/disposable/idisposable.js +0 -45
- package/lib/goog/dom/browserfeature.js +0 -72
- package/lib/goog/dom/dom.js +0 -2991
- package/lib/goog/dom/nodetype.js +0 -48
- package/lib/goog/dom/safe.js +0 -347
- package/lib/goog/dom/tagname.js +0 -160
- package/lib/goog/dom/tags.js +0 -41
- package/lib/goog/dom/vendor.js +0 -96
- package/lib/goog/events/browserevent.js +0 -400
- package/lib/goog/events/browserfeature.js +0 -85
- package/lib/goog/events/event.js +0 -143
- package/lib/goog/events/eventid.js +0 -47
- package/lib/goog/events/events.js +0 -984
- package/lib/goog/events/eventtarget.js +0 -394
- package/lib/goog/events/eventtype.js +0 -237
- package/lib/goog/events/keycodes.js +0 -427
- package/lib/goog/events/listenable.js +0 -335
- package/lib/goog/events/listener.js +0 -131
- package/lib/goog/events/listenermap.js +0 -308
- package/lib/goog/fs/url.js +0 -109
- package/lib/goog/functions/functions.js +0 -442
- package/lib/goog/html/safehtml.js +0 -757
- package/lib/goog/html/safescript.js +0 -234
- package/lib/goog/html/safestyle.js +0 -442
- package/lib/goog/html/safestylesheet.js +0 -276
- package/lib/goog/html/safeurl.js +0 -398
- package/lib/goog/html/trustedresourceurl.js +0 -224
- package/lib/goog/html/uncheckedconversions.js +0 -232
- package/lib/goog/i18n/bidi.js +0 -908
- package/lib/goog/iter/iter.js +0 -1302
- package/lib/goog/json/json.js +0 -363
- package/lib/goog/labs/testing/assertthat.js +0 -58
- package/lib/goog/labs/testing/logicmatcher.js +0 -212
- package/lib/goog/labs/testing/matcher.js +0 -80
- package/lib/goog/labs/testing/numbermatcher.js +0 -346
- package/lib/goog/labs/testing/objectmatcher.js +0 -317
- package/lib/goog/labs/testing/stringmatcher.js +0 -415
- package/lib/goog/labs/useragent/browser.js +0 -341
- package/lib/goog/labs/useragent/engine.js +0 -160
- package/lib/goog/labs/useragent/platform.js +0 -160
- package/lib/goog/labs/useragent/util.js +0 -148
- package/lib/goog/log/log.js +0 -197
- package/lib/goog/math/box.js +0 -398
- package/lib/goog/math/coordinate.js +0 -268
- package/lib/goog/math/math.js +0 -451
- package/lib/goog/math/rect.js +0 -476
- package/lib/goog/math/size.js +0 -227
- package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
- package/lib/goog/net/xhrlike.js +0 -124
- package/lib/goog/net/xmlhttp.js +0 -246
- package/lib/goog/net/xmlhttpfactory.js +0 -67
- package/lib/goog/object/object.js +0 -686
- package/lib/goog/promise/promise.js +0 -1350
- package/lib/goog/promise/resolver.js +0 -48
- package/lib/goog/promise/thenable.js +0 -126
- package/lib/goog/reflect/reflect.js +0 -77
- package/lib/goog/string/const.js +0 -182
- package/lib/goog/string/string.js +0 -1599
- package/lib/goog/string/typedstring.js +0 -48
- package/lib/goog/structs/collection.js +0 -56
- package/lib/goog/structs/map.js +0 -457
- package/lib/goog/structs/set.js +0 -279
- package/lib/goog/structs/structs.js +0 -354
- package/lib/goog/style/style.js +0 -2037
- package/lib/goog/testing/asserts.js +0 -1278
- package/lib/goog/testing/events/events.js +0 -767
- package/lib/goog/testing/functionmock.js +0 -175
- package/lib/goog/testing/jsunit.js +0 -162
- package/lib/goog/testing/loosemock.js +0 -242
- package/lib/goog/testing/mock.js +0 -645
- package/lib/goog/testing/mockclock.js +0 -606
- package/lib/goog/testing/mockcontrol.js +0 -220
- package/lib/goog/testing/mockinterface.js +0 -45
- package/lib/goog/testing/mockmatchers.js +0 -400
- package/lib/goog/testing/objectpropertystring.js +0 -68
- package/lib/goog/testing/propertyreplacer.js +0 -262
- package/lib/goog/testing/recordfunction.js +0 -215
- package/lib/goog/testing/stacktrace.js +0 -594
- package/lib/goog/testing/strictmock.js +0 -130
- package/lib/goog/testing/testcase.js +0 -1629
- package/lib/goog/testing/testrunner.js +0 -440
- package/lib/goog/uri/uri.js +0 -1524
- package/lib/goog/uri/utils.js +0 -1064
- package/lib/goog/useragent/product.js +0 -183
- package/lib/goog/useragent/product_isversion.js +0 -144
- package/lib/goog/useragent/useragent.js +0 -572
- package/lib/webdriver/actionsequence.js +0 -356
- package/lib/webdriver/builder.js +0 -207
- package/lib/webdriver/capabilities.js +0 -412
- package/lib/webdriver/events.js +0 -179
- package/lib/webdriver/firefoxdomexecutor.js +0 -175
- package/lib/webdriver/http/corsclient.js +0 -133
- package/lib/webdriver/http/http.js +0 -525
- package/lib/webdriver/http/xhrclient.js +0 -67
- package/lib/webdriver/locators.js +0 -257
- package/lib/webdriver/logging.js +0 -347
- package/lib/webdriver/session.js +0 -74
- package/lib/webdriver/stacktrace.js +0 -619
- package/lib/webdriver/test/builder_test.js +0 -53
- package/lib/webdriver/test/capabilities_test.js +0 -72
- package/lib/webdriver/test/events_test.js +0 -203
- package/lib/webdriver/test/http/corsclient_test.js +0 -151
- package/lib/webdriver/test/http/http_test.js +0 -428
- package/lib/webdriver/test/http/xhrclient_test.js +0 -196
- package/lib/webdriver/test/locators_test.js +0 -59
- package/lib/webdriver/test/logging_test.js +0 -85
- package/lib/webdriver/test/promise_error_test.js +0 -892
- package/lib/webdriver/test/promise_flow_test.js +0 -2365
- package/lib/webdriver/test/promise_generator_test.js +0 -323
- package/lib/webdriver/test/promise_test.js +0 -2012
- package/lib/webdriver/test/stacktrace_test.js +0 -480
- package/lib/webdriver/test/test_bootstrap.js +0 -67
- package/lib/webdriver/test/testing/asserts_test.js +0 -117
- package/lib/webdriver/test/testing/client_test.js +0 -88
- package/lib/webdriver/test/testing/testcase_test.js +0 -229
- package/lib/webdriver/test/testutil.js +0 -209
- package/lib/webdriver/test/testutil_test.js +0 -104
- package/lib/webdriver/test/until_test.js +0 -411
- package/lib/webdriver/test/webdriver_generator_test.js +0 -92
- package/lib/webdriver/test/webdriver_test.js +0 -2369
- package/lib/webdriver/testing/asserts.js +0 -487
- package/lib/webdriver/testing/client.js +0 -179
- package/lib/webdriver/testing/jsunit.js +0 -363
- package/lib/webdriver/testing/testcase.js +0 -168
- package/lib/webdriver/testing/window.js +0 -244
- package/lib/webdriver/touchsequence.js +0 -248
- package/lib/webdriver/until.js +0 -412
- package/lib/webdriver/webdriver.js +0 -2511
- package/test/_base_test.js +0 -129
package/firefox/profile.js
CHANGED
|
@@ -22,33 +22,31 @@
|
|
|
22
22
|
|
|
23
23
|
'use strict';
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
AdmConstants = require('adm-zip/util/constants'),
|
|
25
|
+
const AdmZip = require('adm-zip'),
|
|
27
26
|
fs = require('fs'),
|
|
28
27
|
path = require('path'),
|
|
29
|
-
util = require('util'),
|
|
30
28
|
vm = require('vm');
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
promise = require('
|
|
34
|
-
|
|
30
|
+
const isDevMode = require('../lib/devmode'),
|
|
31
|
+
promise = require('../lib/promise'),
|
|
32
|
+
Symbols = require('../lib/symbols'),
|
|
35
33
|
io = require('../io'),
|
|
36
34
|
extension = require('./extension');
|
|
37
35
|
|
|
38
36
|
|
|
39
37
|
/** @const */
|
|
40
|
-
|
|
38
|
+
const WEBDRIVER_PREFERENCES_PATH = isDevMode
|
|
41
39
|
? path.join(__dirname, '../../../firefox-driver/webdriver.json')
|
|
42
40
|
: path.join(__dirname, '../lib/firefox/webdriver.json');
|
|
43
41
|
|
|
44
42
|
/** @const */
|
|
45
|
-
|
|
43
|
+
const WEBDRIVER_EXTENSION_PATH = isDevMode
|
|
46
44
|
? path.join(__dirname,
|
|
47
45
|
'../../../../build/javascript/firefox-driver/webdriver.xpi')
|
|
48
46
|
: path.join(__dirname, '../lib/firefox/webdriver.xpi');
|
|
49
47
|
|
|
50
48
|
/** @const */
|
|
51
|
-
|
|
49
|
+
const WEBDRIVER_EXTENSION_NAME = 'fxdriver@googlecode.com';
|
|
52
50
|
|
|
53
51
|
|
|
54
52
|
|
|
@@ -61,8 +59,9 @@ var defaultPreferences = null;
|
|
|
61
59
|
*/
|
|
62
60
|
function getDefaultPreferences() {
|
|
63
61
|
if (!defaultPreferences) {
|
|
64
|
-
var contents =
|
|
65
|
-
|
|
62
|
+
var contents = /** @type {string} */(
|
|
63
|
+
fs.readFileSync(WEBDRIVER_PREFERENCES_PATH, 'utf8'));
|
|
64
|
+
defaultPreferences = /** @type {!Object} */(JSON.parse(contents));
|
|
66
65
|
}
|
|
67
66
|
return defaultPreferences;
|
|
68
67
|
}
|
|
@@ -71,7 +70,7 @@ function getDefaultPreferences() {
|
|
|
71
70
|
/**
|
|
72
71
|
* Parses a user.js file in a Firefox profile directory.
|
|
73
72
|
* @param {string} f Path to the file to parse.
|
|
74
|
-
* @return {!promise.Promise
|
|
73
|
+
* @return {!promise.Promise<!Object>} A promise for the parsed preferences as
|
|
75
74
|
* a JSON object. If the file does not exist, an empty object will be
|
|
76
75
|
* returned.
|
|
77
76
|
*/
|
|
@@ -95,38 +94,27 @@ function loadUserPrefs(f) {
|
|
|
95
94
|
}
|
|
96
95
|
});
|
|
97
96
|
|
|
98
|
-
vm.runInContext(contents, context, f);
|
|
97
|
+
vm.runInContext(/** @type {string} */(contents), context, f);
|
|
99
98
|
done.fulfill(prefs);
|
|
100
99
|
});
|
|
101
100
|
return done.promise;
|
|
102
101
|
}
|
|
103
102
|
|
|
104
103
|
|
|
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
104
|
|
|
117
105
|
/**
|
|
118
|
-
* @param {!Object}
|
|
106
|
+
* @param {!Object} prefs The default preferences to write. Will be
|
|
119
107
|
* overridden by user.js preferences in the template directory and the
|
|
120
108
|
* frozen preferences required by WebDriver.
|
|
121
109
|
* @param {string} dir Path to the directory write the file to.
|
|
122
|
-
* @return {!promise.Promise
|
|
110
|
+
* @return {!promise.Promise<string>} A promise for the profile directory,
|
|
123
111
|
* to be fulfilled when user preferences have been written.
|
|
124
112
|
*/
|
|
125
113
|
function writeUserPrefs(prefs, dir) {
|
|
126
114
|
var userPrefs = path.join(dir, 'user.js');
|
|
127
115
|
return loadUserPrefs(userPrefs).then(function(overrides) {
|
|
128
|
-
|
|
129
|
-
|
|
116
|
+
Object.assign(prefs, overrides);
|
|
117
|
+
Object.assign(prefs, getDefaultPreferences()['frozen']);
|
|
130
118
|
|
|
131
119
|
var contents = Object.keys(prefs).map(function(key) {
|
|
132
120
|
return 'user_pref(' + JSON.stringify(key) + ', ' +
|
|
@@ -151,54 +139,48 @@ function writeUserPrefs(prefs, dir) {
|
|
|
151
139
|
* @param {string} dir The profile directory to install to.
|
|
152
140
|
* @param {boolean=} opt_excludeWebDriverExt Whether to skip installation of
|
|
153
141
|
* the default WebDriver extension.
|
|
154
|
-
* @return {!
|
|
142
|
+
* @return {!Promise<string>} A promise for the main profile directory
|
|
155
143
|
* once all extensions have been installed.
|
|
156
144
|
*/
|
|
157
145
|
function installExtensions(extensions, dir, opt_excludeWebDriverExt) {
|
|
158
146
|
var hasWebDriver = !!opt_excludeWebDriverExt;
|
|
159
147
|
var next = 0;
|
|
160
148
|
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
149
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
150
|
+
return new Promise(function(fulfill, reject) {
|
|
151
|
+
io.exists(extensionDir).then(function(exists) {
|
|
152
|
+
if (!exists) {
|
|
153
|
+
return promise.checkedNodeCall(fs.mkdir, extensionDir);
|
|
154
|
+
}
|
|
155
|
+
}).then(installNext);
|
|
156
|
+
|
|
157
|
+
function installNext() {
|
|
158
|
+
if (next >= extensions.length) {
|
|
159
|
+
if (hasWebDriver) {
|
|
160
|
+
fulfill(dir);
|
|
161
|
+
} else {
|
|
162
|
+
install(WEBDRIVER_EXTENSION_PATH);
|
|
163
|
+
}
|
|
180
164
|
} else {
|
|
181
|
-
install(
|
|
165
|
+
install(extensions[next++]);
|
|
182
166
|
}
|
|
183
|
-
} else {
|
|
184
|
-
install(extensions[next++]);
|
|
185
167
|
}
|
|
186
|
-
}
|
|
187
168
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
169
|
+
function install(ext) {
|
|
170
|
+
extension.install(ext, extensionDir).then(function(id) {
|
|
171
|
+
hasWebDriver = hasWebDriver || (id === WEBDRIVER_EXTENSION_NAME);
|
|
172
|
+
installNext();
|
|
173
|
+
}, reject);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
194
176
|
}
|
|
195
177
|
|
|
196
178
|
|
|
197
179
|
/**
|
|
198
180
|
* Decodes a base64 encoded profile.
|
|
199
181
|
* @param {string} data The base64 encoded string.
|
|
200
|
-
* @return {!
|
|
201
|
-
*
|
|
182
|
+
* @return {!Promise<string>} A promise for the path to the decoded profile
|
|
183
|
+
* directory.
|
|
202
184
|
*/
|
|
203
185
|
function decode(data) {
|
|
204
186
|
return io.tmpFile().then(function(file) {
|
|
@@ -216,213 +198,211 @@ function decode(data) {
|
|
|
216
198
|
|
|
217
199
|
|
|
218
200
|
/**
|
|
219
|
-
* Models a Firefox
|
|
220
|
-
* {@code
|
|
201
|
+
* Models a Firefox profile directory for use with the FirefoxDriver. The
|
|
202
|
+
* {@code Profile} directory uses an in-memory model until {@link #writeToDisk}
|
|
221
203
|
* 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
204
|
*/
|
|
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]) + ')');
|
|
205
|
+
class Profile {
|
|
206
|
+
/**
|
|
207
|
+
* @param {string=} opt_dir Path to an existing Firefox profile directory to
|
|
208
|
+
* use a template for this profile. If not specified, a blank profile will
|
|
209
|
+
* be used.
|
|
210
|
+
*/
|
|
211
|
+
constructor(opt_dir) {
|
|
212
|
+
/** @private {!Object} */
|
|
213
|
+
this.preferences_ = {};
|
|
214
|
+
|
|
215
|
+
Object.assign(this.preferences_, getDefaultPreferences()['mutable']);
|
|
216
|
+
Object.assign(this.preferences_, getDefaultPreferences()['frozen']);
|
|
217
|
+
|
|
218
|
+
/** @private {boolean} */
|
|
219
|
+
this.nativeEventsEnabled_ = true;
|
|
220
|
+
|
|
221
|
+
/** @private {(string|undefined)} */
|
|
222
|
+
this.template_ = opt_dir;
|
|
223
|
+
|
|
224
|
+
/** @private {number} */
|
|
225
|
+
this.port_ = 0;
|
|
226
|
+
|
|
227
|
+
/** @private {!Array<string>} */
|
|
228
|
+
this.extensions_ = [];
|
|
274
229
|
}
|
|
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
230
|
|
|
231
|
+
/**
|
|
232
|
+
* Registers an extension to be included with this profile.
|
|
233
|
+
* @param {string} extension Path to the extension to include, as either an
|
|
234
|
+
* unpacked extension directory or the path to a xpi file.
|
|
235
|
+
*/
|
|
236
|
+
addExtension(extension) {
|
|
237
|
+
this.extensions_.push(extension);
|
|
238
|
+
}
|
|
291
239
|
|
|
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
|
-
|
|
240
|
+
/**
|
|
241
|
+
* Sets a desired preference for this profile.
|
|
242
|
+
* @param {string} key The preference key.
|
|
243
|
+
* @param {(string|number|boolean)} value The preference value.
|
|
244
|
+
* @throws {Error} If attempting to set a frozen preference.
|
|
245
|
+
*/
|
|
246
|
+
setPreference(key, value) {
|
|
247
|
+
var frozen = getDefaultPreferences()['frozen'];
|
|
248
|
+
if (frozen.hasOwnProperty(key) && frozen[key] !== value) {
|
|
249
|
+
throw Error('You may not set ' + key + '=' + JSON.stringify(value)
|
|
250
|
+
+ '; value is frozen for proper WebDriver functionality ('
|
|
251
|
+
+ key + '=' + JSON.stringify(frozen[key]) + ')');
|
|
252
|
+
}
|
|
253
|
+
this.preferences_[key] = value;
|
|
254
|
+
}
|
|
329
255
|
|
|
330
|
-
/**
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
256
|
+
/**
|
|
257
|
+
* Returns the currently configured value of a profile preference. This does
|
|
258
|
+
* not include any defaults defined in the profile's template directory user.js
|
|
259
|
+
* file (if a template were specified on construction).
|
|
260
|
+
* @param {string} key The desired preference.
|
|
261
|
+
* @return {(string|number|boolean|undefined)} The current value of the
|
|
262
|
+
* requested preference.
|
|
263
|
+
*/
|
|
264
|
+
getPreference(key) {
|
|
265
|
+
return this.preferences_[key];
|
|
266
|
+
}
|
|
337
267
|
|
|
268
|
+
/**
|
|
269
|
+
* Specifies which host the driver should listen for commands on. If not
|
|
270
|
+
* specified, the driver will default to "localhost". This option should be
|
|
271
|
+
* specified when "localhost" is not mapped to the loopback address
|
|
272
|
+
* (127.0.0.1) in `/etc/hosts`.
|
|
273
|
+
*
|
|
274
|
+
* @param {string} host the host the driver should listen for commands on
|
|
275
|
+
*/
|
|
276
|
+
setHost(host) {
|
|
277
|
+
this.preferences_['webdriver_firefox_allowed_hosts'] = host;
|
|
278
|
+
}
|
|
338
279
|
|
|
339
|
-
/**
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
280
|
+
/**
|
|
281
|
+
* @return {number} The port this profile is currently configured to use, or
|
|
282
|
+
* 0 if the port will be selected at random when the profile is written
|
|
283
|
+
* to disk.
|
|
284
|
+
*/
|
|
285
|
+
getPort() {
|
|
286
|
+
return this.port_;
|
|
287
|
+
}
|
|
346
288
|
|
|
289
|
+
/**
|
|
290
|
+
* Sets the port to use for the WebDriver extension loaded by this profile.
|
|
291
|
+
* @param {number} port The desired port, or 0 to use any free port.
|
|
292
|
+
*/
|
|
293
|
+
setPort(port) {
|
|
294
|
+
this.port_ = port;
|
|
295
|
+
}
|
|
347
296
|
|
|
348
|
-
/**
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
}
|
|
297
|
+
/**
|
|
298
|
+
* @return {boolean} Whether the FirefoxDriver is configured to automatically
|
|
299
|
+
* accept untrusted SSL certificates.
|
|
300
|
+
*/
|
|
301
|
+
acceptUntrustedCerts() {
|
|
302
|
+
return !!this.preferences_['webdriver_accept_untrusted_certs'];
|
|
303
|
+
}
|
|
355
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Sets whether the FirefoxDriver should automatically accept untrusted SSL
|
|
307
|
+
* certificates.
|
|
308
|
+
* @param {boolean} value .
|
|
309
|
+
*/
|
|
310
|
+
setAcceptUntrustedCerts(value) {
|
|
311
|
+
this.preferences_['webdriver_accept_untrusted_certs'] = !!value;
|
|
312
|
+
}
|
|
356
313
|
|
|
357
|
-
/**
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
}
|
|
314
|
+
/**
|
|
315
|
+
* Sets whether to assume untrusted certificates come from untrusted issuers.
|
|
316
|
+
* @param {boolean} value .
|
|
317
|
+
*/
|
|
318
|
+
setAssumeUntrustedCertIssuer(value) {
|
|
319
|
+
this.preferences_['webdriver_assume_untrusted_issuer'] = !!value;
|
|
320
|
+
}
|
|
364
321
|
|
|
322
|
+
/**
|
|
323
|
+
* @return {boolean} Whether to assume untrusted certs come from untrusted
|
|
324
|
+
* issuers.
|
|
325
|
+
*/
|
|
326
|
+
assumeUntrustedCertIssuer() {
|
|
327
|
+
return !!this.preferences_['webdriver_assume_untrusted_issuer'];
|
|
328
|
+
}
|
|
365
329
|
|
|
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));
|
|
330
|
+
/**
|
|
331
|
+
* Sets whether to use native events with this profile.
|
|
332
|
+
* @param {boolean} enabled .
|
|
333
|
+
*/
|
|
334
|
+
setNativeEventsEnabled(enabled) {
|
|
335
|
+
this.nativeEventsEnabled_ = enabled;
|
|
382
336
|
}
|
|
383
337
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
338
|
+
/**
|
|
339
|
+
* Returns whether native events are enabled in this profile.
|
|
340
|
+
* @return {boolean} .
|
|
341
|
+
*/
|
|
342
|
+
nativeEventsEnabled() {
|
|
343
|
+
return this.nativeEventsEnabled_;
|
|
344
|
+
}
|
|
387
345
|
|
|
388
|
-
|
|
389
|
-
|
|
346
|
+
/**
|
|
347
|
+
* Writes this profile to disk.
|
|
348
|
+
* @param {boolean=} opt_excludeWebDriverExt Whether to exclude the WebDriver
|
|
349
|
+
* extension from the generated profile. Used to reduce the size of an
|
|
350
|
+
* {@link #encode() encoded profile} since the server will always install
|
|
351
|
+
* the extension itself.
|
|
352
|
+
* @return {!Promise<string>} A promise for the path to the new profile
|
|
353
|
+
* directory.
|
|
354
|
+
*/
|
|
355
|
+
writeToDisk(opt_excludeWebDriverExt) {
|
|
356
|
+
var profileDir = io.tmpDir();
|
|
357
|
+
if (this.template_) {
|
|
358
|
+
profileDir = profileDir.then(function(dir) {
|
|
359
|
+
return io.copyDir(
|
|
360
|
+
/** @type {string} */(this.template_),
|
|
361
|
+
dir, /(parent\.lock|lock|\.parentlock)/);
|
|
362
|
+
}.bind(this));
|
|
363
|
+
}
|
|
390
364
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
return installExtensions(extensions, dir, !!opt_excludeWebDriverExt);
|
|
395
|
-
});
|
|
396
|
-
};
|
|
365
|
+
// Freeze preferences for async operations.
|
|
366
|
+
var prefs = {};
|
|
367
|
+
Object.assign(prefs, this.preferences_);
|
|
397
368
|
|
|
369
|
+
// Freeze extensions for async operations.
|
|
370
|
+
var extensions = this.extensions_.concat();
|
|
398
371
|
|
|
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);
|
|
372
|
+
return profileDir.then(function(dir) {
|
|
373
|
+
return writeUserPrefs(prefs, dir);
|
|
374
|
+
}).then(function(dir) {
|
|
375
|
+
return installExtensions(extensions, dir, !!opt_excludeWebDriverExt);
|
|
411
376
|
});
|
|
412
|
-
}
|
|
413
|
-
return new Buffer(data).toString('base64');
|
|
414
|
-
});
|
|
415
|
-
};
|
|
377
|
+
}
|
|
416
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Encodes this profile as a zipped, base64 encoded directory.
|
|
381
|
+
* @return {!Promise<string>} A promise for the encoded profile.
|
|
382
|
+
*/
|
|
383
|
+
encode() {
|
|
384
|
+
return this.writeToDisk(true).then(function(dir) {
|
|
385
|
+
var zip = new AdmZip();
|
|
386
|
+
zip.addLocalFolder(dir, '');
|
|
387
|
+
// Stored compression, see https://en.wikipedia.org/wiki/Zip_(file_format)
|
|
388
|
+
zip.getEntries()[0].header.method = 0;
|
|
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
|