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