selenium-webdriver 2.48.2 → 2.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +57 -0
- package/NOTICE +1 -1
- package/README.md +56 -6
- package/builder.js +375 -358
- package/chrome.js +549 -586
- package/edge.js +378 -0
- package/error.js +597 -5
- package/example/google_search_generator.js +2 -4
- package/example/logging.js +6 -2
- package/executors.js +11 -27
- package/firefox/binary.js +79 -87
- package/firefox/extension.js +10 -18
- package/firefox/index.js +173 -173
- package/firefox/profile.js +220 -240
- package/http/index.js +396 -79
- package/http/util.js +35 -35
- package/ie.js +288 -309
- package/index.js +34 -125
- package/io/exec.js +58 -39
- package/io/index.js +54 -48
- package/lib/actions.js +594 -0
- package/lib/by.js +276 -0
- package/lib/capabilities.js +404 -0
- package/lib/{webdriver/command.js → command.js} +88 -72
- package/lib/{webdriver/button.js → devmode.js} +13 -8
- package/lib/events.js +210 -0
- package/lib/firefox/amd64/libnoblur64.so +0 -0
- package/lib/firefox/i386/libnoblur.so +0 -0
- package/lib/firefox/webdriver.json +5 -1
- package/lib/firefox/webdriver.xpi +0 -0
- package/lib/{webdriver/key.js → input.js} +82 -2
- package/lib/logging.js +668 -0
- package/lib/{webdriver/promise.js → promise.js} +688 -644
- package/lib/session.js +79 -0
- package/lib/{webdriver/serializable.js → symbols.js} +11 -16
- package/lib/test/build.js +4 -4
- package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
- package/lib/test/data/click_tests/overlapping_elements.html +15 -4
- package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
- package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
- package/lib/test/data/readOnlyPage.html +1 -1
- package/lib/test/data/selectPage.html +18 -2
- package/lib/test/fileserver.js +3 -4
- package/lib/test/index.js +7 -3
- package/lib/test/resources.js +1 -1
- package/lib/until.js +428 -0
- package/lib/webdriver.js +2351 -0
- package/net/portprober.js +15 -11
- package/opera.js +295 -314
- package/package.json +6 -5
- package/phantomjs.js +135 -140
- package/proxy.js +6 -4
- package/remote/index.js +229 -221
- package/safari.js +319 -310
- package/test/chrome/options_test.js +11 -9
- package/test/element_finding_test.js +51 -13
- package/test/error_test.js +163 -0
- package/test/execute_script_test.js +1 -1
- package/test/http/http_test.js +317 -55
- package/test/http/util_test.js +25 -23
- package/test/io_test.js +6 -1
- package/test/lib/by_test.js +127 -0
- package/test/lib/capabilities_test.js +84 -0
- package/test/lib/events_test.js +177 -0
- package/test/lib/logging_test.js +272 -0
- package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
- package/test/lib/promise_error_test.js +808 -0
- package/test/lib/promise_flow_test.js +2282 -0
- package/test/lib/promise_generator_test.js +308 -0
- package/test/lib/promise_test.js +996 -0
- package/test/lib/testutil.js +90 -0
- package/test/lib/until_test.js +436 -0
- package/test/lib/webdriver_test.js +2207 -0
- package/test/page_loading_test.js +7 -9
- package/test/stale_element_test.js +2 -2
- package/test/testing/assert_test.js +374 -0
- package/test/testing/index_test.js +9 -11
- package/testing/assert.js +334 -17
- package/testing/index.js +10 -0
- package/_base.js +0 -200
- package/docs/Changes.html +0 -356
- package/docs/class_bot_Error.html +0 -15
- package/docs/class_webdriver_ActionSequence.html +0 -115
- package/docs/class_webdriver_Alert.html +0 -24
- package/docs/class_webdriver_AlertPromise.html +0 -92
- package/docs/class_webdriver_Capabilities.html +0 -60
- package/docs/class_webdriver_Command.html +0 -15
- package/docs/class_webdriver_EventEmitter.html +0 -35
- package/docs/class_webdriver_FileDetector.html +0 -21
- package/docs/class_webdriver_Locator.html +0 -12
- package/docs/class_webdriver_Serializable.html +0 -9
- package/docs/class_webdriver_Session.html +0 -13
- package/docs/class_webdriver_TouchSequence.html +0 -49
- package/docs/class_webdriver_UnhandledAlertError.html +0 -18
- package/docs/class_webdriver_WebDriver.html +0 -313
- package/docs/class_webdriver_WebDriver_Logs.html +0 -15
- package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
- package/docs/class_webdriver_WebDriver_Options.html +0 -41
- package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
- package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
- package/docs/class_webdriver_WebDriver_Window.html +0 -27
- package/docs/class_webdriver_WebElement.html +0 -223
- package/docs/class_webdriver_WebElementPromise.html +0 -274
- package/docs/class_webdriver_http_Executor.html +0 -22
- package/docs/class_webdriver_http_Request.html +0 -12
- package/docs/class_webdriver_http_Response.html +0 -13
- package/docs/class_webdriver_logging_Entry.html +0 -15
- package/docs/class_webdriver_logging_Level.html +0 -55
- package/docs/class_webdriver_logging_LogRecord.html +0 -45
- package/docs/class_webdriver_logging_Logger.html +0 -119
- package/docs/class_webdriver_logging_Preferences.html +0 -8
- package/docs/class_webdriver_promise_CancellationError.html +0 -17
- package/docs/class_webdriver_promise_ControlFlow.html +0 -153
- package/docs/class_webdriver_promise_Deferred.html +0 -84
- package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
- package/docs/class_webdriver_promise_Promise.html +0 -75
- package/docs/class_webdriver_stacktrace_Frame.html +0 -20
- package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
- package/docs/class_webdriver_testing_Assertion.html +0 -99
- package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
- package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
- package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
- package/docs/class_webdriver_until_Condition.html +0 -7
- package/docs/dossier.css +0 -1
- package/docs/dossier.js +0 -86
- package/docs/enum_bot_ErrorCode.html +0 -3
- package/docs/enum_bot_Error_State.html +0 -2
- package/docs/enum_webdriver_Browser.html +0 -2
- package/docs/enum_webdriver_Button.html +0 -2
- package/docs/enum_webdriver_Capability.html +0 -33
- package/docs/enum_webdriver_CommandName.html +0 -3
- package/docs/enum_webdriver_Key.html +0 -12
- package/docs/enum_webdriver_logging_Type.html +0 -6
- package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
- package/docs/index.html +0 -125
- package/docs/interface_webdriver_CommandExecutor.html +0 -9
- package/docs/interface_webdriver_http_Client.html +0 -10
- package/docs/interface_webdriver_promise_Thenable.html +0 -77
- package/docs/module_selenium-webdriver.html +0 -23
- package/docs/module_selenium-webdriver__base.html +0 -23
- package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
- package/docs/module_selenium-webdriver_builder.html +0 -2
- package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_chrome.html +0 -90
- package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
- package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
- package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
- package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
- package/docs/module_selenium-webdriver_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
- package/docs/module_selenium-webdriver_class_Command.html +0 -15
- package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
- package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
- package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
- package/docs/module_selenium-webdriver_class_Session.html +0 -13
- package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
- package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
- package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
- package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
- package/docs/module_selenium-webdriver_enum_Button.html +0 -2
- package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
- package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
- package/docs/module_selenium-webdriver_enum_Key.html +0 -12
- package/docs/module_selenium-webdriver_error.html +0 -4
- package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
- package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
- package/docs/module_selenium-webdriver_executors.html +0 -10
- package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
- package/docs/module_selenium-webdriver_firefox.html +0 -68
- package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
- package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
- package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
- package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
- package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_http.html +0 -9
- package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
- package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
- package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
- package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
- package/docs/module_selenium-webdriver_http_util.html +0 -17
- package/docs/module_selenium-webdriver_ie.html +0 -11
- package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
- package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
- package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
- package/docs/module_selenium-webdriver_io.html +0 -37
- package/docs/module_selenium-webdriver_io_exec.html +0 -6
- package/docs/module_selenium-webdriver_namespace_By.html +0 -56
- package/docs/module_selenium-webdriver_namespace_error.html +0 -4
- package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
- package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
- package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
- package/docs/module_selenium-webdriver_namespace_until.html +0 -82
- package/docs/module_selenium-webdriver_net.html +0 -7
- package/docs/module_selenium-webdriver_net_portprober.html +0 -12
- package/docs/module_selenium-webdriver_opera.html +0 -62
- package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
- package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
- package/docs/module_selenium-webdriver_phantomjs.html +0 -2
- package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
- package/docs/module_selenium-webdriver_proxy.html +0 -28
- package/docs/module_selenium-webdriver_remote.html +0 -8
- package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
- package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
- package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
- package/docs/module_selenium-webdriver_safari.html +0 -9
- package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
- package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
- package/docs/module_selenium-webdriver_testing.html +0 -74
- package/docs/module_selenium-webdriver_testing_assert.html +0 -9
- package/docs/namespace_bot.html +0 -4
- package/docs/namespace_bot_json.html +0 -20
- package/docs/namespace_bot_response.html +0 -18
- package/docs/namespace_bot_userAgent.html +0 -33
- package/docs/namespace_webdriver.html +0 -30
- package/docs/namespace_webdriver_By.html +0 -56
- package/docs/namespace_webdriver_http.html +0 -6
- package/docs/namespace_webdriver_logging.html +0 -70
- package/docs/namespace_webdriver_promise.html +0 -688
- package/docs/namespace_webdriver_stacktrace.html +0 -17
- package/docs/namespace_webdriver_testing.html +0 -7
- package/docs/namespace_webdriver_testing_assert.html +0 -9
- package/docs/namespace_webdriver_testing_asserts.html +0 -18
- package/docs/namespace_webdriver_until.html +0 -82
- package/docs/source/_base.js.src.html +0 -1
- package/docs/source/builder.js.src.html +0 -1
- package/docs/source/chrome.js.src.html +0 -1
- package/docs/source/error.js.src.html +0 -1
- package/docs/source/executors.js.src.html +0 -1
- package/docs/source/firefox/binary.js.src.html +0 -1
- package/docs/source/firefox/extension.js.src.html +0 -1
- package/docs/source/firefox/index.js.src.html +0 -1
- package/docs/source/firefox/profile.js.src.html +0 -1
- package/docs/source/http/index.js.src.html +0 -1
- package/docs/source/http/util.js.src.html +0 -1
- package/docs/source/ie.js.src.html +0 -1
- package/docs/source/index.js.src.html +0 -1
- package/docs/source/io/exec.js.src.html +0 -1
- package/docs/source/io/index.js.src.html +0 -1
- package/docs/source/lib/atoms/error.js.src.html +0 -1
- package/docs/source/lib/atoms/json.js.src.html +0 -1
- package/docs/source/lib/atoms/response.js.src.html +0 -1
- package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
- package/docs/source/lib/goog/array/array.js.src.html +0 -1
- package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
- package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
- package/docs/source/lib/goog/async/run.js.src.html +0 -1
- package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
- package/docs/source/lib/goog/base.js.src.html +0 -1
- package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
- package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
- package/docs/source/lib/goog/debug/error.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
- package/docs/source/lib/goog/deps.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
- package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
- package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
- package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
- package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/events/event.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
- package/docs/source/lib/goog/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
- package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
- package/docs/source/lib/goog/events/listener.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
- package/docs/source/lib/goog/fs/url.js.src.html +0 -1
- package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
- package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
- package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
- package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
- package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
- package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
- package/docs/source/lib/goog/json/json.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
- package/docs/source/lib/goog/log/log.js.src.html +0 -1
- package/docs/source/lib/goog/math/box.js.src.html +0 -1
- package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
- package/docs/source/lib/goog/math/math.js.src.html +0 -1
- package/docs/source/lib/goog/math/rect.js.src.html +0 -1
- package/docs/source/lib/goog/math/size.js.src.html +0 -1
- package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/object/object.js.src.html +0 -1
- package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
- package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
- package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
- package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
- package/docs/source/lib/goog/string/const.js.src.html +0 -1
- package/docs/source/lib/goog/string/string.js.src.html +0 -1
- package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
- package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
- package/docs/source/lib/goog/structs/map.js.src.html +0 -1
- package/docs/source/lib/goog/structs/set.js.src.html +0 -1
- package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
- package/docs/source/lib/goog/style/style.js.src.html +0 -1
- package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
- package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
- package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
- package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
- package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
- package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
- package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
- package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
- package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
- package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/button.js.src.html +0 -1
- package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
- package/docs/source/lib/webdriver/command.js.src.html +0 -1
- package/docs/source/lib/webdriver/events.js.src.html +0 -1
- package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
- package/docs/source/lib/webdriver/key.js.src.html +0 -1
- package/docs/source/lib/webdriver/locators.js.src.html +0 -1
- package/docs/source/lib/webdriver/logging.js.src.html +0 -1
- package/docs/source/lib/webdriver/promise.js.src.html +0 -1
- package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
- package/docs/source/lib/webdriver/session.js.src.html +0 -1
- package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
- package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/until.js.src.html +0 -1
- package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
- package/docs/source/net/index.js.src.html +0 -1
- package/docs/source/net/portprober.js.src.html +0 -1
- package/docs/source/opera.js.src.html +0 -1
- package/docs/source/phantomjs.js.src.html +0 -1
- package/docs/source/proxy.js.src.html +0 -1
- package/docs/source/remote/index.js.src.html +0 -1
- package/docs/source/safari.js.src.html +0 -1
- package/docs/source/testing/assert.js.src.html +0 -1
- package/docs/source/testing/index.js.src.html +0 -1
- package/docs/types.js +0 -1
- package/lib/atoms/error.js +0 -202
- package/lib/atoms/json.js +0 -80
- package/lib/atoms/response.js +0 -110
- package/lib/atoms/userAgent.js +0 -257
- package/lib/goog/LICENSE +0 -176
- package/lib/goog/array/array.js +0 -1654
- package/lib/goog/asserts/asserts.js +0 -365
- package/lib/goog/async/freelist.js +0 -88
- package/lib/goog/async/nexttick.js +0 -241
- package/lib/goog/async/run.js +0 -133
- package/lib/goog/async/workqueue.js +0 -139
- package/lib/goog/base.js +0 -2548
- package/lib/goog/debug/debug.js +0 -653
- package/lib/goog/debug/entrypointregistry.js +0 -158
- package/lib/goog/debug/error.js +0 -63
- package/lib/goog/debug/logbuffer.js +0 -148
- package/lib/goog/debug/logger.js +0 -873
- package/lib/goog/debug/logrecord.js +0 -242
- package/lib/goog/deps.js +0 -151
- package/lib/goog/disposable/disposable.js +0 -307
- package/lib/goog/disposable/idisposable.js +0 -45
- package/lib/goog/dom/browserfeature.js +0 -72
- package/lib/goog/dom/dom.js +0 -2991
- package/lib/goog/dom/nodetype.js +0 -48
- package/lib/goog/dom/safe.js +0 -347
- package/lib/goog/dom/tagname.js +0 -160
- package/lib/goog/dom/tags.js +0 -41
- package/lib/goog/dom/vendor.js +0 -96
- package/lib/goog/events/browserevent.js +0 -400
- package/lib/goog/events/browserfeature.js +0 -85
- package/lib/goog/events/event.js +0 -143
- package/lib/goog/events/eventid.js +0 -47
- package/lib/goog/events/events.js +0 -984
- package/lib/goog/events/eventtarget.js +0 -394
- package/lib/goog/events/eventtype.js +0 -237
- package/lib/goog/events/keycodes.js +0 -427
- package/lib/goog/events/listenable.js +0 -335
- package/lib/goog/events/listener.js +0 -131
- package/lib/goog/events/listenermap.js +0 -308
- package/lib/goog/fs/url.js +0 -109
- package/lib/goog/functions/functions.js +0 -442
- package/lib/goog/html/safehtml.js +0 -757
- package/lib/goog/html/safescript.js +0 -234
- package/lib/goog/html/safestyle.js +0 -442
- package/lib/goog/html/safestylesheet.js +0 -276
- package/lib/goog/html/safeurl.js +0 -398
- package/lib/goog/html/trustedresourceurl.js +0 -224
- package/lib/goog/html/uncheckedconversions.js +0 -232
- package/lib/goog/i18n/bidi.js +0 -908
- package/lib/goog/iter/iter.js +0 -1302
- package/lib/goog/json/json.js +0 -363
- package/lib/goog/labs/testing/assertthat.js +0 -58
- package/lib/goog/labs/testing/logicmatcher.js +0 -212
- package/lib/goog/labs/testing/matcher.js +0 -80
- package/lib/goog/labs/testing/numbermatcher.js +0 -346
- package/lib/goog/labs/testing/objectmatcher.js +0 -317
- package/lib/goog/labs/testing/stringmatcher.js +0 -415
- package/lib/goog/labs/useragent/browser.js +0 -341
- package/lib/goog/labs/useragent/engine.js +0 -160
- package/lib/goog/labs/useragent/platform.js +0 -160
- package/lib/goog/labs/useragent/util.js +0 -148
- package/lib/goog/log/log.js +0 -197
- package/lib/goog/math/box.js +0 -398
- package/lib/goog/math/coordinate.js +0 -268
- package/lib/goog/math/math.js +0 -451
- package/lib/goog/math/rect.js +0 -476
- package/lib/goog/math/size.js +0 -227
- package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
- package/lib/goog/net/xhrlike.js +0 -124
- package/lib/goog/net/xmlhttp.js +0 -246
- package/lib/goog/net/xmlhttpfactory.js +0 -67
- package/lib/goog/object/object.js +0 -686
- package/lib/goog/promise/promise.js +0 -1350
- package/lib/goog/promise/resolver.js +0 -48
- package/lib/goog/promise/thenable.js +0 -126
- package/lib/goog/reflect/reflect.js +0 -77
- package/lib/goog/string/const.js +0 -182
- package/lib/goog/string/string.js +0 -1599
- package/lib/goog/string/typedstring.js +0 -48
- package/lib/goog/structs/collection.js +0 -56
- package/lib/goog/structs/map.js +0 -457
- package/lib/goog/structs/set.js +0 -279
- package/lib/goog/structs/structs.js +0 -354
- package/lib/goog/style/style.js +0 -2037
- package/lib/goog/testing/asserts.js +0 -1278
- package/lib/goog/testing/events/events.js +0 -767
- package/lib/goog/testing/functionmock.js +0 -175
- package/lib/goog/testing/jsunit.js +0 -162
- package/lib/goog/testing/loosemock.js +0 -242
- package/lib/goog/testing/mock.js +0 -645
- package/lib/goog/testing/mockclock.js +0 -606
- package/lib/goog/testing/mockcontrol.js +0 -220
- package/lib/goog/testing/mockinterface.js +0 -45
- package/lib/goog/testing/mockmatchers.js +0 -400
- package/lib/goog/testing/objectpropertystring.js +0 -68
- package/lib/goog/testing/propertyreplacer.js +0 -262
- package/lib/goog/testing/recordfunction.js +0 -215
- package/lib/goog/testing/stacktrace.js +0 -594
- package/lib/goog/testing/strictmock.js +0 -130
- package/lib/goog/testing/testcase.js +0 -1629
- package/lib/goog/testing/testrunner.js +0 -440
- package/lib/goog/uri/uri.js +0 -1524
- package/lib/goog/uri/utils.js +0 -1064
- package/lib/goog/useragent/product.js +0 -183
- package/lib/goog/useragent/product_isversion.js +0 -144
- package/lib/goog/useragent/useragent.js +0 -572
- package/lib/webdriver/actionsequence.js +0 -356
- package/lib/webdriver/builder.js +0 -207
- package/lib/webdriver/capabilities.js +0 -412
- package/lib/webdriver/events.js +0 -179
- package/lib/webdriver/firefoxdomexecutor.js +0 -175
- package/lib/webdriver/http/corsclient.js +0 -133
- package/lib/webdriver/http/http.js +0 -525
- package/lib/webdriver/http/xhrclient.js +0 -67
- package/lib/webdriver/locators.js +0 -257
- package/lib/webdriver/logging.js +0 -347
- package/lib/webdriver/session.js +0 -74
- package/lib/webdriver/stacktrace.js +0 -619
- package/lib/webdriver/test/builder_test.js +0 -53
- package/lib/webdriver/test/capabilities_test.js +0 -72
- package/lib/webdriver/test/events_test.js +0 -203
- package/lib/webdriver/test/http/corsclient_test.js +0 -151
- package/lib/webdriver/test/http/http_test.js +0 -428
- package/lib/webdriver/test/http/xhrclient_test.js +0 -196
- package/lib/webdriver/test/locators_test.js +0 -59
- package/lib/webdriver/test/logging_test.js +0 -85
- package/lib/webdriver/test/promise_error_test.js +0 -892
- package/lib/webdriver/test/promise_flow_test.js +0 -2365
- package/lib/webdriver/test/promise_generator_test.js +0 -323
- package/lib/webdriver/test/promise_test.js +0 -2012
- package/lib/webdriver/test/stacktrace_test.js +0 -480
- package/lib/webdriver/test/test_bootstrap.js +0 -67
- package/lib/webdriver/test/testing/asserts_test.js +0 -117
- package/lib/webdriver/test/testing/client_test.js +0 -88
- package/lib/webdriver/test/testing/testcase_test.js +0 -229
- package/lib/webdriver/test/testutil.js +0 -209
- package/lib/webdriver/test/testutil_test.js +0 -104
- package/lib/webdriver/test/until_test.js +0 -411
- package/lib/webdriver/test/webdriver_generator_test.js +0 -92
- package/lib/webdriver/test/webdriver_test.js +0 -2369
- package/lib/webdriver/testing/asserts.js +0 -487
- package/lib/webdriver/testing/client.js +0 -179
- package/lib/webdriver/testing/jsunit.js +0 -363
- package/lib/webdriver/testing/testcase.js +0 -168
- package/lib/webdriver/testing/window.js +0 -244
- package/lib/webdriver/touchsequence.js +0 -248
- package/lib/webdriver/until.js +0 -412
- package/lib/webdriver/webdriver.js +0 -2511
- package/test/_base_test.js +0 -129
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"><meta http-equiv="Content-Language" content="en"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>useragent.js</title><link href="../../../../dossier.css" rel="stylesheet" type="text/css"><header><div><form><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></header><main><article class="srcfile"><h1>lib/goog/useragent/useragent.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Copyright 2006 The Closure Library Authors. All Rights Reserved.<tr><td><a id="l2"></a><a href="#l2">2</a><td>//<tr><td><a id="l3"></a><a href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the "License");<tr><td><a id="l4"></a><a href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a id="l5"></a><a href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a id="l6"></a><a href="#l6">6</a><td>//<tr><td><a id="l7"></a><a href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a id="l10"></a><a href="#l10">10</a><td>// distributed under the License is distributed on an "AS-IS" BASIS,<tr><td><a id="l11"></a><a href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a id="l12"></a><a href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a id="l13"></a><a href="#l13">13</a><td>// limitations under the License.<tr><td><a id="l14"></a><a href="#l14">14</a><td><tr><td><a id="l15"></a><a href="#l15">15</a><td>/**<tr><td><a id="l16"></a><a href="#l16">16</a><td> * @fileoverview Rendering engine detection.<tr><td><a id="l17"></a><a href="#l17">17</a><td> * @see <a href="http://www.useragentstring.com/">User agent strings</a><tr><td><a id="l18"></a><a href="#l18">18</a><td> * For information on the browser brand (such as Safari versus Chrome), see<tr><td><a id="l19"></a><a href="#l19">19</a><td> * goog.userAgent.product.<tr><td><a id="l20"></a><a href="#l20">20</a><td> * @author arv@google.com (Erik Arvidsson)<tr><td><a id="l21"></a><a href="#l21">21</a><td> * @see ../demos/useragent.html<tr><td><a id="l22"></a><a href="#l22">22</a><td> */<tr><td><a id="l23"></a><a href="#l23">23</a><td><tr><td><a id="l24"></a><a href="#l24">24</a><td>goog.provide('goog.userAgent');<tr><td><a id="l25"></a><a href="#l25">25</a><td><tr><td><a id="l26"></a><a href="#l26">26</a><td>goog.require('goog.labs.userAgent.browser');<tr><td><a id="l27"></a><a href="#l27">27</a><td>goog.require('goog.labs.userAgent.engine');<tr><td><a id="l28"></a><a href="#l28">28</a><td>goog.require('goog.labs.userAgent.platform');<tr><td><a id="l29"></a><a href="#l29">29</a><td>goog.require('goog.labs.userAgent.util');<tr><td><a id="l30"></a><a href="#l30">30</a><td>goog.require('goog.string');<tr><td><a id="l31"></a><a href="#l31">31</a><td><tr><td><a id="l32"></a><a href="#l32">32</a><td><tr><td><a id="l33"></a><a href="#l33">33</a><td>/**<tr><td><a id="l34"></a><a href="#l34">34</a><td> * @define {boolean} Whether we know at compile-time that the browser is IE.<tr><td><a id="l35"></a><a href="#l35">35</a><td> */<tr><td><a id="l36"></a><a href="#l36">36</a><td>goog.define('goog.userAgent.ASSUME_IE', false);<tr><td><a id="l37"></a><a href="#l37">37</a><td><tr><td><a id="l38"></a><a href="#l38">38</a><td><tr><td><a id="l39"></a><a href="#l39">39</a><td>/**<tr><td><a id="l40"></a><a href="#l40">40</a><td> * @define {boolean} Whether we know at compile-time that the browser is EDGE.<tr><td><a id="l41"></a><a href="#l41">41</a><td> */<tr><td><a id="l42"></a><a href="#l42">42</a><td>goog.define('goog.userAgent.ASSUME_EDGE', false);<tr><td><a id="l43"></a><a href="#l43">43</a><td><tr><td><a id="l44"></a><a href="#l44">44</a><td><tr><td><a id="l45"></a><a href="#l45">45</a><td>/**<tr><td><a id="l46"></a><a href="#l46">46</a><td> * @define {boolean} Whether we know at compile-time that the browser is GECKO.<tr><td><a id="l47"></a><a href="#l47">47</a><td> */<tr><td><a id="l48"></a><a href="#l48">48</a><td>goog.define('goog.userAgent.ASSUME_GECKO', false);<tr><td><a id="l49"></a><a href="#l49">49</a><td><tr><td><a id="l50"></a><a href="#l50">50</a><td><tr><td><a id="l51"></a><a href="#l51">51</a><td>/**<tr><td><a id="l52"></a><a href="#l52">52</a><td> * @define {boolean} Whether we know at compile-time that the browser is WEBKIT.<tr><td><a id="l53"></a><a href="#l53">53</a><td> */<tr><td><a id="l54"></a><a href="#l54">54</a><td>goog.define('goog.userAgent.ASSUME_WEBKIT', false);<tr><td><a id="l55"></a><a href="#l55">55</a><td><tr><td><a id="l56"></a><a href="#l56">56</a><td><tr><td><a id="l57"></a><a href="#l57">57</a><td>/**<tr><td><a id="l58"></a><a href="#l58">58</a><td> * @define {boolean} Whether we know at compile-time that the browser is a<tr><td><a id="l59"></a><a href="#l59">59</a><td> * mobile device running WebKit e.g. iPhone or Android.<tr><td><a id="l60"></a><a href="#l60">60</a><td> */<tr><td><a id="l61"></a><a href="#l61">61</a><td>goog.define('goog.userAgent.ASSUME_MOBILE_WEBKIT', false);<tr><td><a id="l62"></a><a href="#l62">62</a><td><tr><td><a id="l63"></a><a href="#l63">63</a><td><tr><td><a id="l64"></a><a href="#l64">64</a><td>/**<tr><td><a id="l65"></a><a href="#l65">65</a><td> * @define {boolean} Whether we know at compile-time that the browser is OPERA.<tr><td><a id="l66"></a><a href="#l66">66</a><td> */<tr><td><a id="l67"></a><a href="#l67">67</a><td>goog.define('goog.userAgent.ASSUME_OPERA', false);<tr><td><a id="l68"></a><a href="#l68">68</a><td><tr><td><a id="l69"></a><a href="#l69">69</a><td><tr><td><a id="l70"></a><a href="#l70">70</a><td>/**<tr><td><a id="l71"></a><a href="#l71">71</a><td> * @define {boolean} Whether the<tr><td><a id="l72"></a><a href="#l72">72</a><td> * {@code goog.userAgent.isVersionOrHigher}<tr><td><a id="l73"></a><a href="#l73">73</a><td> * function will return true for any version.<tr><td><a id="l74"></a><a href="#l74">74</a><td> */<tr><td><a id="l75"></a><a href="#l75">75</a><td>goog.define('goog.userAgent.ASSUME_ANY_VERSION', false);<tr><td><a id="l76"></a><a href="#l76">76</a><td><tr><td><a id="l77"></a><a href="#l77">77</a><td><tr><td><a id="l78"></a><a href="#l78">78</a><td>/**<tr><td><a id="l79"></a><a href="#l79">79</a><td> * Whether we know the browser engine at compile-time.<tr><td><a id="l80"></a><a href="#l80">80</a><td> * @type {boolean}<tr><td><a id="l81"></a><a href="#l81">81</a><td> * @private<tr><td><a id="l82"></a><a href="#l82">82</a><td> */<tr><td><a id="l83"></a><a href="#l83">83</a><td>goog.userAgent.BROWSER_KNOWN_ =<tr><td><a id="l84"></a><a href="#l84">84</a><td> goog.userAgent.ASSUME_IE ||<tr><td><a id="l85"></a><a href="#l85">85</a><td> goog.userAgent.ASSUME_EDGE ||<tr><td><a id="l86"></a><a href="#l86">86</a><td> goog.userAgent.ASSUME_GECKO ||<tr><td><a id="l87"></a><a href="#l87">87</a><td> goog.userAgent.ASSUME_MOBILE_WEBKIT ||<tr><td><a id="l88"></a><a href="#l88">88</a><td> goog.userAgent.ASSUME_WEBKIT ||<tr><td><a id="l89"></a><a href="#l89">89</a><td> goog.userAgent.ASSUME_OPERA;<tr><td><a id="l90"></a><a href="#l90">90</a><td><tr><td><a id="l91"></a><a href="#l91">91</a><td><tr><td><a id="l92"></a><a href="#l92">92</a><td>/**<tr><td><a id="l93"></a><a href="#l93">93</a><td> * Returns the userAgent string for the current browser.<tr><td><a id="l94"></a><a href="#l94">94</a><td> *<tr><td><a id="l95"></a><a href="#l95">95</a><td> * @return {string} The userAgent string.<tr><td><a id="l96"></a><a href="#l96">96</a><td> */<tr><td><a id="l97"></a><a href="#l97">97</a><td>goog.userAgent.getUserAgentString = function() {<tr><td><a id="l98"></a><a href="#l98">98</a><td> return goog.labs.userAgent.util.getUserAgent();<tr><td><a id="l99"></a><a href="#l99">99</a><td>};<tr><td><a id="l100"></a><a href="#l100">100</a><td><tr><td><a id="l101"></a><a href="#l101">101</a><td><tr><td><a id="l102"></a><a href="#l102">102</a><td>/**<tr><td><a id="l103"></a><a href="#l103">103</a><td> * TODO(nnaze): Change type to "Navigator" and update compilation targets.<tr><td><a id="l104"></a><a href="#l104">104</a><td> * @return {Object} The native navigator object.<tr><td><a id="l105"></a><a href="#l105">105</a><td> */<tr><td><a id="l106"></a><a href="#l106">106</a><td>goog.userAgent.getNavigator = function() {<tr><td><a id="l107"></a><a href="#l107">107</a><td> // Need a local navigator reference instead of using the global one,<tr><td><a id="l108"></a><a href="#l108">108</a><td> // to avoid the rare case where they reference different objects.<tr><td><a id="l109"></a><a href="#l109">109</a><td> // (in a WorkerPool, for example).<tr><td><a id="l110"></a><a href="#l110">110</a><td> return goog.global['navigator'] || null;<tr><td><a id="l111"></a><a href="#l111">111</a><td>};<tr><td><a id="l112"></a><a href="#l112">112</a><td><tr><td><a id="l113"></a><a href="#l113">113</a><td><tr><td><a id="l114"></a><a href="#l114">114</a><td>/**<tr><td><a id="l115"></a><a href="#l115">115</a><td> * Whether the user agent is Opera.<tr><td><a id="l116"></a><a href="#l116">116</a><td> * @type {boolean}<tr><td><a id="l117"></a><a href="#l117">117</a><td> */<tr><td><a id="l118"></a><a href="#l118">118</a><td>goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l119"></a><a href="#l119">119</a><td> goog.userAgent.ASSUME_OPERA :<tr><td><a id="l120"></a><a href="#l120">120</a><td> goog.labs.userAgent.browser.isOpera();<tr><td><a id="l121"></a><a href="#l121">121</a><td><tr><td><a id="l122"></a><a href="#l122">122</a><td><tr><td><a id="l123"></a><a href="#l123">123</a><td>/**<tr><td><a id="l124"></a><a href="#l124">124</a><td> * Whether the user agent is Internet Explorer.<tr><td><a id="l125"></a><a href="#l125">125</a><td> * @type {boolean}<tr><td><a id="l126"></a><a href="#l126">126</a><td> */<tr><td><a id="l127"></a><a href="#l127">127</a><td>goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l128"></a><a href="#l128">128</a><td> goog.userAgent.ASSUME_IE :<tr><td><a id="l129"></a><a href="#l129">129</a><td> goog.labs.userAgent.browser.isIE();<tr><td><a id="l130"></a><a href="#l130">130</a><td><tr><td><a id="l131"></a><a href="#l131">131</a><td><tr><td><a id="l132"></a><a href="#l132">132</a><td>/**<tr><td><a id="l133"></a><a href="#l133">133</a><td> * Whether the user agent is Microsoft Edge.<tr><td><a id="l134"></a><a href="#l134">134</a><td> * @type {boolean}<tr><td><a id="l135"></a><a href="#l135">135</a><td> */<tr><td><a id="l136"></a><a href="#l136">136</a><td>goog.userAgent.EDGE = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l137"></a><a href="#l137">137</a><td> goog.userAgent.ASSUME_EDGE :<tr><td><a id="l138"></a><a href="#l138">138</a><td> goog.labs.userAgent.engine.isEdge();<tr><td><a id="l139"></a><a href="#l139">139</a><td><tr><td><a id="l140"></a><a href="#l140">140</a><td><tr><td><a id="l141"></a><a href="#l141">141</a><td>/**<tr><td><a id="l142"></a><a href="#l142">142</a><td> * Whether the user agent is MS Internet Explorer or MS Edge.<tr><td><a id="l143"></a><a href="#l143">143</a><td> * @type {boolean}<tr><td><a id="l144"></a><a href="#l144">144</a><td> */<tr><td><a id="l145"></a><a href="#l145">145</a><td>goog.userAgent.EDGE_OR_IE = goog.userAgent.EDGE || goog.userAgent.IE;<tr><td><a id="l146"></a><a href="#l146">146</a><td><tr><td><a id="l147"></a><a href="#l147">147</a><td><tr><td><a id="l148"></a><a href="#l148">148</a><td>/**<tr><td><a id="l149"></a><a href="#l149">149</a><td> * Whether the user agent is Gecko. Gecko is the rendering engine used by<tr><td><a id="l150"></a><a href="#l150">150</a><td> * Mozilla, Firefox, and others.<tr><td><a id="l151"></a><a href="#l151">151</a><td> * @type {boolean}<tr><td><a id="l152"></a><a href="#l152">152</a><td> */<tr><td><a id="l153"></a><a href="#l153">153</a><td>goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l154"></a><a href="#l154">154</a><td> goog.userAgent.ASSUME_GECKO :<tr><td><a id="l155"></a><a href="#l155">155</a><td> goog.labs.userAgent.engine.isGecko();<tr><td><a id="l156"></a><a href="#l156">156</a><td><tr><td><a id="l157"></a><a href="#l157">157</a><td><tr><td><a id="l158"></a><a href="#l158">158</a><td>/**<tr><td><a id="l159"></a><a href="#l159">159</a><td> * Whether the user agent is WebKit. WebKit is the rendering engine that<tr><td><a id="l160"></a><a href="#l160">160</a><td> * Safari, Android and others use.<tr><td><a id="l161"></a><a href="#l161">161</a><td> * @type {boolean}<tr><td><a id="l162"></a><a href="#l162">162</a><td> */<tr><td><a id="l163"></a><a href="#l163">163</a><td>goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l164"></a><a href="#l164">164</a><td> goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT :<tr><td><a id="l165"></a><a href="#l165">165</a><td> goog.labs.userAgent.engine.isWebKit();<tr><td><a id="l166"></a><a href="#l166">166</a><td><tr><td><a id="l167"></a><a href="#l167">167</a><td><tr><td><a id="l168"></a><a href="#l168">168</a><td>/**<tr><td><a id="l169"></a><a href="#l169">169</a><td> * Whether the user agent is running on a mobile device.<tr><td><a id="l170"></a><a href="#l170">170</a><td> *<tr><td><a id="l171"></a><a href="#l171">171</a><td> * This is a separate function so that the logic can be tested.<tr><td><a id="l172"></a><a href="#l172">172</a><td> *<tr><td><a id="l173"></a><a href="#l173">173</a><td> * TODO(nnaze): Investigate swapping in goog.labs.userAgent.device.isMobile().<tr><td><a id="l174"></a><a href="#l174">174</a><td> *<tr><td><a id="l175"></a><a href="#l175">175</a><td> * @return {boolean} Whether the user agent is running on a mobile device.<tr><td><a id="l176"></a><a href="#l176">176</a><td> * @private<tr><td><a id="l177"></a><a href="#l177">177</a><td> */<tr><td><a id="l178"></a><a href="#l178">178</a><td>goog.userAgent.isMobile_ = function() {<tr><td><a id="l179"></a><a href="#l179">179</a><td> return goog.userAgent.WEBKIT &&<tr><td><a id="l180"></a><a href="#l180">180</a><td> goog.labs.userAgent.util.matchUserAgent('Mobile');<tr><td><a id="l181"></a><a href="#l181">181</a><td>};<tr><td><a id="l182"></a><a href="#l182">182</a><td><tr><td><a id="l183"></a><a href="#l183">183</a><td><tr><td><a id="l184"></a><a href="#l184">184</a><td>/**<tr><td><a id="l185"></a><a href="#l185">185</a><td> * Whether the user agent is running on a mobile device.<tr><td><a id="l186"></a><a href="#l186">186</a><td> *<tr><td><a id="l187"></a><a href="#l187">187</a><td> * TODO(nnaze): Consider deprecating MOBILE when labs.userAgent<tr><td><a id="l188"></a><a href="#l188">188</a><td> * is promoted as the gecko/webkit logic is likely inaccurate.<tr><td><a id="l189"></a><a href="#l189">189</a><td> *<tr><td><a id="l190"></a><a href="#l190">190</a><td> * @type {boolean}<tr><td><a id="l191"></a><a href="#l191">191</a><td> */<tr><td><a id="l192"></a><a href="#l192">192</a><td>goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT ||<tr><td><a id="l193"></a><a href="#l193">193</a><td> goog.userAgent.isMobile_();<tr><td><a id="l194"></a><a href="#l194">194</a><td><tr><td><a id="l195"></a><a href="#l195">195</a><td><tr><td><a id="l196"></a><a href="#l196">196</a><td>/**<tr><td><a id="l197"></a><a href="#l197">197</a><td> * Used while transitioning code to use WEBKIT instead.<tr><td><a id="l198"></a><a href="#l198">198</a><td> * @type {boolean}<tr><td><a id="l199"></a><a href="#l199">199</a><td> * @deprecated Use {@link goog.userAgent.product.SAFARI} instead.<tr><td><a id="l200"></a><a href="#l200">200</a><td> * TODO(nicksantos): Delete this from goog.userAgent.<tr><td><a id="l201"></a><a href="#l201">201</a><td> */<tr><td><a id="l202"></a><a href="#l202">202</a><td>goog.userAgent.SAFARI = goog.userAgent.WEBKIT;<tr><td><a id="l203"></a><a href="#l203">203</a><td><tr><td><a id="l204"></a><a href="#l204">204</a><td><tr><td><a id="l205"></a><a href="#l205">205</a><td>/**<tr><td><a id="l206"></a><a href="#l206">206</a><td> * @return {string} the platform (operating system) the user agent is running<tr><td><a id="l207"></a><a href="#l207">207</a><td> * on. Default to empty string because navigator.platform may not be defined<tr><td><a id="l208"></a><a href="#l208">208</a><td> * (on Rhino, for example).<tr><td><a id="l209"></a><a href="#l209">209</a><td> * @private<tr><td><a id="l210"></a><a href="#l210">210</a><td> */<tr><td><a id="l211"></a><a href="#l211">211</a><td>goog.userAgent.determinePlatform_ = function() {<tr><td><a id="l212"></a><a href="#l212">212</a><td> var navigator = goog.userAgent.getNavigator();<tr><td><a id="l213"></a><a href="#l213">213</a><td> return navigator && navigator.platform || '';<tr><td><a id="l214"></a><a href="#l214">214</a><td>};<tr><td><a id="l215"></a><a href="#l215">215</a><td><tr><td><a id="l216"></a><a href="#l216">216</a><td><tr><td><a id="l217"></a><a href="#l217">217</a><td>/**<tr><td><a id="l218"></a><a href="#l218">218</a><td> * The platform (operating system) the user agent is running on. Default to<tr><td><a id="l219"></a><a href="#l219">219</a><td> * empty string because navigator.platform may not be defined (on Rhino, for<tr><td><a id="l220"></a><a href="#l220">220</a><td> * example).<tr><td><a id="l221"></a><a href="#l221">221</a><td> * @type {string}<tr><td><a id="l222"></a><a href="#l222">222</a><td> */<tr><td><a id="l223"></a><a href="#l223">223</a><td>goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();<tr><td><a id="l224"></a><a href="#l224">224</a><td><tr><td><a id="l225"></a><a href="#l225">225</a><td><tr><td><a id="l226"></a><a href="#l226">226</a><td>/**<tr><td><a id="l227"></a><a href="#l227">227</a><td> * @define {boolean} Whether the user agent is running on a Macintosh operating<tr><td><a id="l228"></a><a href="#l228">228</a><td> * system.<tr><td><a id="l229"></a><a href="#l229">229</a><td> */<tr><td><a id="l230"></a><a href="#l230">230</a><td>goog.define('goog.userAgent.ASSUME_MAC', false);<tr><td><a id="l231"></a><a href="#l231">231</a><td><tr><td><a id="l232"></a><a href="#l232">232</a><td><tr><td><a id="l233"></a><a href="#l233">233</a><td>/**<tr><td><a id="l234"></a><a href="#l234">234</a><td> * @define {boolean} Whether the user agent is running on a Windows operating<tr><td><a id="l235"></a><a href="#l235">235</a><td> * system.<tr><td><a id="l236"></a><a href="#l236">236</a><td> */<tr><td><a id="l237"></a><a href="#l237">237</a><td>goog.define('goog.userAgent.ASSUME_WINDOWS', false);<tr><td><a id="l238"></a><a href="#l238">238</a><td><tr><td><a id="l239"></a><a href="#l239">239</a><td><tr><td><a id="l240"></a><a href="#l240">240</a><td>/**<tr><td><a id="l241"></a><a href="#l241">241</a><td> * @define {boolean} Whether the user agent is running on a Linux operating<tr><td><a id="l242"></a><a href="#l242">242</a><td> * system.<tr><td><a id="l243"></a><a href="#l243">243</a><td> */<tr><td><a id="l244"></a><a href="#l244">244</a><td>goog.define('goog.userAgent.ASSUME_LINUX', false);<tr><td><a id="l245"></a><a href="#l245">245</a><td><tr><td><a id="l246"></a><a href="#l246">246</a><td><tr><td><a id="l247"></a><a href="#l247">247</a><td>/**<tr><td><a id="l248"></a><a href="#l248">248</a><td> * @define {boolean} Whether the user agent is running on a X11 windowing<tr><td><a id="l249"></a><a href="#l249">249</a><td> * system.<tr><td><a id="l250"></a><a href="#l250">250</a><td> */<tr><td><a id="l251"></a><a href="#l251">251</a><td>goog.define('goog.userAgent.ASSUME_X11', false);<tr><td><a id="l252"></a><a href="#l252">252</a><td><tr><td><a id="l253"></a><a href="#l253">253</a><td><tr><td><a id="l254"></a><a href="#l254">254</a><td>/**<tr><td><a id="l255"></a><a href="#l255">255</a><td> * @define {boolean} Whether the user agent is running on Android.<tr><td><a id="l256"></a><a href="#l256">256</a><td> */<tr><td><a id="l257"></a><a href="#l257">257</a><td>goog.define('goog.userAgent.ASSUME_ANDROID', false);<tr><td><a id="l258"></a><a href="#l258">258</a><td><tr><td><a id="l259"></a><a href="#l259">259</a><td><tr><td><a id="l260"></a><a href="#l260">260</a><td>/**<tr><td><a id="l261"></a><a href="#l261">261</a><td> * @define {boolean} Whether the user agent is running on an iPhone.<tr><td><a id="l262"></a><a href="#l262">262</a><td> */<tr><td><a id="l263"></a><a href="#l263">263</a><td>goog.define('goog.userAgent.ASSUME_IPHONE', false);<tr><td><a id="l264"></a><a href="#l264">264</a><td><tr><td><a id="l265"></a><a href="#l265">265</a><td><tr><td><a id="l266"></a><a href="#l266">266</a><td>/**<tr><td><a id="l267"></a><a href="#l267">267</a><td> * @define {boolean} Whether the user agent is running on an iPad.<tr><td><a id="l268"></a><a href="#l268">268</a><td> */<tr><td><a id="l269"></a><a href="#l269">269</a><td>goog.define('goog.userAgent.ASSUME_IPAD', false);<tr><td><a id="l270"></a><a href="#l270">270</a><td><tr><td><a id="l271"></a><a href="#l271">271</a><td><tr><td><a id="l272"></a><a href="#l272">272</a><td>/**<tr><td><a id="l273"></a><a href="#l273">273</a><td> * @type {boolean}<tr><td><a id="l274"></a><a href="#l274">274</a><td> * @private<tr><td><a id="l275"></a><a href="#l275">275</a><td> */<tr><td><a id="l276"></a><a href="#l276">276</a><td>goog.userAgent.PLATFORM_KNOWN_ =<tr><td><a id="l277"></a><a href="#l277">277</a><td> goog.userAgent.ASSUME_MAC ||<tr><td><a id="l278"></a><a href="#l278">278</a><td> goog.userAgent.ASSUME_WINDOWS ||<tr><td><a id="l279"></a><a href="#l279">279</a><td> goog.userAgent.ASSUME_LINUX ||<tr><td><a id="l280"></a><a href="#l280">280</a><td> goog.userAgent.ASSUME_X11 ||<tr><td><a id="l281"></a><a href="#l281">281</a><td> goog.userAgent.ASSUME_ANDROID ||<tr><td><a id="l282"></a><a href="#l282">282</a><td> goog.userAgent.ASSUME_IPHONE ||<tr><td><a id="l283"></a><a href="#l283">283</a><td> goog.userAgent.ASSUME_IPAD;<tr><td><a id="l284"></a><a href="#l284">284</a><td><tr><td><a id="l285"></a><a href="#l285">285</a><td><tr><td><a id="l286"></a><a href="#l286">286</a><td>/**<tr><td><a id="l287"></a><a href="#l287">287</a><td> * Whether the user agent is running on a Macintosh operating system.<tr><td><a id="l288"></a><a href="#l288">288</a><td> * @type {boolean}<tr><td><a id="l289"></a><a href="#l289">289</a><td> */<tr><td><a id="l290"></a><a href="#l290">290</a><td>goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l291"></a><a href="#l291">291</a><td> goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();<tr><td><a id="l292"></a><a href="#l292">292</a><td><tr><td><a id="l293"></a><a href="#l293">293</a><td><tr><td><a id="l294"></a><a href="#l294">294</a><td>/**<tr><td><a id="l295"></a><a href="#l295">295</a><td> * Whether the user agent is running on a Windows operating system.<tr><td><a id="l296"></a><a href="#l296">296</a><td> * @type {boolean}<tr><td><a id="l297"></a><a href="#l297">297</a><td> */<tr><td><a id="l298"></a><a href="#l298">298</a><td>goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l299"></a><a href="#l299">299</a><td> goog.userAgent.ASSUME_WINDOWS :<tr><td><a id="l300"></a><a href="#l300">300</a><td> goog.labs.userAgent.platform.isWindows();<tr><td><a id="l301"></a><a href="#l301">301</a><td><tr><td><a id="l302"></a><a href="#l302">302</a><td><tr><td><a id="l303"></a><a href="#l303">303</a><td>/**<tr><td><a id="l304"></a><a href="#l304">304</a><td> * Whether the user agent is Linux per the legacy behavior of<tr><td><a id="l305"></a><a href="#l305">305</a><td> * goog.userAgent.LINUX, which considered ChromeOS to also be<tr><td><a id="l306"></a><a href="#l306">306</a><td> * Linux.<tr><td><a id="l307"></a><a href="#l307">307</a><td> * @return {boolean}<tr><td><a id="l308"></a><a href="#l308">308</a><td> * @private<tr><td><a id="l309"></a><a href="#l309">309</a><td> */<tr><td><a id="l310"></a><a href="#l310">310</a><td>goog.userAgent.isLegacyLinux_ = function() {<tr><td><a id="l311"></a><a href="#l311">311</a><td> return goog.labs.userAgent.platform.isLinux() ||<tr><td><a id="l312"></a><a href="#l312">312</a><td> goog.labs.userAgent.platform.isChromeOS();<tr><td><a id="l313"></a><a href="#l313">313</a><td>};<tr><td><a id="l314"></a><a href="#l314">314</a><td><tr><td><a id="l315"></a><a href="#l315">315</a><td><tr><td><a id="l316"></a><a href="#l316">316</a><td>/**<tr><td><a id="l317"></a><a href="#l317">317</a><td> * Whether the user agent is running on a Linux operating system.<tr><td><a id="l318"></a><a href="#l318">318</a><td> *<tr><td><a id="l319"></a><a href="#l319">319</a><td> * Note that goog.userAgent.LINUX considers ChromeOS to be Linux,<tr><td><a id="l320"></a><a href="#l320">320</a><td> * while goog.labs.userAgent.platform considers ChromeOS and<tr><td><a id="l321"></a><a href="#l321">321</a><td> * Linux to be different OSes.<tr><td><a id="l322"></a><a href="#l322">322</a><td> *<tr><td><a id="l323"></a><a href="#l323">323</a><td> * @type {boolean}<tr><td><a id="l324"></a><a href="#l324">324</a><td> */<tr><td><a id="l325"></a><a href="#l325">325</a><td>goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l326"></a><a href="#l326">326</a><td> goog.userAgent.ASSUME_LINUX :<tr><td><a id="l327"></a><a href="#l327">327</a><td> goog.userAgent.isLegacyLinux_();<tr><td><a id="l328"></a><a href="#l328">328</a><td><tr><td><a id="l329"></a><a href="#l329">329</a><td><tr><td><a id="l330"></a><a href="#l330">330</a><td>/**<tr><td><a id="l331"></a><a href="#l331">331</a><td> * @return {boolean} Whether the user agent is an X11 windowing system.<tr><td><a id="l332"></a><a href="#l332">332</a><td> * @private<tr><td><a id="l333"></a><a href="#l333">333</a><td> */<tr><td><a id="l334"></a><a href="#l334">334</a><td>goog.userAgent.isX11_ = function() {<tr><td><a id="l335"></a><a href="#l335">335</a><td> var navigator = goog.userAgent.getNavigator();<tr><td><a id="l336"></a><a href="#l336">336</a><td> return !!navigator &&<tr><td><a id="l337"></a><a href="#l337">337</a><td> goog.string.contains(navigator['appVersion'] || '', 'X11');<tr><td><a id="l338"></a><a href="#l338">338</a><td>};<tr><td><a id="l339"></a><a href="#l339">339</a><td><tr><td><a id="l340"></a><a href="#l340">340</a><td><tr><td><a id="l341"></a><a href="#l341">341</a><td>/**<tr><td><a id="l342"></a><a href="#l342">342</a><td> * Whether the user agent is running on a X11 windowing system.<tr><td><a id="l343"></a><a href="#l343">343</a><td> * @type {boolean}<tr><td><a id="l344"></a><a href="#l344">344</a><td> */<tr><td><a id="l345"></a><a href="#l345">345</a><td>goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l346"></a><a href="#l346">346</a><td> goog.userAgent.ASSUME_X11 :<tr><td><a id="l347"></a><a href="#l347">347</a><td> goog.userAgent.isX11_();<tr><td><a id="l348"></a><a href="#l348">348</a><td><tr><td><a id="l349"></a><a href="#l349">349</a><td><tr><td><a id="l350"></a><a href="#l350">350</a><td>/**<tr><td><a id="l351"></a><a href="#l351">351</a><td> * Whether the user agent is running on Android.<tr><td><a id="l352"></a><a href="#l352">352</a><td> * @type {boolean}<tr><td><a id="l353"></a><a href="#l353">353</a><td> */<tr><td><a id="l354"></a><a href="#l354">354</a><td>goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l355"></a><a href="#l355">355</a><td> goog.userAgent.ASSUME_ANDROID :<tr><td><a id="l356"></a><a href="#l356">356</a><td> goog.labs.userAgent.platform.isAndroid();<tr><td><a id="l357"></a><a href="#l357">357</a><td><tr><td><a id="l358"></a><a href="#l358">358</a><td><tr><td><a id="l359"></a><a href="#l359">359</a><td>/**<tr><td><a id="l360"></a><a href="#l360">360</a><td> * Whether the user agent is running on an iPhone.<tr><td><a id="l361"></a><a href="#l361">361</a><td> * @type {boolean}<tr><td><a id="l362"></a><a href="#l362">362</a><td> */<tr><td><a id="l363"></a><a href="#l363">363</a><td>goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l364"></a><a href="#l364">364</a><td> goog.userAgent.ASSUME_IPHONE :<tr><td><a id="l365"></a><a href="#l365">365</a><td> goog.labs.userAgent.platform.isIphone();<tr><td><a id="l366"></a><a href="#l366">366</a><td><tr><td><a id="l367"></a><a href="#l367">367</a><td><tr><td><a id="l368"></a><a href="#l368">368</a><td>/**<tr><td><a id="l369"></a><a href="#l369">369</a><td> * Whether the user agent is running on an iPad.<tr><td><a id="l370"></a><a href="#l370">370</a><td> * @type {boolean}<tr><td><a id="l371"></a><a href="#l371">371</a><td> */<tr><td><a id="l372"></a><a href="#l372">372</a><td>goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l373"></a><a href="#l373">373</a><td> goog.userAgent.ASSUME_IPAD :<tr><td><a id="l374"></a><a href="#l374">374</a><td> goog.labs.userAgent.platform.isIpad();<tr><td><a id="l375"></a><a href="#l375">375</a><td><tr><td><a id="l376"></a><a href="#l376">376</a><td><tr><td><a id="l377"></a><a href="#l377">377</a><td>/**<tr><td><a id="l378"></a><a href="#l378">378</a><td> * @return {string} The string that describes the version number of the user<tr><td><a id="l379"></a><a href="#l379">379</a><td> * agent.<tr><td><a id="l380"></a><a href="#l380">380</a><td> * Assumes user agent is opera.<tr><td><a id="l381"></a><a href="#l381">381</a><td> * @private<tr><td><a id="l382"></a><a href="#l382">382</a><td> */<tr><td><a id="l383"></a><a href="#l383">383</a><td>goog.userAgent.operaVersion_ = function() {<tr><td><a id="l384"></a><a href="#l384">384</a><td> var version = goog.global.opera.version;<tr><td><a id="l385"></a><a href="#l385">385</a><td> try {<tr><td><a id="l386"></a><a href="#l386">386</a><td> return version();<tr><td><a id="l387"></a><a href="#l387">387</a><td> } catch (e) {<tr><td><a id="l388"></a><a href="#l388">388</a><td> return version;<tr><td><a id="l389"></a><a href="#l389">389</a><td> }<tr><td><a id="l390"></a><a href="#l390">390</a><td>};<tr><td><a id="l391"></a><a href="#l391">391</a><td><tr><td><a id="l392"></a><a href="#l392">392</a><td><tr><td><a id="l393"></a><a href="#l393">393</a><td>/**<tr><td><a id="l394"></a><a href="#l394">394</a><td> * @return {string} The string that describes the version number of the user<tr><td><a id="l395"></a><a href="#l395">395</a><td> * agent.<tr><td><a id="l396"></a><a href="#l396">396</a><td> * @private<tr><td><a id="l397"></a><a href="#l397">397</a><td> */<tr><td><a id="l398"></a><a href="#l398">398</a><td>goog.userAgent.determineVersion_ = function() {<tr><td><a id="l399"></a><a href="#l399">399</a><td> // All browsers have different ways to detect the version and they all have<tr><td><a id="l400"></a><a href="#l400">400</a><td> // different naming schemes.<tr><td><a id="l401"></a><a href="#l401">401</a><td><tr><td><a id="l402"></a><a href="#l402">402</a><td> if (goog.userAgent.OPERA && goog.global['opera']) {<tr><td><a id="l403"></a><a href="#l403">403</a><td> return goog.userAgent.operaVersion_();<tr><td><a id="l404"></a><a href="#l404">404</a><td> }<tr><td><a id="l405"></a><a href="#l405">405</a><td><tr><td><a id="l406"></a><a href="#l406">406</a><td> // version is a string rather than a number because it may contain 'b', 'a',<tr><td><a id="l407"></a><a href="#l407">407</a><td> // and so on.<tr><td><a id="l408"></a><a href="#l408">408</a><td> var version = '';<tr><td><a id="l409"></a><a href="#l409">409</a><td> var arr = goog.userAgent.getVersionRegexResult_();<tr><td><a id="l410"></a><a href="#l410">410</a><td> if (arr) {<tr><td><a id="l411"></a><a href="#l411">411</a><td> version = arr ? arr[1] : '';<tr><td><a id="l412"></a><a href="#l412">412</a><td> }<tr><td><a id="l413"></a><a href="#l413">413</a><td><tr><td><a id="l414"></a><a href="#l414">414</a><td> if (goog.userAgent.IE) {<tr><td><a id="l415"></a><a href="#l415">415</a><td> // IE9 can be in document mode 9 but be reporting an inconsistent user agent<tr><td><a id="l416"></a><a href="#l416">416</a><td> // version. If it is identifying as a version lower than 9 we take the<tr><td><a id="l417"></a><a href="#l417">417</a><td> // documentMode as the version instead. IE8 has similar behavior.<tr><td><a id="l418"></a><a href="#l418">418</a><td> // It is recommended to set the X-UA-Compatible header to ensure that IE9<tr><td><a id="l419"></a><a href="#l419">419</a><td> // uses documentMode 9.<tr><td><a id="l420"></a><a href="#l420">420</a><td> var docMode = goog.userAgent.getDocumentMode_();<tr><td><a id="l421"></a><a href="#l421">421</a><td> if (docMode > parseFloat(version)) {<tr><td><a id="l422"></a><a href="#l422">422</a><td> return String(docMode);<tr><td><a id="l423"></a><a href="#l423">423</a><td> }<tr><td><a id="l424"></a><a href="#l424">424</a><td> }<tr><td><a id="l425"></a><a href="#l425">425</a><td><tr><td><a id="l426"></a><a href="#l426">426</a><td> return version;<tr><td><a id="l427"></a><a href="#l427">427</a><td>};<tr><td><a id="l428"></a><a href="#l428">428</a><td><tr><td><a id="l429"></a><a href="#l429">429</a><td><tr><td><a id="l430"></a><a href="#l430">430</a><td>/**<tr><td><a id="l431"></a><a href="#l431">431</a><td> * @return {Array|undefined} The version regex matches from parsing the user<tr><td><a id="l432"></a><a href="#l432">432</a><td> * agent string. These regex statements must be executed inline so they can<tr><td><a id="l433"></a><a href="#l433">433</a><td> * be compiled out by the closure compiler with the rest of the useragent<tr><td><a id="l434"></a><a href="#l434">434</a><td> * detection logic when ASSUME_* is specified.<tr><td><a id="l435"></a><a href="#l435">435</a><td> * @private<tr><td><a id="l436"></a><a href="#l436">436</a><td> */<tr><td><a id="l437"></a><a href="#l437">437</a><td>goog.userAgent.getVersionRegexResult_ = function() {<tr><td><a id="l438"></a><a href="#l438">438</a><td> var userAgent = goog.userAgent.getUserAgentString();<tr><td><a id="l439"></a><a href="#l439">439</a><td> if (goog.userAgent.GECKO) {<tr><td><a id="l440"></a><a href="#l440">440</a><td> return /rv\:([^\);]+)(\)|;)/.exec(userAgent);<tr><td><a id="l441"></a><a href="#l441">441</a><td> }<tr><td><a id="l442"></a><a href="#l442">442</a><td> if (goog.userAgent.EDGE) {<tr><td><a id="l443"></a><a href="#l443">443</a><td> return /Edge\/([\d\.]+)/.exec(userAgent);<tr><td><a id="l444"></a><a href="#l444">444</a><td> }<tr><td><a id="l445"></a><a href="#l445">445</a><td> if (goog.userAgent.IE) {<tr><td><a id="l446"></a><a href="#l446">446</a><td> return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(userAgent);<tr><td><a id="l447"></a><a href="#l447">447</a><td> }<tr><td><a id="l448"></a><a href="#l448">448</a><td> if (goog.userAgent.WEBKIT) {<tr><td><a id="l449"></a><a href="#l449">449</a><td> // WebKit/125.4<tr><td><a id="l450"></a><a href="#l450">450</a><td> return /WebKit\/(\S+)/.exec(userAgent);<tr><td><a id="l451"></a><a href="#l451">451</a><td> }<tr><td><a id="l452"></a><a href="#l452">452</a><td>};<tr><td><a id="l453"></a><a href="#l453">453</a><td><tr><td><a id="l454"></a><a href="#l454">454</a><td><tr><td><a id="l455"></a><a href="#l455">455</a><td>/**<tr><td><a id="l456"></a><a href="#l456">456</a><td> * @return {number|undefined} Returns the document mode (for testing).<tr><td><a id="l457"></a><a href="#l457">457</a><td> * @private<tr><td><a id="l458"></a><a href="#l458">458</a><td> */<tr><td><a id="l459"></a><a href="#l459">459</a><td>goog.userAgent.getDocumentMode_ = function() {<tr><td><a id="l460"></a><a href="#l460">460</a><td> // NOTE(user): goog.userAgent may be used in context where there is no DOM.<tr><td><a id="l461"></a><a href="#l461">461</a><td> var doc = goog.global['document'];<tr><td><a id="l462"></a><a href="#l462">462</a><td> return doc ? doc['documentMode'] : undefined;<tr><td><a id="l463"></a><a href="#l463">463</a><td>};<tr><td><a id="l464"></a><a href="#l464">464</a><td><tr><td><a id="l465"></a><a href="#l465">465</a><td><tr><td><a id="l466"></a><a href="#l466">466</a><td>/**<tr><td><a id="l467"></a><a href="#l467">467</a><td> * The version of the user agent. This is a string because it might contain<tr><td><a id="l468"></a><a href="#l468">468</a><td> * 'b' (as in beta) as well as multiple dots.<tr><td><a id="l469"></a><a href="#l469">469</a><td> * @type {string}<tr><td><a id="l470"></a><a href="#l470">470</a><td> */<tr><td><a id="l471"></a><a href="#l471">471</a><td>goog.userAgent.VERSION = goog.userAgent.determineVersion_();<tr><td><a id="l472"></a><a href="#l472">472</a><td><tr><td><a id="l473"></a><a href="#l473">473</a><td><tr><td><a id="l474"></a><a href="#l474">474</a><td>/**<tr><td><a id="l475"></a><a href="#l475">475</a><td> * Compares two version numbers.<tr><td><a id="l476"></a><a href="#l476">476</a><td> *<tr><td><a id="l477"></a><a href="#l477">477</a><td> * @param {string} v1 Version of first item.<tr><td><a id="l478"></a><a href="#l478">478</a><td> * @param {string} v2 Version of second item.<tr><td><a id="l479"></a><a href="#l479">479</a><td> *<tr><td><a id="l480"></a><a href="#l480">480</a><td> * @return {number} 1 if first argument is higher<tr><td><a id="l481"></a><a href="#l481">481</a><td> * 0 if arguments are equal<tr><td><a id="l482"></a><a href="#l482">482</a><td> * -1 if second argument is higher.<tr><td><a id="l483"></a><a href="#l483">483</a><td> * @deprecated Use goog.string.compareVersions.<tr><td><a id="l484"></a><a href="#l484">484</a><td> */<tr><td><a id="l485"></a><a href="#l485">485</a><td>goog.userAgent.compare = function(v1, v2) {<tr><td><a id="l486"></a><a href="#l486">486</a><td> return goog.string.compareVersions(v1, v2);<tr><td><a id="l487"></a><a href="#l487">487</a><td>};<tr><td><a id="l488"></a><a href="#l488">488</a><td><tr><td><a id="l489"></a><a href="#l489">489</a><td><tr><td><a id="l490"></a><a href="#l490">490</a><td>/**<tr><td><a id="l491"></a><a href="#l491">491</a><td> * Cache for {@link goog.userAgent.isVersionOrHigher}.<tr><td><a id="l492"></a><a href="#l492">492</a><td> * Calls to compareVersions are surprisingly expensive and, as a browser's<tr><td><a id="l493"></a><a href="#l493">493</a><td> * version number is unlikely to change during a session, we cache the results.<tr><td><a id="l494"></a><a href="#l494">494</a><td> * @const<tr><td><a id="l495"></a><a href="#l495">495</a><td> * @private<tr><td><a id="l496"></a><a href="#l496">496</a><td> */<tr><td><a id="l497"></a><a href="#l497">497</a><td>goog.userAgent.isVersionOrHigherCache_ = {};<tr><td><a id="l498"></a><a href="#l498">498</a><td><tr><td><a id="l499"></a><a href="#l499">499</a><td><tr><td><a id="l500"></a><a href="#l500">500</a><td>/**<tr><td><a id="l501"></a><a href="#l501">501</a><td> * Whether the user agent version is higher or the same as the given version.<tr><td><a id="l502"></a><a href="#l502">502</a><td> * NOTE: When checking the version numbers for Firefox and Safari, be sure to<tr><td><a id="l503"></a><a href="#l503">503</a><td> * use the engine's version, not the browser's version number. For example,<tr><td><a id="l504"></a><a href="#l504">504</a><td> * Firefox 3.0 corresponds to Gecko 1.9 and Safari 3.0 to Webkit 522.11.<tr><td><a id="l505"></a><a href="#l505">505</a><td> * Opera and Internet Explorer versions match the product release number.<br><tr><td><a id="l506"></a><a href="#l506">506</a><td> * @see <a href="http://en.wikipedia.org/wiki/Safari_version_history"><tr><td><a id="l507"></a><a href="#l507">507</a><td> * Webkit</a><tr><td><a id="l508"></a><a href="#l508">508</a><td> * @see <a href="http://en.wikipedia.org/wiki/Gecko_engine">Gecko</a><tr><td><a id="l509"></a><a href="#l509">509</a><td> *<tr><td><a id="l510"></a><a href="#l510">510</a><td> * @param {string|number} version The version to check.<tr><td><a id="l511"></a><a href="#l511">511</a><td> * @return {boolean} Whether the user agent version is higher or the same as<tr><td><a id="l512"></a><a href="#l512">512</a><td> * the given version.<tr><td><a id="l513"></a><a href="#l513">513</a><td> */<tr><td><a id="l514"></a><a href="#l514">514</a><td>goog.userAgent.isVersionOrHigher = function(version) {<tr><td><a id="l515"></a><a href="#l515">515</a><td> return goog.userAgent.ASSUME_ANY_VERSION ||<tr><td><a id="l516"></a><a href="#l516">516</a><td> goog.userAgent.isVersionOrHigherCache_[version] ||<tr><td><a id="l517"></a><a href="#l517">517</a><td> (goog.userAgent.isVersionOrHigherCache_[version] =<tr><td><a id="l518"></a><a href="#l518">518</a><td> goog.string.compareVersions(goog.userAgent.VERSION, version) >= 0);<tr><td><a id="l519"></a><a href="#l519">519</a><td>};<tr><td><a id="l520"></a><a href="#l520">520</a><td><tr><td><a id="l521"></a><a href="#l521">521</a><td><tr><td><a id="l522"></a><a href="#l522">522</a><td>/**<tr><td><a id="l523"></a><a href="#l523">523</a><td> * Deprecated alias to {@code goog.userAgent.isVersionOrHigher}.<tr><td><a id="l524"></a><a href="#l524">524</a><td> * @param {string|number} version The version to check.<tr><td><a id="l525"></a><a href="#l525">525</a><td> * @return {boolean} Whether the user agent version is higher or the same as<tr><td><a id="l526"></a><a href="#l526">526</a><td> * the given version.<tr><td><a id="l527"></a><a href="#l527">527</a><td> * @deprecated Use goog.userAgent.isVersionOrHigher().<tr><td><a id="l528"></a><a href="#l528">528</a><td> */<tr><td><a id="l529"></a><a href="#l529">529</a><td>goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;<tr><td><a id="l530"></a><a href="#l530">530</a><td><tr><td><a id="l531"></a><a href="#l531">531</a><td><tr><td><a id="l532"></a><a href="#l532">532</a><td>/**<tr><td><a id="l533"></a><a href="#l533">533</a><td> * Whether the IE effective document mode is higher or the same as the given<tr><td><a id="l534"></a><a href="#l534">534</a><td> * document mode version.<tr><td><a id="l535"></a><a href="#l535">535</a><td> * NOTE: Only for IE, return false for another browser.<tr><td><a id="l536"></a><a href="#l536">536</a><td> *<tr><td><a id="l537"></a><a href="#l537">537</a><td> * @param {number} documentMode The document mode version to check.<tr><td><a id="l538"></a><a href="#l538">538</a><td> * @return {boolean} Whether the IE effective document mode is higher or the<tr><td><a id="l539"></a><a href="#l539">539</a><td> * same as the given version.<tr><td><a id="l540"></a><a href="#l540">540</a><td> */<tr><td><a id="l541"></a><a href="#l541">541</a><td>goog.userAgent.isDocumentModeOrHigher = function(documentMode) {<tr><td><a id="l542"></a><a href="#l542">542</a><td> return goog.userAgent.DOCUMENT_MODE >= documentMode;<tr><td><a id="l543"></a><a href="#l543">543</a><td>};<tr><td><a id="l544"></a><a href="#l544">544</a><td><tr><td><a id="l545"></a><a href="#l545">545</a><td><tr><td><a id="l546"></a><a href="#l546">546</a><td>/**<tr><td><a id="l547"></a><a href="#l547">547</a><td> * Deprecated alias to {@code goog.userAgent.isDocumentModeOrHigher}.<tr><td><a id="l548"></a><a href="#l548">548</a><td> * @param {number} version The version to check.<tr><td><a id="l549"></a><a href="#l549">549</a><td> * @return {boolean} Whether the IE effective document mode is higher or the<tr><td><a id="l550"></a><a href="#l550">550</a><td> * same as the given version.<tr><td><a id="l551"></a><a href="#l551">551</a><td> * @deprecated Use goog.userAgent.isDocumentModeOrHigher().<tr><td><a id="l552"></a><a href="#l552">552</a><td> */<tr><td><a id="l553"></a><a href="#l553">553</a><td>goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;<tr><td><a id="l554"></a><a href="#l554">554</a><td><tr><td><a id="l555"></a><a href="#l555">555</a><td><tr><td><a id="l556"></a><a href="#l556">556</a><td>/**<tr><td><a id="l557"></a><a href="#l557">557</a><td> * For IE version < 7, documentMode is undefined, so attempt to use the<tr><td><a id="l558"></a><a href="#l558">558</a><td> * CSS1Compat property to see if we are in standards mode. If we are in<tr><td><a id="l559"></a><a href="#l559">559</a><td> * standards mode, treat the browser version as the document mode. Otherwise,<tr><td><a id="l560"></a><a href="#l560">560</a><td> * IE is emulating version 5.<tr><td><a id="l561"></a><a href="#l561">561</a><td> * @type {number|undefined}<tr><td><a id="l562"></a><a href="#l562">562</a><td> * @const<tr><td><a id="l563"></a><a href="#l563">563</a><td> */<tr><td><a id="l564"></a><a href="#l564">564</a><td>goog.userAgent.DOCUMENT_MODE = (function() {<tr><td><a id="l565"></a><a href="#l565">565</a><td> var doc = goog.global['document'];<tr><td><a id="l566"></a><a href="#l566">566</a><td> var mode = goog.userAgent.getDocumentMode_();<tr><td><a id="l567"></a><a href="#l567">567</a><td> if (!doc || !goog.userAgent.IE) {<tr><td><a id="l568"></a><a href="#l568">568</a><td> return undefined;<tr><td><a id="l569"></a><a href="#l569">569</a><td> }<tr><td><a id="l570"></a><a href="#l570">570</a><td> return mode || (doc['compatMode'] == 'CSS1Compat' ?<tr><td><a id="l571"></a><a href="#l571">571</a><td> parseInt(goog.userAgent.VERSION, 10) : 5);<tr><td><a id="l572"></a><a href="#l572">572</a><td>})();</table></div></article><nav><h3><a href="../../../../index.html" tabindex="2">Overview</a></h3><div><input type="checkbox" id="nav-modules" checked/><label for="nav-modules"><h3><span class="selectable" tabindex="2">Modules</span></h3></label><div id="nav-modules-view"></div></div><div><input type="checkbox" id="nav-types" checked/><label for="nav-types"><h3><span class="selectable" tabindex="2">Types</span></h3></label><div id="nav-types-view"></div></div><h3><a href="../../../../Changes.html" tabindex="2">Changes</a></h3></nav></main><footer><div><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></div></footer><script src="../../../../types.js"></script><script src="../../../../dossier.js"></script>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"><meta http-equiv="Content-Language" content="en"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>actionsequence.js</title><link href="../../../dossier.css" rel="stylesheet" type="text/css"><header><div><form><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></header><main><article class="srcfile"><h1>lib/webdriver/actionsequence.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Licensed to the Software Freedom Conservancy (SFC) under one<tr><td><a id="l2"></a><a href="#l2">2</a><td>// or more contributor license agreements. See the NOTICE file<tr><td><a id="l3"></a><a href="#l3">3</a><td>// distributed with this work for additional information<tr><td><a id="l4"></a><a href="#l4">4</a><td>// regarding copyright ownership. The SFC licenses this file<tr><td><a id="l5"></a><a href="#l5">5</a><td>// to you under the Apache License, Version 2.0 (the<tr><td><a id="l6"></a><a href="#l6">6</a><td>// "License"); you may not use this file except in compliance<tr><td><a id="l7"></a><a href="#l7">7</a><td>// with the License. You may obtain a copy of the License at<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l10"></a><a href="#l10">10</a><td>//<tr><td><a id="l11"></a><a href="#l11">11</a><td>// Unless required by applicable law or agreed to in writing,<tr><td><a id="l12"></a><a href="#l12">12</a><td>// software distributed under the License is distributed on an<tr><td><a id="l13"></a><a href="#l13">13</a><td>// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<tr><td><a id="l14"></a><a href="#l14">14</a><td>// KIND, either express or implied. See the License for the<tr><td><a id="l15"></a><a href="#l15">15</a><td>// specific language governing permissions and limitations<tr><td><a id="l16"></a><a href="#l16">16</a><td>// under the License.<tr><td><a id="l17"></a><a href="#l17">17</a><td><tr><td><a id="l18"></a><a href="#l18">18</a><td>goog.provide('webdriver.ActionSequence');<tr><td><a id="l19"></a><a href="#l19">19</a><td><tr><td><a id="l20"></a><a href="#l20">20</a><td>goog.require('goog.array');<tr><td><a id="l21"></a><a href="#l21">21</a><td>goog.require('webdriver.Button');<tr><td><a id="l22"></a><a href="#l22">22</a><td>goog.require('webdriver.Command');<tr><td><a id="l23"></a><a href="#l23">23</a><td>goog.require('webdriver.CommandName');<tr><td><a id="l24"></a><a href="#l24">24</a><td>goog.require('webdriver.Key');<tr><td><a id="l25"></a><a href="#l25">25</a><td><tr><td><a id="l26"></a><a href="#l26">26</a><td><tr><td><a id="l27"></a><a href="#l27">27</a><td><tr><td><a id="l28"></a><a href="#l28">28</a><td>/**<tr><td><a id="l29"></a><a href="#l29">29</a><td> * Class for defining sequences of complex user interactions. Each sequence<tr><td><a id="l30"></a><a href="#l30">30</a><td> * will not be executed until {@link #perform} is called.<tr><td><a id="l31"></a><a href="#l31">31</a><td> *<tr><td><a id="l32"></a><a href="#l32">32</a><td> * Example:<tr><td><a id="l33"></a><a href="#l33">33</a><td> *<tr><td><a id="l34"></a><a href="#l34">34</a><td> * new webdriver.ActionSequence(driver).<tr><td><a id="l35"></a><a href="#l35">35</a><td> * keyDown(webdriver.Key.SHIFT).<tr><td><a id="l36"></a><a href="#l36">36</a><td> * click(element1).<tr><td><a id="l37"></a><a href="#l37">37</a><td> * click(element2).<tr><td><a id="l38"></a><a href="#l38">38</a><td> * dragAndDrop(element3, element4).<tr><td><a id="l39"></a><a href="#l39">39</a><td> * keyUp(webdriver.Key.SHIFT).<tr><td><a id="l40"></a><a href="#l40">40</a><td> * perform();<tr><td><a id="l41"></a><a href="#l41">41</a><td> *<tr><td><a id="l42"></a><a href="#l42">42</a><td> * @param {!webdriver.WebDriver} driver The driver instance to use.<tr><td><a id="l43"></a><a href="#l43">43</a><td> * @constructor<tr><td><a id="l44"></a><a href="#l44">44</a><td> */<tr><td><a id="l45"></a><a href="#l45">45</a><td>webdriver.ActionSequence = function(driver) {<tr><td><a id="l46"></a><a href="#l46">46</a><td><tr><td><a id="l47"></a><a href="#l47">47</a><td> /** @private {!webdriver.WebDriver} */<tr><td><a id="l48"></a><a href="#l48">48</a><td> this.driver_ = driver;<tr><td><a id="l49"></a><a href="#l49">49</a><td><tr><td><a id="l50"></a><a href="#l50">50</a><td> /** @private {!Array.<{description: string, command: !webdriver.Command}>} */<tr><td><a id="l51"></a><a href="#l51">51</a><td> this.actions_ = [];<tr><td><a id="l52"></a><a href="#l52">52</a><td>};<tr><td><a id="l53"></a><a href="#l53">53</a><td><tr><td><a id="l54"></a><a href="#l54">54</a><td><tr><td><a id="l55"></a><a href="#l55">55</a><td>/**<tr><td><a id="l56"></a><a href="#l56">56</a><td> * Schedules an action to be executed each time {@link #perform} is called on<tr><td><a id="l57"></a><a href="#l57">57</a><td> * this instance.<tr><td><a id="l58"></a><a href="#l58">58</a><td> * @param {string} description A description of the command.<tr><td><a id="l59"></a><a href="#l59">59</a><td> * @param {!webdriver.Command} command The command.<tr><td><a id="l60"></a><a href="#l60">60</a><td> * @private<tr><td><a id="l61"></a><a href="#l61">61</a><td> */<tr><td><a id="l62"></a><a href="#l62">62</a><td>webdriver.ActionSequence.prototype.schedule_ = function(description, command) {<tr><td><a id="l63"></a><a href="#l63">63</a><td> this.actions_.push({<tr><td><a id="l64"></a><a href="#l64">64</a><td> description: description,<tr><td><a id="l65"></a><a href="#l65">65</a><td> command: command<tr><td><a id="l66"></a><a href="#l66">66</a><td> });<tr><td><a id="l67"></a><a href="#l67">67</a><td>};<tr><td><a id="l68"></a><a href="#l68">68</a><td><tr><td><a id="l69"></a><a href="#l69">69</a><td><tr><td><a id="l70"></a><a href="#l70">70</a><td>/**<tr><td><a id="l71"></a><a href="#l71">71</a><td> * Executes this action sequence.<tr><td><a id="l72"></a><a href="#l72">72</a><td> * @return {!webdriver.promise.Promise} A promise that will be resolved once<tr><td><a id="l73"></a><a href="#l73">73</a><td> * this sequence has completed.<tr><td><a id="l74"></a><a href="#l74">74</a><td> */<tr><td><a id="l75"></a><a href="#l75">75</a><td>webdriver.ActionSequence.prototype.perform = function() {<tr><td><a id="l76"></a><a href="#l76">76</a><td> // Make a protected copy of the scheduled actions. This will protect against<tr><td><a id="l77"></a><a href="#l77">77</a><td> // users defining additional commands before this sequence is actually<tr><td><a id="l78"></a><a href="#l78">78</a><td> // executed.<tr><td><a id="l79"></a><a href="#l79">79</a><td> var actions = goog.array.clone(this.actions_);<tr><td><a id="l80"></a><a href="#l80">80</a><td> var driver = this.driver_;<tr><td><a id="l81"></a><a href="#l81">81</a><td> return driver.controlFlow().execute(function() {<tr><td><a id="l82"></a><a href="#l82">82</a><td> goog.array.forEach(actions, function(action) {<tr><td><a id="l83"></a><a href="#l83">83</a><td> driver.schedule(action.command, action.description);<tr><td><a id="l84"></a><a href="#l84">84</a><td> });<tr><td><a id="l85"></a><a href="#l85">85</a><td> }, 'ActionSequence.perform');<tr><td><a id="l86"></a><a href="#l86">86</a><td>};<tr><td><a id="l87"></a><a href="#l87">87</a><td><tr><td><a id="l88"></a><a href="#l88">88</a><td><tr><td><a id="l89"></a><a href="#l89">89</a><td>/**<tr><td><a id="l90"></a><a href="#l90">90</a><td> * Moves the mouse. The location to move to may be specified in terms of the<tr><td><a id="l91"></a><a href="#l91">91</a><td> * mouse's current location, an offset relative to the top-left corner of an<tr><td><a id="l92"></a><a href="#l92">92</a><td> * element, or an element (in which case the middle of the element is used).<tr><td><a id="l93"></a><a href="#l93">93</a><td> * @param {(!webdriver.WebElement|{x: number, y: number})} location The<tr><td><a id="l94"></a><a href="#l94">94</a><td> * location to drag to, as either another WebElement or an offset in pixels.<tr><td><a id="l95"></a><a href="#l95">95</a><td> * @param {{x: number, y: number}=} opt_offset If the target {@code location}<tr><td><a id="l96"></a><a href="#l96">96</a><td> * is defined as a {@link webdriver.WebElement}, this parameter defines an<tr><td><a id="l97"></a><a href="#l97">97</a><td> * offset within that element. The offset should be specified in pixels<tr><td><a id="l98"></a><a href="#l98">98</a><td> * relative to the top-left corner of the element's bounding box. If<tr><td><a id="l99"></a><a href="#l99">99</a><td> * omitted, the element's center will be used as the target offset.<tr><td><a id="l100"></a><a href="#l100">100</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l101"></a><a href="#l101">101</a><td> */<tr><td><a id="l102"></a><a href="#l102">102</a><td>webdriver.ActionSequence.prototype.mouseMove = function(location, opt_offset) {<tr><td><a id="l103"></a><a href="#l103">103</a><td> var command = new webdriver.Command(webdriver.CommandName.MOVE_TO);<tr><td><a id="l104"></a><a href="#l104">104</a><td><tr><td><a id="l105"></a><a href="#l105">105</a><td> if (goog.isNumber(location.x)) {<tr><td><a id="l106"></a><a href="#l106">106</a><td> setOffset(/** @type {{x: number, y: number}} */(location));<tr><td><a id="l107"></a><a href="#l107">107</a><td> } else {<tr><td><a id="l108"></a><a href="#l108">108</a><td> command.setParameter('element', location.getRawId());<tr><td><a id="l109"></a><a href="#l109">109</a><td> if (opt_offset) {<tr><td><a id="l110"></a><a href="#l110">110</a><td> setOffset(opt_offset);<tr><td><a id="l111"></a><a href="#l111">111</a><td> }<tr><td><a id="l112"></a><a href="#l112">112</a><td> }<tr><td><a id="l113"></a><a href="#l113">113</a><td><tr><td><a id="l114"></a><a href="#l114">114</a><td> this.schedule_('mouseMove', command);<tr><td><a id="l115"></a><a href="#l115">115</a><td> return this;<tr><td><a id="l116"></a><a href="#l116">116</a><td><tr><td><a id="l117"></a><a href="#l117">117</a><td> /** @param {{x: number, y: number}} offset The offset to use. */<tr><td><a id="l118"></a><a href="#l118">118</a><td> function setOffset(offset) {<tr><td><a id="l119"></a><a href="#l119">119</a><td> command.setParameter('xoffset', offset.x || 0);<tr><td><a id="l120"></a><a href="#l120">120</a><td> command.setParameter('yoffset', offset.y || 0);<tr><td><a id="l121"></a><a href="#l121">121</a><td> }<tr><td><a id="l122"></a><a href="#l122">122</a><td>};<tr><td><a id="l123"></a><a href="#l123">123</a><td><tr><td><a id="l124"></a><a href="#l124">124</a><td><tr><td><a id="l125"></a><a href="#l125">125</a><td>/**<tr><td><a id="l126"></a><a href="#l126">126</a><td> * Schedules a mouse action.<tr><td><a id="l127"></a><a href="#l127">127</a><td> * @param {string} description A simple descriptive label for the scheduled<tr><td><a id="l128"></a><a href="#l128">128</a><td> * action.<tr><td><a id="l129"></a><a href="#l129">129</a><td> * @param {!webdriver.CommandName} commandName The name of the command.<tr><td><a id="l130"></a><a href="#l130">130</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l131"></a><a href="#l131">131</a><td> * the element to interact with or the button to click with.<tr><td><a id="l132"></a><a href="#l132">132</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l133"></a><a href="#l133">133</a><td> * button is specified.<tr><td><a id="l134"></a><a href="#l134">134</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l135"></a><a href="#l135">135</a><td> * {@link webdriver.Button.LEFT}. Ignored if the previous argument is<tr><td><a id="l136"></a><a href="#l136">136</a><td> * provided as a button.<tr><td><a id="l137"></a><a href="#l137">137</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l138"></a><a href="#l138">138</a><td> * @private<tr><td><a id="l139"></a><a href="#l139">139</a><td> */<tr><td><a id="l140"></a><a href="#l140">140</a><td>webdriver.ActionSequence.prototype.scheduleMouseAction_ = function(<tr><td><a id="l141"></a><a href="#l141">141</a><td> description, commandName, opt_elementOrButton, opt_button) {<tr><td><a id="l142"></a><a href="#l142">142</a><td> var button;<tr><td><a id="l143"></a><a href="#l143">143</a><td> if (goog.isNumber(opt_elementOrButton)) {<tr><td><a id="l144"></a><a href="#l144">144</a><td> button = opt_elementOrButton;<tr><td><a id="l145"></a><a href="#l145">145</a><td> } else {<tr><td><a id="l146"></a><a href="#l146">146</a><td> if (opt_elementOrButton) {<tr><td><a id="l147"></a><a href="#l147">147</a><td> this.mouseMove(<tr><td><a id="l148"></a><a href="#l148">148</a><td> /** @type {!webdriver.WebElement} */ (opt_elementOrButton));<tr><td><a id="l149"></a><a href="#l149">149</a><td> }<tr><td><a id="l150"></a><a href="#l150">150</a><td> button = goog.isDef(opt_button) ? opt_button : webdriver.Button.LEFT;<tr><td><a id="l151"></a><a href="#l151">151</a><td> }<tr><td><a id="l152"></a><a href="#l152">152</a><td><tr><td><a id="l153"></a><a href="#l153">153</a><td> var command = new webdriver.Command(commandName).<tr><td><a id="l154"></a><a href="#l154">154</a><td> setParameter('button', button);<tr><td><a id="l155"></a><a href="#l155">155</a><td> this.schedule_(description, command);<tr><td><a id="l156"></a><a href="#l156">156</a><td> return this;<tr><td><a id="l157"></a><a href="#l157">157</a><td>};<tr><td><a id="l158"></a><a href="#l158">158</a><td><tr><td><a id="l159"></a><a href="#l159">159</a><td><tr><td><a id="l160"></a><a href="#l160">160</a><td>/**<tr><td><a id="l161"></a><a href="#l161">161</a><td> * Presses a mouse button. The mouse button will not be released until<tr><td><a id="l162"></a><a href="#l162">162</a><td> * {@link #mouseUp} is called, regardless of whether that call is made in this<tr><td><a id="l163"></a><a href="#l163">163</a><td> * sequence or another. The behavior for out-of-order events (e.g. mouseDown,<tr><td><a id="l164"></a><a href="#l164">164</a><td> * click) is undefined.<tr><td><a id="l165"></a><a href="#l165">165</a><td> *<tr><td><a id="l166"></a><a href="#l166">166</a><td> * If an element is provided, the mouse will first be moved to the center<tr><td><a id="l167"></a><a href="#l167">167</a><td> * of that element. This is equivalent to:<tr><td><a id="l168"></a><a href="#l168">168</a><td> *<tr><td><a id="l169"></a><a href="#l169">169</a><td> * sequence.mouseMove(element).mouseDown()<tr><td><a id="l170"></a><a href="#l170">170</a><td> *<tr><td><a id="l171"></a><a href="#l171">171</a><td> * Warning: this method currently only supports the left mouse button. See<tr><td><a id="l172"></a><a href="#l172">172</a><td> * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047).<tr><td><a id="l173"></a><a href="#l173">173</a><td> *<tr><td><a id="l174"></a><a href="#l174">174</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l175"></a><a href="#l175">175</a><td> * the element to interact with or the button to click with.<tr><td><a id="l176"></a><a href="#l176">176</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l177"></a><a href="#l177">177</a><td> * button is specified.<tr><td><a id="l178"></a><a href="#l178">178</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l179"></a><a href="#l179">179</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l180"></a><a href="#l180">180</a><td> * first argument.<tr><td><a id="l181"></a><a href="#l181">181</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l182"></a><a href="#l182">182</a><td> */<tr><td><a id="l183"></a><a href="#l183">183</a><td>webdriver.ActionSequence.prototype.mouseDown = function(opt_elementOrButton,<tr><td><a id="l184"></a><a href="#l184">184</a><td> opt_button) {<tr><td><a id="l185"></a><a href="#l185">185</a><td> return this.scheduleMouseAction_('mouseDown',<tr><td><a id="l186"></a><a href="#l186">186</a><td> webdriver.CommandName.MOUSE_DOWN, opt_elementOrButton, opt_button);<tr><td><a id="l187"></a><a href="#l187">187</a><td>};<tr><td><a id="l188"></a><a href="#l188">188</a><td><tr><td><a id="l189"></a><a href="#l189">189</a><td><tr><td><a id="l190"></a><a href="#l190">190</a><td>/**<tr><td><a id="l191"></a><a href="#l191">191</a><td> * Releases a mouse button. Behavior is undefined for calling this function<tr><td><a id="l192"></a><a href="#l192">192</a><td> * without a previous call to {@link #mouseDown}.<tr><td><a id="l193"></a><a href="#l193">193</a><td> *<tr><td><a id="l194"></a><a href="#l194">194</a><td> * If an element is provided, the mouse will first be moved to the center<tr><td><a id="l195"></a><a href="#l195">195</a><td> * of that element. This is equivalent to:<tr><td><a id="l196"></a><a href="#l196">196</a><td> *<tr><td><a id="l197"></a><a href="#l197">197</a><td> * sequence.mouseMove(element).mouseUp()<tr><td><a id="l198"></a><a href="#l198">198</a><td> *<tr><td><a id="l199"></a><a href="#l199">199</a><td> * Warning: this method currently only supports the left mouse button. See<tr><td><a id="l200"></a><a href="#l200">200</a><td> * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047).<tr><td><a id="l201"></a><a href="#l201">201</a><td> *<tr><td><a id="l202"></a><a href="#l202">202</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l203"></a><a href="#l203">203</a><td> * the element to interact with or the button to click with.<tr><td><a id="l204"></a><a href="#l204">204</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l205"></a><a href="#l205">205</a><td> * button is specified.<tr><td><a id="l206"></a><a href="#l206">206</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l207"></a><a href="#l207">207</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l208"></a><a href="#l208">208</a><td> * first argument.<tr><td><a id="l209"></a><a href="#l209">209</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l210"></a><a href="#l210">210</a><td> */<tr><td><a id="l211"></a><a href="#l211">211</a><td>webdriver.ActionSequence.prototype.mouseUp = function(opt_elementOrButton,<tr><td><a id="l212"></a><a href="#l212">212</a><td> opt_button) {<tr><td><a id="l213"></a><a href="#l213">213</a><td> return this.scheduleMouseAction_('mouseUp',<tr><td><a id="l214"></a><a href="#l214">214</a><td> webdriver.CommandName.MOUSE_UP, opt_elementOrButton, opt_button);<tr><td><a id="l215"></a><a href="#l215">215</a><td>};<tr><td><a id="l216"></a><a href="#l216">216</a><td><tr><td><a id="l217"></a><a href="#l217">217</a><td><tr><td><a id="l218"></a><a href="#l218">218</a><td>/**<tr><td><a id="l219"></a><a href="#l219">219</a><td> * Convenience function for performing a "drag and drop" manuever. The target<tr><td><a id="l220"></a><a href="#l220">220</a><td> * element may be moved to the location of another element, or by an offset (in<tr><td><a id="l221"></a><a href="#l221">221</a><td> * pixels).<tr><td><a id="l222"></a><a href="#l222">222</a><td> * @param {!webdriver.WebElement} element The element to drag.<tr><td><a id="l223"></a><a href="#l223">223</a><td> * @param {(!webdriver.WebElement|{x: number, y: number})} location The<tr><td><a id="l224"></a><a href="#l224">224</a><td> * location to drag to, either as another WebElement or an offset in pixels.<tr><td><a id="l225"></a><a href="#l225">225</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l226"></a><a href="#l226">226</a><td> */<tr><td><a id="l227"></a><a href="#l227">227</a><td>webdriver.ActionSequence.prototype.dragAndDrop = function(element, location) {<tr><td><a id="l228"></a><a href="#l228">228</a><td> return this.mouseDown(element).mouseMove(location).mouseUp();<tr><td><a id="l229"></a><a href="#l229">229</a><td>};<tr><td><a id="l230"></a><a href="#l230">230</a><td><tr><td><a id="l231"></a><a href="#l231">231</a><td><tr><td><a id="l232"></a><a href="#l232">232</a><td>/**<tr><td><a id="l233"></a><a href="#l233">233</a><td> * Clicks a mouse button.<tr><td><a id="l234"></a><a href="#l234">234</a><td> *<tr><td><a id="l235"></a><a href="#l235">235</a><td> * If an element is provided, the mouse will first be moved to the center<tr><td><a id="l236"></a><a href="#l236">236</a><td> * of that element. This is equivalent to:<tr><td><a id="l237"></a><a href="#l237">237</a><td> *<tr><td><a id="l238"></a><a href="#l238">238</a><td> * sequence.mouseMove(element).click()<tr><td><a id="l239"></a><a href="#l239">239</a><td> *<tr><td><a id="l240"></a><a href="#l240">240</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l241"></a><a href="#l241">241</a><td> * the element to interact with or the button to click with.<tr><td><a id="l242"></a><a href="#l242">242</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l243"></a><a href="#l243">243</a><td> * button is specified.<tr><td><a id="l244"></a><a href="#l244">244</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l245"></a><a href="#l245">245</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l246"></a><a href="#l246">246</a><td> * first argument.<tr><td><a id="l247"></a><a href="#l247">247</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l248"></a><a href="#l248">248</a><td> */<tr><td><a id="l249"></a><a href="#l249">249</a><td>webdriver.ActionSequence.prototype.click = function(opt_elementOrButton,<tr><td><a id="l250"></a><a href="#l250">250</a><td> opt_button) {<tr><td><a id="l251"></a><a href="#l251">251</a><td> return this.scheduleMouseAction_('click',<tr><td><a id="l252"></a><a href="#l252">252</a><td> webdriver.CommandName.CLICK, opt_elementOrButton, opt_button);<tr><td><a id="l253"></a><a href="#l253">253</a><td>};<tr><td><a id="l254"></a><a href="#l254">254</a><td><tr><td><a id="l255"></a><a href="#l255">255</a><td><tr><td><a id="l256"></a><a href="#l256">256</a><td>/**<tr><td><a id="l257"></a><a href="#l257">257</a><td> * Double-clicks a mouse button.<tr><td><a id="l258"></a><a href="#l258">258</a><td> *<tr><td><a id="l259"></a><a href="#l259">259</a><td> * If an element is provided, the mouse will first be moved to the center of<tr><td><a id="l260"></a><a href="#l260">260</a><td> * that element. This is equivalent to:<tr><td><a id="l261"></a><a href="#l261">261</a><td> *<tr><td><a id="l262"></a><a href="#l262">262</a><td> * sequence.mouseMove(element).doubleClick()<tr><td><a id="l263"></a><a href="#l263">263</a><td> *<tr><td><a id="l264"></a><a href="#l264">264</a><td> * Warning: this method currently only supports the left mouse button. See<tr><td><a id="l265"></a><a href="#l265">265</a><td> * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047).<tr><td><a id="l266"></a><a href="#l266">266</a><td> *<tr><td><a id="l267"></a><a href="#l267">267</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l268"></a><a href="#l268">268</a><td> * the element to interact with or the button to click with.<tr><td><a id="l269"></a><a href="#l269">269</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l270"></a><a href="#l270">270</a><td> * button is specified.<tr><td><a id="l271"></a><a href="#l271">271</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l272"></a><a href="#l272">272</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l273"></a><a href="#l273">273</a><td> * first argument.<tr><td><a id="l274"></a><a href="#l274">274</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l275"></a><a href="#l275">275</a><td> */<tr><td><a id="l276"></a><a href="#l276">276</a><td>webdriver.ActionSequence.prototype.doubleClick = function(opt_elementOrButton,<tr><td><a id="l277"></a><a href="#l277">277</a><td> opt_button) {<tr><td><a id="l278"></a><a href="#l278">278</a><td> return this.scheduleMouseAction_('doubleClick',<tr><td><a id="l279"></a><a href="#l279">279</a><td> webdriver.CommandName.DOUBLE_CLICK, opt_elementOrButton, opt_button);<tr><td><a id="l280"></a><a href="#l280">280</a><td>};<tr><td><a id="l281"></a><a href="#l281">281</a><td><tr><td><a id="l282"></a><a href="#l282">282</a><td><tr><td><a id="l283"></a><a href="#l283">283</a><td>/**<tr><td><a id="l284"></a><a href="#l284">284</a><td> * Schedules a keyboard action.<tr><td><a id="l285"></a><a href="#l285">285</a><td> * @param {string} description A simple descriptive label for the scheduled<tr><td><a id="l286"></a><a href="#l286">286</a><td> * action.<tr><td><a id="l287"></a><a href="#l287">287</a><td> * @param {!Array.<(string|!webdriver.Key)>} keys The keys to send.<tr><td><a id="l288"></a><a href="#l288">288</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l289"></a><a href="#l289">289</a><td> * @private<tr><td><a id="l290"></a><a href="#l290">290</a><td> */<tr><td><a id="l291"></a><a href="#l291">291</a><td>webdriver.ActionSequence.prototype.scheduleKeyboardAction_ = function(<tr><td><a id="l292"></a><a href="#l292">292</a><td> description, keys) {<tr><td><a id="l293"></a><a href="#l293">293</a><td> var command =<tr><td><a id="l294"></a><a href="#l294">294</a><td> new webdriver.Command(webdriver.CommandName.SEND_KEYS_TO_ACTIVE_ELEMENT).<tr><td><a id="l295"></a><a href="#l295">295</a><td> setParameter('value', keys);<tr><td><a id="l296"></a><a href="#l296">296</a><td> this.schedule_(description, command);<tr><td><a id="l297"></a><a href="#l297">297</a><td> return this;<tr><td><a id="l298"></a><a href="#l298">298</a><td>};<tr><td><a id="l299"></a><a href="#l299">299</a><td><tr><td><a id="l300"></a><a href="#l300">300</a><td><tr><td><a id="l301"></a><a href="#l301">301</a><td>/**<tr><td><a id="l302"></a><a href="#l302">302</a><td> * Checks that a key is a modifier key.<tr><td><a id="l303"></a><a href="#l303">303</a><td> * @param {!webdriver.Key} key The key to check.<tr><td><a id="l304"></a><a href="#l304">304</a><td> * @throws {Error} If the key is not a modifier key.<tr><td><a id="l305"></a><a href="#l305">305</a><td> * @private<tr><td><a id="l306"></a><a href="#l306">306</a><td> */<tr><td><a id="l307"></a><a href="#l307">307</a><td>webdriver.ActionSequence.checkModifierKey_ = function(key) {<tr><td><a id="l308"></a><a href="#l308">308</a><td> if (key !== webdriver.Key.ALT && key !== webdriver.Key.CONTROL &&<tr><td><a id="l309"></a><a href="#l309">309</a><td> key !== webdriver.Key.SHIFT && key !== webdriver.Key.COMMAND) {<tr><td><a id="l310"></a><a href="#l310">310</a><td> throw Error('Not a modifier key');<tr><td><a id="l311"></a><a href="#l311">311</a><td> }<tr><td><a id="l312"></a><a href="#l312">312</a><td>};<tr><td><a id="l313"></a><a href="#l313">313</a><td><tr><td><a id="l314"></a><a href="#l314">314</a><td><tr><td><a id="l315"></a><a href="#l315">315</a><td>/**<tr><td><a id="l316"></a><a href="#l316">316</a><td> * Performs a modifier key press. The modifier key is <em>not released</em><tr><td><a id="l317"></a><a href="#l317">317</a><td> * until {@link #keyUp} or {@link #sendKeys} is called. The key press will be<tr><td><a id="l318"></a><a href="#l318">318</a><td> * targetted at the currently focused element.<tr><td><a id="l319"></a><a href="#l319">319</a><td> * @param {!webdriver.Key} key The modifier key to push. Must be one of<tr><td><a id="l320"></a><a href="#l320">320</a><td> * {ALT, CONTROL, SHIFT, COMMAND, META}.<tr><td><a id="l321"></a><a href="#l321">321</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l322"></a><a href="#l322">322</a><td> * @throws {Error} If the key is not a valid modifier key.<tr><td><a id="l323"></a><a href="#l323">323</a><td> */<tr><td><a id="l324"></a><a href="#l324">324</a><td>webdriver.ActionSequence.prototype.keyDown = function(key) {<tr><td><a id="l325"></a><a href="#l325">325</a><td> webdriver.ActionSequence.checkModifierKey_(key);<tr><td><a id="l326"></a><a href="#l326">326</a><td> return this.scheduleKeyboardAction_('keyDown', [key]);<tr><td><a id="l327"></a><a href="#l327">327</a><td>};<tr><td><a id="l328"></a><a href="#l328">328</a><td><tr><td><a id="l329"></a><a href="#l329">329</a><td><tr><td><a id="l330"></a><a href="#l330">330</a><td>/**<tr><td><a id="l331"></a><a href="#l331">331</a><td> * Performs a modifier key release. The release is targetted at the currently<tr><td><a id="l332"></a><a href="#l332">332</a><td> * focused element.<tr><td><a id="l333"></a><a href="#l333">333</a><td> * @param {!webdriver.Key} key The modifier key to release. Must be one of<tr><td><a id="l334"></a><a href="#l334">334</a><td> * {ALT, CONTROL, SHIFT, COMMAND, META}.<tr><td><a id="l335"></a><a href="#l335">335</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l336"></a><a href="#l336">336</a><td> * @throws {Error} If the key is not a valid modifier key.<tr><td><a id="l337"></a><a href="#l337">337</a><td> */<tr><td><a id="l338"></a><a href="#l338">338</a><td>webdriver.ActionSequence.prototype.keyUp = function(key) {<tr><td><a id="l339"></a><a href="#l339">339</a><td> webdriver.ActionSequence.checkModifierKey_(key);<tr><td><a id="l340"></a><a href="#l340">340</a><td> return this.scheduleKeyboardAction_('keyUp', [key]);<tr><td><a id="l341"></a><a href="#l341">341</a><td>};<tr><td><a id="l342"></a><a href="#l342">342</a><td><tr><td><a id="l343"></a><a href="#l343">343</a><td><tr><td><a id="l344"></a><a href="#l344">344</a><td>/**<tr><td><a id="l345"></a><a href="#l345">345</a><td> * Simulates typing multiple keys. Each modifier key encountered in the<tr><td><a id="l346"></a><a href="#l346">346</a><td> * sequence will not be released until it is encountered again. All key events<tr><td><a id="l347"></a><a href="#l347">347</a><td> * will be targetted at the currently focused element.<tr><td><a id="l348"></a><a href="#l348">348</a><td> * @param {...(string|!webdriver.Key|!Array.<(string|!webdriver.Key)>)} var_args<tr><td><a id="l349"></a><a href="#l349">349</a><td> * The keys to type.<tr><td><a id="l350"></a><a href="#l350">350</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l351"></a><a href="#l351">351</a><td> * @throws {Error} If the key is not a valid modifier key.<tr><td><a id="l352"></a><a href="#l352">352</a><td> */<tr><td><a id="l353"></a><a href="#l353">353</a><td>webdriver.ActionSequence.prototype.sendKeys = function(var_args) {<tr><td><a id="l354"></a><a href="#l354">354</a><td> var keys = goog.array.flatten(goog.array.slice(arguments, 0));<tr><td><a id="l355"></a><a href="#l355">355</a><td> return this.scheduleKeyboardAction_('sendKeys', keys);<tr><td><a id="l356"></a><a href="#l356">356</a><td>};</table></div></article><nav><h3><a href="../../../index.html" tabindex="2">Overview</a></h3><div><input type="checkbox" id="nav-modules" checked/><label for="nav-modules"><h3><span class="selectable" tabindex="2">Modules</span></h3></label><div id="nav-modules-view"></div></div><div><input type="checkbox" id="nav-types" checked/><label for="nav-types"><h3><span class="selectable" tabindex="2">Types</span></h3></label><div id="nav-types-view"></div></div><h3><a href="../../../Changes.html" tabindex="2">Changes</a></h3></nav></main><footer><div><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></div></footer><script src="../../../types.js"></script><script src="../../../dossier.js"></script>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"><meta http-equiv="Content-Language" content="en"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>button.js</title><link href="../../../dossier.css" rel="stylesheet" type="text/css"><header><div><form><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></header><main><article class="srcfile"><h1>lib/webdriver/button.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Licensed to the Software Freedom Conservancy (SFC) under one<tr><td><a id="l2"></a><a href="#l2">2</a><td>// or more contributor license agreements. See the NOTICE file<tr><td><a id="l3"></a><a href="#l3">3</a><td>// distributed with this work for additional information<tr><td><a id="l4"></a><a href="#l4">4</a><td>// regarding copyright ownership. The SFC licenses this file<tr><td><a id="l5"></a><a href="#l5">5</a><td>// to you under the Apache License, Version 2.0 (the<tr><td><a id="l6"></a><a href="#l6">6</a><td>// "License"); you may not use this file except in compliance<tr><td><a id="l7"></a><a href="#l7">7</a><td>// with the License. You may obtain a copy of the License at<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l10"></a><a href="#l10">10</a><td>//<tr><td><a id="l11"></a><a href="#l11">11</a><td>// Unless required by applicable law or agreed to in writing,<tr><td><a id="l12"></a><a href="#l12">12</a><td>// software distributed under the License is distributed on an<tr><td><a id="l13"></a><a href="#l13">13</a><td>// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<tr><td><a id="l14"></a><a href="#l14">14</a><td>// KIND, either express or implied. See the License for the<tr><td><a id="l15"></a><a href="#l15">15</a><td>// specific language governing permissions and limitations<tr><td><a id="l16"></a><a href="#l16">16</a><td>// under the License.<tr><td><a id="l17"></a><a href="#l17">17</a><td><tr><td><a id="l18"></a><a href="#l18">18</a><td>goog.provide('webdriver.Button');<tr><td><a id="l19"></a><a href="#l19">19</a><td><tr><td><a id="l20"></a><a href="#l20">20</a><td><tr><td><a id="l21"></a><a href="#l21">21</a><td>/**<tr><td><a id="l22"></a><a href="#l22">22</a><td> * Enumeration of the buttons used in the advanced interactions API.<tr><td><a id="l23"></a><a href="#l23">23</a><td> * @enum {number}<tr><td><a id="l24"></a><a href="#l24">24</a><td> */<tr><td><a id="l25"></a><a href="#l25">25</a><td>webdriver.Button = {<tr><td><a id="l26"></a><a href="#l26">26</a><td> LEFT: 0,<tr><td><a id="l27"></a><a href="#l27">27</a><td> MIDDLE: 1,<tr><td><a id="l28"></a><a href="#l28">28</a><td> RIGHT: 2<tr><td><a id="l29"></a><a href="#l29">29</a><td>};</table></div></article><nav><h3><a href="../../../index.html" tabindex="2">Overview</a></h3><div><input type="checkbox" id="nav-modules" checked/><label for="nav-modules"><h3><span class="selectable" tabindex="2">Modules</span></h3></label><div id="nav-modules-view"></div></div><div><input type="checkbox" id="nav-types" checked/><label for="nav-types"><h3><span class="selectable" tabindex="2">Types</span></h3></label><div id="nav-types-view"></div></div><h3><a href="../../../Changes.html" tabindex="2">Changes</a></h3></nav></main><footer><div><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></div></footer><script src="../../../types.js"></script><script src="../../../dossier.js"></script>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"><meta http-equiv="Content-Language" content="en"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>capabilities.js</title><link href="../../../dossier.css" rel="stylesheet" type="text/css"><header><div><form><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></header><main><article class="srcfile"><h1>lib/webdriver/capabilities.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Licensed to the Software Freedom Conservancy (SFC) under one<tr><td><a id="l2"></a><a href="#l2">2</a><td>// or more contributor license agreements. See the NOTICE file<tr><td><a id="l3"></a><a href="#l3">3</a><td>// distributed with this work for additional information<tr><td><a id="l4"></a><a href="#l4">4</a><td>// regarding copyright ownership. The SFC licenses this file<tr><td><a id="l5"></a><a href="#l5">5</a><td>// to you under the Apache License, Version 2.0 (the<tr><td><a id="l6"></a><a href="#l6">6</a><td>// "License"); you may not use this file except in compliance<tr><td><a id="l7"></a><a href="#l7">7</a><td>// with the License. You may obtain a copy of the License at<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l10"></a><a href="#l10">10</a><td>//<tr><td><a id="l11"></a><a href="#l11">11</a><td>// Unless required by applicable law or agreed to in writing,<tr><td><a id="l12"></a><a href="#l12">12</a><td>// software distributed under the License is distributed on an<tr><td><a id="l13"></a><a href="#l13">13</a><td>// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<tr><td><a id="l14"></a><a href="#l14">14</a><td>// KIND, either express or implied. See the License for the<tr><td><a id="l15"></a><a href="#l15">15</a><td>// specific language governing permissions and limitations<tr><td><a id="l16"></a><a href="#l16">16</a><td>// under the License.<tr><td><a id="l17"></a><a href="#l17">17</a><td><tr><td><a id="l18"></a><a href="#l18">18</a><td>/**<tr><td><a id="l19"></a><a href="#l19">19</a><td> * @fileoverview Defines the webdriver.Capabilities class.<tr><td><a id="l20"></a><a href="#l20">20</a><td> */<tr><td><a id="l21"></a><a href="#l21">21</a><td><tr><td><a id="l22"></a><a href="#l22">22</a><td>goog.provide('webdriver.Browser');<tr><td><a id="l23"></a><a href="#l23">23</a><td>goog.provide('webdriver.Capabilities');<tr><td><a id="l24"></a><a href="#l24">24</a><td>goog.provide('webdriver.Capability');<tr><td><a id="l25"></a><a href="#l25">25</a><td>goog.provide('webdriver.ProxyConfig');<tr><td><a id="l26"></a><a href="#l26">26</a><td><tr><td><a id="l27"></a><a href="#l27">27</a><td>goog.require('webdriver.Serializable');<tr><td><a id="l28"></a><a href="#l28">28</a><td>goog.require('webdriver.logging');<tr><td><a id="l29"></a><a href="#l29">29</a><td><tr><td><a id="l30"></a><a href="#l30">30</a><td><tr><td><a id="l31"></a><a href="#l31">31</a><td><tr><td><a id="l32"></a><a href="#l32">32</a><td>/**<tr><td><a id="l33"></a><a href="#l33">33</a><td> * Recognized browser names.<tr><td><a id="l34"></a><a href="#l34">34</a><td> * @enum {string}<tr><td><a id="l35"></a><a href="#l35">35</a><td> */<tr><td><a id="l36"></a><a href="#l36">36</a><td>webdriver.Browser = {<tr><td><a id="l37"></a><a href="#l37">37</a><td> ANDROID: 'android',<tr><td><a id="l38"></a><a href="#l38">38</a><td> CHROME: 'chrome',<tr><td><a id="l39"></a><a href="#l39">39</a><td> FIREFOX: 'firefox',<tr><td><a id="l40"></a><a href="#l40">40</a><td> IE: 'internet explorer',<tr><td><a id="l41"></a><a href="#l41">41</a><td> INTERNET_EXPLORER: 'internet explorer',<tr><td><a id="l42"></a><a href="#l42">42</a><td> IPAD: 'iPad',<tr><td><a id="l43"></a><a href="#l43">43</a><td> IPHONE: 'iPhone',<tr><td><a id="l44"></a><a href="#l44">44</a><td> OPERA: 'opera',<tr><td><a id="l45"></a><a href="#l45">45</a><td> PHANTOM_JS: 'phantomjs',<tr><td><a id="l46"></a><a href="#l46">46</a><td> SAFARI: 'safari',<tr><td><a id="l47"></a><a href="#l47">47</a><td> HTMLUNIT: 'htmlunit'<tr><td><a id="l48"></a><a href="#l48">48</a><td>};<tr><td><a id="l49"></a><a href="#l49">49</a><td><tr><td><a id="l50"></a><a href="#l50">50</a><td><tr><td><a id="l51"></a><a href="#l51">51</a><td><tr><td><a id="l52"></a><a href="#l52">52</a><td>/**<tr><td><a id="l53"></a><a href="#l53">53</a><td> * Describes how a proxy should be configured for a WebDriver session.<tr><td><a id="l54"></a><a href="#l54">54</a><td> * Proxy configuration object, as defined by the WebDriver wire protocol.<tr><td><a id="l55"></a><a href="#l55">55</a><td> * @typedef {(<tr><td><a id="l56"></a><a href="#l56">56</a><td> * {proxyType: string}|<tr><td><a id="l57"></a><a href="#l57">57</a><td> * {proxyType: string,<tr><td><a id="l58"></a><a href="#l58">58</a><td> * proxyAutoconfigUrl: string}|<tr><td><a id="l59"></a><a href="#l59">59</a><td> * {proxyType: string,<tr><td><a id="l60"></a><a href="#l60">60</a><td> * ftpProxy: string,<tr><td><a id="l61"></a><a href="#l61">61</a><td> * httpProxy: string,<tr><td><a id="l62"></a><a href="#l62">62</a><td> * sslProxy: string,<tr><td><a id="l63"></a><a href="#l63">63</a><td> * noProxy: string})}<tr><td><a id="l64"></a><a href="#l64">64</a><td> */<tr><td><a id="l65"></a><a href="#l65">65</a><td>webdriver.ProxyConfig;<tr><td><a id="l66"></a><a href="#l66">66</a><td><tr><td><a id="l67"></a><a href="#l67">67</a><td><tr><td><a id="l68"></a><a href="#l68">68</a><td><tr><td><a id="l69"></a><a href="#l69">69</a><td>/**<tr><td><a id="l70"></a><a href="#l70">70</a><td> * Common webdriver capability keys.<tr><td><a id="l71"></a><a href="#l71">71</a><td> * @enum {string}<tr><td><a id="l72"></a><a href="#l72">72</a><td> */<tr><td><a id="l73"></a><a href="#l73">73</a><td>webdriver.Capability = {<tr><td><a id="l74"></a><a href="#l74">74</a><td><tr><td><a id="l75"></a><a href="#l75">75</a><td> /**<tr><td><a id="l76"></a><a href="#l76">76</a><td> * Indicates whether a driver should accept all SSL certs by default. This<tr><td><a id="l77"></a><a href="#l77">77</a><td> * capability only applies when requesting a new session. To query whether<tr><td><a id="l78"></a><a href="#l78">78</a><td> * a driver can handle insecure SSL certs, see {@link #SECURE_SSL}.<tr><td><a id="l79"></a><a href="#l79">79</a><td> */<tr><td><a id="l80"></a><a href="#l80">80</a><td> ACCEPT_SSL_CERTS: 'acceptSslCerts',<tr><td><a id="l81"></a><a href="#l81">81</a><td><tr><td><a id="l82"></a><a href="#l82">82</a><td><tr><td><a id="l83"></a><a href="#l83">83</a><td> /**<tr><td><a id="l84"></a><a href="#l84">84</a><td> * The browser name. Common browser names are defined in the<tr><td><a id="l85"></a><a href="#l85">85</a><td> * {@link webdriver.Browser} enum.<tr><td><a id="l86"></a><a href="#l86">86</a><td> */<tr><td><a id="l87"></a><a href="#l87">87</a><td> BROWSER_NAME: 'browserName',<tr><td><a id="l88"></a><a href="#l88">88</a><td><tr><td><a id="l89"></a><a href="#l89">89</a><td> /**<tr><td><a id="l90"></a><a href="#l90">90</a><td> * Defines how elements should be scrolled into the viewport for interaction.<tr><td><a id="l91"></a><a href="#l91">91</a><td> * This capability will be set to zero (0) if elements are aligned with the<tr><td><a id="l92"></a><a href="#l92">92</a><td> * top of the viewport, or one (1) if aligned with the bottom. The default<tr><td><a id="l93"></a><a href="#l93">93</a><td> * behavior is to align with the top of the viewport.<tr><td><a id="l94"></a><a href="#l94">94</a><td> */<tr><td><a id="l95"></a><a href="#l95">95</a><td> ELEMENT_SCROLL_BEHAVIOR: 'elementScrollBehavior',<tr><td><a id="l96"></a><a href="#l96">96</a><td><tr><td><a id="l97"></a><a href="#l97">97</a><td> /**<tr><td><a id="l98"></a><a href="#l98">98</a><td> * Whether the driver is capable of handling modal alerts (e.g. alert,<tr><td><a id="l99"></a><a href="#l99">99</a><td> * confirm, prompt). To define how a driver <i>should</i> handle alerts,<tr><td><a id="l100"></a><a href="#l100">100</a><td> * use {@link #UNEXPECTED_ALERT_BEHAVIOR}.<tr><td><a id="l101"></a><a href="#l101">101</a><td> */<tr><td><a id="l102"></a><a href="#l102">102</a><td> HANDLES_ALERTS: 'handlesAlerts',<tr><td><a id="l103"></a><a href="#l103">103</a><td><tr><td><a id="l104"></a><a href="#l104">104</a><td> /**<tr><td><a id="l105"></a><a href="#l105">105</a><td> * Key for the logging driver logging preferences.<tr><td><a id="l106"></a><a href="#l106">106</a><td> */<tr><td><a id="l107"></a><a href="#l107">107</a><td> LOGGING_PREFS: 'loggingPrefs',<tr><td><a id="l108"></a><a href="#l108">108</a><td><tr><td><a id="l109"></a><a href="#l109">109</a><td> /**<tr><td><a id="l110"></a><a href="#l110">110</a><td> * Whether this session generates native events when simulating user input.<tr><td><a id="l111"></a><a href="#l111">111</a><td> */<tr><td><a id="l112"></a><a href="#l112">112</a><td> NATIVE_EVENTS: 'nativeEvents',<tr><td><a id="l113"></a><a href="#l113">113</a><td><tr><td><a id="l114"></a><a href="#l114">114</a><td> /**<tr><td><a id="l115"></a><a href="#l115">115</a><td> * Describes the platform the browser is running on. Will be one of<tr><td><a id="l116"></a><a href="#l116">116</a><td> * ANDROID, IOS, LINUX, MAC, UNIX, or WINDOWS. When <i>requesting</i> a<tr><td><a id="l117"></a><a href="#l117">117</a><td> * session, ANY may be used to indicate no platform preference (this is<tr><td><a id="l118"></a><a href="#l118">118</a><td> * semantically equivalent to omitting the platform capability).<tr><td><a id="l119"></a><a href="#l119">119</a><td> */<tr><td><a id="l120"></a><a href="#l120">120</a><td> PLATFORM: 'platform',<tr><td><a id="l121"></a><a href="#l121">121</a><td><tr><td><a id="l122"></a><a href="#l122">122</a><td> /**<tr><td><a id="l123"></a><a href="#l123">123</a><td> * Describes the proxy configuration to use for a new WebDriver session.<tr><td><a id="l124"></a><a href="#l124">124</a><td> */<tr><td><a id="l125"></a><a href="#l125">125</a><td> PROXY: 'proxy',<tr><td><a id="l126"></a><a href="#l126">126</a><td><tr><td><a id="l127"></a><a href="#l127">127</a><td> /** Whether the driver supports changing the brower's orientation. */<tr><td><a id="l128"></a><a href="#l128">128</a><td> ROTATABLE: 'rotatable',<tr><td><a id="l129"></a><a href="#l129">129</a><td><tr><td><a id="l130"></a><a href="#l130">130</a><td> /**<tr><td><a id="l131"></a><a href="#l131">131</a><td> * Whether a driver is only capable of handling secure SSL certs. To request<tr><td><a id="l132"></a><a href="#l132">132</a><td> * that a driver accept insecure SSL certs by default, use<tr><td><a id="l133"></a><a href="#l133">133</a><td> * {@link #ACCEPT_SSL_CERTS}.<tr><td><a id="l134"></a><a href="#l134">134</a><td> */<tr><td><a id="l135"></a><a href="#l135">135</a><td> SECURE_SSL: 'secureSsl',<tr><td><a id="l136"></a><a href="#l136">136</a><td><tr><td><a id="l137"></a><a href="#l137">137</a><td> /** Whether the driver supports manipulating the app cache. */<tr><td><a id="l138"></a><a href="#l138">138</a><td> SUPPORTS_APPLICATION_CACHE: 'applicationCacheEnabled',<tr><td><a id="l139"></a><a href="#l139">139</a><td><tr><td><a id="l140"></a><a href="#l140">140</a><td> /** Whether the driver supports locating elements with CSS selectors. */<tr><td><a id="l141"></a><a href="#l141">141</a><td> SUPPORTS_CSS_SELECTORS: 'cssSelectorsEnabled',<tr><td><a id="l142"></a><a href="#l142">142</a><td><tr><td><a id="l143"></a><a href="#l143">143</a><td> /** Whether the browser supports JavaScript. */<tr><td><a id="l144"></a><a href="#l144">144</a><td> SUPPORTS_JAVASCRIPT: 'javascriptEnabled',<tr><td><a id="l145"></a><a href="#l145">145</a><td><tr><td><a id="l146"></a><a href="#l146">146</a><td> /** Whether the driver supports controlling the browser's location info. */<tr><td><a id="l147"></a><a href="#l147">147</a><td> SUPPORTS_LOCATION_CONTEXT: 'locationContextEnabled',<tr><td><a id="l148"></a><a href="#l148">148</a><td><tr><td><a id="l149"></a><a href="#l149">149</a><td> /** Whether the driver supports taking screenshots. */<tr><td><a id="l150"></a><a href="#l150">150</a><td> TAKES_SCREENSHOT: 'takesScreenshot',<tr><td><a id="l151"></a><a href="#l151">151</a><td><tr><td><a id="l152"></a><a href="#l152">152</a><td> /**<tr><td><a id="l153"></a><a href="#l153">153</a><td> * Defines how the driver should handle unexpected alerts. The value should<tr><td><a id="l154"></a><a href="#l154">154</a><td> * be one of "accept", "dismiss", or "ignore.<tr><td><a id="l155"></a><a href="#l155">155</a><td> */<tr><td><a id="l156"></a><a href="#l156">156</a><td> UNEXPECTED_ALERT_BEHAVIOR: 'unexpectedAlertBehavior',<tr><td><a id="l157"></a><a href="#l157">157</a><td><tr><td><a id="l158"></a><a href="#l158">158</a><td> /** Defines the browser version. */<tr><td><a id="l159"></a><a href="#l159">159</a><td> VERSION: 'version'<tr><td><a id="l160"></a><a href="#l160">160</a><td>};<tr><td><a id="l161"></a><a href="#l161">161</a><td><tr><td><a id="l162"></a><a href="#l162">162</a><td><tr><td><a id="l163"></a><a href="#l163">163</a><td><tr><td><a id="l164"></a><a href="#l164">164</a><td>/**<tr><td><a id="l165"></a><a href="#l165">165</a><td> * @param {(webdriver.Capabilities|Object)=} opt_other Another set of<tr><td><a id="l166"></a><a href="#l166">166</a><td> * capabilities to merge into this instance.<tr><td><a id="l167"></a><a href="#l167">167</a><td> * @constructor<tr><td><a id="l168"></a><a href="#l168">168</a><td> * @extends {webdriver.Serializable.<!Object.<string, ?>>}<tr><td><a id="l169"></a><a href="#l169">169</a><td> */<tr><td><a id="l170"></a><a href="#l170">170</a><td>webdriver.Capabilities = function(opt_other) {<tr><td><a id="l171"></a><a href="#l171">171</a><td> webdriver.Serializable.call(this);<tr><td><a id="l172"></a><a href="#l172">172</a><td><tr><td><a id="l173"></a><a href="#l173">173</a><td> /** @private {!Object.<string, ?>} */<tr><td><a id="l174"></a><a href="#l174">174</a><td> this.caps_ = {};<tr><td><a id="l175"></a><a href="#l175">175</a><td><tr><td><a id="l176"></a><a href="#l176">176</a><td> if (opt_other) {<tr><td><a id="l177"></a><a href="#l177">177</a><td> this.merge(opt_other);<tr><td><a id="l178"></a><a href="#l178">178</a><td> }<tr><td><a id="l179"></a><a href="#l179">179</a><td>};<tr><td><a id="l180"></a><a href="#l180">180</a><td>goog.inherits(webdriver.Capabilities, webdriver.Serializable);<tr><td><a id="l181"></a><a href="#l181">181</a><td><tr><td><a id="l182"></a><a href="#l182">182</a><td><tr><td><a id="l183"></a><a href="#l183">183</a><td>/**<tr><td><a id="l184"></a><a href="#l184">184</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Android.<tr><td><a id="l185"></a><a href="#l185">185</a><td> */<tr><td><a id="l186"></a><a href="#l186">186</a><td>webdriver.Capabilities.android = function() {<tr><td><a id="l187"></a><a href="#l187">187</a><td> return new webdriver.Capabilities().<tr><td><a id="l188"></a><a href="#l188">188</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.ANDROID).<tr><td><a id="l189"></a><a href="#l189">189</a><td> set(webdriver.Capability.PLATFORM, 'ANDROID');<tr><td><a id="l190"></a><a href="#l190">190</a><td>};<tr><td><a id="l191"></a><a href="#l191">191</a><td><tr><td><a id="l192"></a><a href="#l192">192</a><td><tr><td><a id="l193"></a><a href="#l193">193</a><td>/**<tr><td><a id="l194"></a><a href="#l194">194</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Chrome.<tr><td><a id="l195"></a><a href="#l195">195</a><td> */<tr><td><a id="l196"></a><a href="#l196">196</a><td>webdriver.Capabilities.chrome = function() {<tr><td><a id="l197"></a><a href="#l197">197</a><td> return new webdriver.Capabilities().<tr><td><a id="l198"></a><a href="#l198">198</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.CHROME);<tr><td><a id="l199"></a><a href="#l199">199</a><td>};<tr><td><a id="l200"></a><a href="#l200">200</a><td><tr><td><a id="l201"></a><a href="#l201">201</a><td><tr><td><a id="l202"></a><a href="#l202">202</a><td>/**<tr><td><a id="l203"></a><a href="#l203">203</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Firefox.<tr><td><a id="l204"></a><a href="#l204">204</a><td> */<tr><td><a id="l205"></a><a href="#l205">205</a><td>webdriver.Capabilities.firefox = function() {<tr><td><a id="l206"></a><a href="#l206">206</a><td> return new webdriver.Capabilities().<tr><td><a id="l207"></a><a href="#l207">207</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.FIREFOX);<tr><td><a id="l208"></a><a href="#l208">208</a><td>};<tr><td><a id="l209"></a><a href="#l209">209</a><td><tr><td><a id="l210"></a><a href="#l210">210</a><td><tr><td><a id="l211"></a><a href="#l211">211</a><td>/**<tr><td><a id="l212"></a><a href="#l212">212</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for<tr><td><a id="l213"></a><a href="#l213">213</a><td> * Internet Explorer.<tr><td><a id="l214"></a><a href="#l214">214</a><td> */<tr><td><a id="l215"></a><a href="#l215">215</a><td>webdriver.Capabilities.ie = function() {<tr><td><a id="l216"></a><a href="#l216">216</a><td> return new webdriver.Capabilities().<tr><td><a id="l217"></a><a href="#l217">217</a><td> set(webdriver.Capability.BROWSER_NAME,<tr><td><a id="l218"></a><a href="#l218">218</a><td> webdriver.Browser.INTERNET_EXPLORER).<tr><td><a id="l219"></a><a href="#l219">219</a><td> set(webdriver.Capability.PLATFORM, 'WINDOWS');<tr><td><a id="l220"></a><a href="#l220">220</a><td>};<tr><td><a id="l221"></a><a href="#l221">221</a><td><tr><td><a id="l222"></a><a href="#l222">222</a><td><tr><td><a id="l223"></a><a href="#l223">223</a><td>/**<tr><td><a id="l224"></a><a href="#l224">224</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for iPad.<tr><td><a id="l225"></a><a href="#l225">225</a><td> */<tr><td><a id="l226"></a><a href="#l226">226</a><td>webdriver.Capabilities.ipad = function() {<tr><td><a id="l227"></a><a href="#l227">227</a><td> return new webdriver.Capabilities().<tr><td><a id="l228"></a><a href="#l228">228</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.IPAD).<tr><td><a id="l229"></a><a href="#l229">229</a><td> set(webdriver.Capability.PLATFORM, 'MAC');<tr><td><a id="l230"></a><a href="#l230">230</a><td>};<tr><td><a id="l231"></a><a href="#l231">231</a><td><tr><td><a id="l232"></a><a href="#l232">232</a><td><tr><td><a id="l233"></a><a href="#l233">233</a><td>/**<tr><td><a id="l234"></a><a href="#l234">234</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for iPhone.<tr><td><a id="l235"></a><a href="#l235">235</a><td> */<tr><td><a id="l236"></a><a href="#l236">236</a><td>webdriver.Capabilities.iphone = function() {<tr><td><a id="l237"></a><a href="#l237">237</a><td> return new webdriver.Capabilities().<tr><td><a id="l238"></a><a href="#l238">238</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.IPHONE).<tr><td><a id="l239"></a><a href="#l239">239</a><td> set(webdriver.Capability.PLATFORM, 'MAC');<tr><td><a id="l240"></a><a href="#l240">240</a><td>};<tr><td><a id="l241"></a><a href="#l241">241</a><td><tr><td><a id="l242"></a><a href="#l242">242</a><td><tr><td><a id="l243"></a><a href="#l243">243</a><td>/**<tr><td><a id="l244"></a><a href="#l244">244</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Opera.<tr><td><a id="l245"></a><a href="#l245">245</a><td> */<tr><td><a id="l246"></a><a href="#l246">246</a><td>webdriver.Capabilities.opera = function() {<tr><td><a id="l247"></a><a href="#l247">247</a><td> return new webdriver.Capabilities().<tr><td><a id="l248"></a><a href="#l248">248</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.OPERA);<tr><td><a id="l249"></a><a href="#l249">249</a><td>};<tr><td><a id="l250"></a><a href="#l250">250</a><td><tr><td><a id="l251"></a><a href="#l251">251</a><td>/**<tr><td><a id="l252"></a><a href="#l252">252</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for<tr><td><a id="l253"></a><a href="#l253">253</a><td> * PhantomJS.<tr><td><a id="l254"></a><a href="#l254">254</a><td> */<tr><td><a id="l255"></a><a href="#l255">255</a><td>webdriver.Capabilities.phantomjs = function() {<tr><td><a id="l256"></a><a href="#l256">256</a><td> return new webdriver.Capabilities().<tr><td><a id="l257"></a><a href="#l257">257</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.PHANTOM_JS);<tr><td><a id="l258"></a><a href="#l258">258</a><td>};<tr><td><a id="l259"></a><a href="#l259">259</a><td><tr><td><a id="l260"></a><a href="#l260">260</a><td><tr><td><a id="l261"></a><a href="#l261">261</a><td>/**<tr><td><a id="l262"></a><a href="#l262">262</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Safari.<tr><td><a id="l263"></a><a href="#l263">263</a><td> */<tr><td><a id="l264"></a><a href="#l264">264</a><td>webdriver.Capabilities.safari = function() {<tr><td><a id="l265"></a><a href="#l265">265</a><td> return new webdriver.Capabilities().<tr><td><a id="l266"></a><a href="#l266">266</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.SAFARI).<tr><td><a id="l267"></a><a href="#l267">267</a><td> set(webdriver.Capability.PLATFORM, 'MAC');<tr><td><a id="l268"></a><a href="#l268">268</a><td>};<tr><td><a id="l269"></a><a href="#l269">269</a><td><tr><td><a id="l270"></a><a href="#l270">270</a><td><tr><td><a id="l271"></a><a href="#l271">271</a><td>/**<tr><td><a id="l272"></a><a href="#l272">272</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for HTMLUnit.<tr><td><a id="l273"></a><a href="#l273">273</a><td> */<tr><td><a id="l274"></a><a href="#l274">274</a><td>webdriver.Capabilities.htmlunit = function() {<tr><td><a id="l275"></a><a href="#l275">275</a><td> return new webdriver.Capabilities().<tr><td><a id="l276"></a><a href="#l276">276</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.HTMLUNIT);<tr><td><a id="l277"></a><a href="#l277">277</a><td>};<tr><td><a id="l278"></a><a href="#l278">278</a><td><tr><td><a id="l279"></a><a href="#l279">279</a><td><tr><td><a id="l280"></a><a href="#l280">280</a><td>/**<tr><td><a id="l281"></a><a href="#l281">281</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for HTMLUnit<tr><td><a id="l282"></a><a href="#l282">282</a><td> * with enabled Javascript.<tr><td><a id="l283"></a><a href="#l283">283</a><td> */<tr><td><a id="l284"></a><a href="#l284">284</a><td>webdriver.Capabilities.htmlunitwithjs = function() {<tr><td><a id="l285"></a><a href="#l285">285</a><td> return new webdriver.Capabilities().<tr><td><a id="l286"></a><a href="#l286">286</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.HTMLUNIT).<tr><td><a id="l287"></a><a href="#l287">287</a><td> set(webdriver.Capability.SUPPORTS_JAVASCRIPT, true);<tr><td><a id="l288"></a><a href="#l288">288</a><td>};<tr><td><a id="l289"></a><a href="#l289">289</a><td><tr><td><a id="l290"></a><a href="#l290">290</a><td><tr><td><a id="l291"></a><a href="#l291">291</a><td>/**<tr><td><a id="l292"></a><a href="#l292">292</a><td> * @return {!Object.<string, ?>} The JSON representation of this instance. Note,<tr><td><a id="l293"></a><a href="#l293">293</a><td> * the returned object may contain nested promises that are promised values.<tr><td><a id="l294"></a><a href="#l294">294</a><td> * @override<tr><td><a id="l295"></a><a href="#l295">295</a><td> */<tr><td><a id="l296"></a><a href="#l296">296</a><td>webdriver.Capabilities.prototype.serialize = function() {<tr><td><a id="l297"></a><a href="#l297">297</a><td> return this.caps_;<tr><td><a id="l298"></a><a href="#l298">298</a><td>};<tr><td><a id="l299"></a><a href="#l299">299</a><td><tr><td><a id="l300"></a><a href="#l300">300</a><td><tr><td><a id="l301"></a><a href="#l301">301</a><td>/**<tr><td><a id="l302"></a><a href="#l302">302</a><td> * Merges another set of capabilities into this instance. Any duplicates in<tr><td><a id="l303"></a><a href="#l303">303</a><td> * the provided set will override those already set on this instance.<tr><td><a id="l304"></a><a href="#l304">304</a><td> * @param {!(webdriver.Capabilities|Object)} other The capabilities to<tr><td><a id="l305"></a><a href="#l305">305</a><td> * merge into this instance.<tr><td><a id="l306"></a><a href="#l306">306</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l307"></a><a href="#l307">307</a><td> */<tr><td><a id="l308"></a><a href="#l308">308</a><td>webdriver.Capabilities.prototype.merge = function(other) {<tr><td><a id="l309"></a><a href="#l309">309</a><td> var caps = other instanceof webdriver.Capabilities ?<tr><td><a id="l310"></a><a href="#l310">310</a><td> other.caps_ : other;<tr><td><a id="l311"></a><a href="#l311">311</a><td> for (var key in caps) {<tr><td><a id="l312"></a><a href="#l312">312</a><td> if (caps.hasOwnProperty(key)) {<tr><td><a id="l313"></a><a href="#l313">313</a><td> this.set(key, caps[key]);<tr><td><a id="l314"></a><a href="#l314">314</a><td> }<tr><td><a id="l315"></a><a href="#l315">315</a><td> }<tr><td><a id="l316"></a><a href="#l316">316</a><td> return this;<tr><td><a id="l317"></a><a href="#l317">317</a><td>};<tr><td><a id="l318"></a><a href="#l318">318</a><td><tr><td><a id="l319"></a><a href="#l319">319</a><td><tr><td><a id="l320"></a><a href="#l320">320</a><td>/**<tr><td><a id="l321"></a><a href="#l321">321</a><td> * @param {string} key The capability to set.<tr><td><a id="l322"></a><a href="#l322">322</a><td> * @param {*} value The capability value. Capability values must be JSON<tr><td><a id="l323"></a><a href="#l323">323</a><td> * serializable. Pass {@code null} to unset the capability.<tr><td><a id="l324"></a><a href="#l324">324</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l325"></a><a href="#l325">325</a><td> */<tr><td><a id="l326"></a><a href="#l326">326</a><td>webdriver.Capabilities.prototype.set = function(key, value) {<tr><td><a id="l327"></a><a href="#l327">327</a><td> if (goog.isDefAndNotNull(value)) {<tr><td><a id="l328"></a><a href="#l328">328</a><td> this.caps_[key] = value;<tr><td><a id="l329"></a><a href="#l329">329</a><td> } else {<tr><td><a id="l330"></a><a href="#l330">330</a><td> delete this.caps_[key];<tr><td><a id="l331"></a><a href="#l331">331</a><td> }<tr><td><a id="l332"></a><a href="#l332">332</a><td> return this;<tr><td><a id="l333"></a><a href="#l333">333</a><td>};<tr><td><a id="l334"></a><a href="#l334">334</a><td><tr><td><a id="l335"></a><a href="#l335">335</a><td><tr><td><a id="l336"></a><a href="#l336">336</a><td>/**<tr><td><a id="l337"></a><a href="#l337">337</a><td> * @param {string} key The capability to return.<tr><td><a id="l338"></a><a href="#l338">338</a><td> * @return {*} The capability with the given key, or {@code null} if it has<tr><td><a id="l339"></a><a href="#l339">339</a><td> * not been set.<tr><td><a id="l340"></a><a href="#l340">340</a><td> */<tr><td><a id="l341"></a><a href="#l341">341</a><td>webdriver.Capabilities.prototype.get = function(key) {<tr><td><a id="l342"></a><a href="#l342">342</a><td> var val = null;<tr><td><a id="l343"></a><a href="#l343">343</a><td> if (this.caps_.hasOwnProperty(key)) {<tr><td><a id="l344"></a><a href="#l344">344</a><td> val = this.caps_[key];<tr><td><a id="l345"></a><a href="#l345">345</a><td> }<tr><td><a id="l346"></a><a href="#l346">346</a><td> return goog.isDefAndNotNull(val) ? val : null;<tr><td><a id="l347"></a><a href="#l347">347</a><td>};<tr><td><a id="l348"></a><a href="#l348">348</a><td><tr><td><a id="l349"></a><a href="#l349">349</a><td><tr><td><a id="l350"></a><a href="#l350">350</a><td>/**<tr><td><a id="l351"></a><a href="#l351">351</a><td> * @param {string} key The capability to check.<tr><td><a id="l352"></a><a href="#l352">352</a><td> * @return {boolean} Whether the specified capability is set.<tr><td><a id="l353"></a><a href="#l353">353</a><td> */<tr><td><a id="l354"></a><a href="#l354">354</a><td>webdriver.Capabilities.prototype.has = function(key) {<tr><td><a id="l355"></a><a href="#l355">355</a><td> return !!this.get(key);<tr><td><a id="l356"></a><a href="#l356">356</a><td>};<tr><td><a id="l357"></a><a href="#l357">357</a><td><tr><td><a id="l358"></a><a href="#l358">358</a><td><tr><td><a id="l359"></a><a href="#l359">359</a><td>/**<tr><td><a id="l360"></a><a href="#l360">360</a><td> * Sets the logging preferences. Preferences may be specified as a<tr><td><a id="l361"></a><a href="#l361">361</a><td> * {@link webdriver.logging.Preferences} instance, or a as a map of log-type to<tr><td><a id="l362"></a><a href="#l362">362</a><td> * log-level.<tr><td><a id="l363"></a><a href="#l363">363</a><td> * @param {!(webdriver.logging.Preferences|Object.<string, string>)} prefs The<tr><td><a id="l364"></a><a href="#l364">364</a><td> * logging preferences.<tr><td><a id="l365"></a><a href="#l365">365</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l366"></a><a href="#l366">366</a><td> */<tr><td><a id="l367"></a><a href="#l367">367</a><td>webdriver.Capabilities.prototype.setLoggingPrefs = function(prefs) {<tr><td><a id="l368"></a><a href="#l368">368</a><td> return this.set(webdriver.Capability.LOGGING_PREFS, prefs);<tr><td><a id="l369"></a><a href="#l369">369</a><td>};<tr><td><a id="l370"></a><a href="#l370">370</a><td><tr><td><a id="l371"></a><a href="#l371">371</a><td><tr><td><a id="l372"></a><a href="#l372">372</a><td>/**<tr><td><a id="l373"></a><a href="#l373">373</a><td> * Sets the proxy configuration for this instance.<tr><td><a id="l374"></a><a href="#l374">374</a><td> * @param {webdriver.ProxyConfig} proxy The desired proxy configuration.<tr><td><a id="l375"></a><a href="#l375">375</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l376"></a><a href="#l376">376</a><td> */<tr><td><a id="l377"></a><a href="#l377">377</a><td>webdriver.Capabilities.prototype.setProxy = function(proxy) {<tr><td><a id="l378"></a><a href="#l378">378</a><td> return this.set(webdriver.Capability.PROXY, proxy);<tr><td><a id="l379"></a><a href="#l379">379</a><td>};<tr><td><a id="l380"></a><a href="#l380">380</a><td><tr><td><a id="l381"></a><a href="#l381">381</a><td><tr><td><a id="l382"></a><a href="#l382">382</a><td>/**<tr><td><a id="l383"></a><a href="#l383">383</a><td> * Sets whether native events should be used.<tr><td><a id="l384"></a><a href="#l384">384</a><td> * @param {boolean} enabled Whether to enable native events.<tr><td><a id="l385"></a><a href="#l385">385</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l386"></a><a href="#l386">386</a><td> */<tr><td><a id="l387"></a><a href="#l387">387</a><td>webdriver.Capabilities.prototype.setEnableNativeEvents = function(enabled) {<tr><td><a id="l388"></a><a href="#l388">388</a><td> return this.set(webdriver.Capability.NATIVE_EVENTS, enabled);<tr><td><a id="l389"></a><a href="#l389">389</a><td>};<tr><td><a id="l390"></a><a href="#l390">390</a><td><tr><td><a id="l391"></a><a href="#l391">391</a><td><tr><td><a id="l392"></a><a href="#l392">392</a><td>/**<tr><td><a id="l393"></a><a href="#l393">393</a><td> * Sets how elements should be scrolled into view for interaction.<tr><td><a id="l394"></a><a href="#l394">394</a><td> * @param {number} behavior The desired scroll behavior: either 0 to align with<tr><td><a id="l395"></a><a href="#l395">395</a><td> * the top of the viewport or 1 to align with the bottom.<tr><td><a id="l396"></a><a href="#l396">396</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l397"></a><a href="#l397">397</a><td> */<tr><td><a id="l398"></a><a href="#l398">398</a><td>webdriver.Capabilities.prototype.setScrollBehavior = function(behavior) {<tr><td><a id="l399"></a><a href="#l399">399</a><td> return this.set(webdriver.Capability.ELEMENT_SCROLL_BEHAVIOR, behavior);<tr><td><a id="l400"></a><a href="#l400">400</a><td>};<tr><td><a id="l401"></a><a href="#l401">401</a><td><tr><td><a id="l402"></a><a href="#l402">402</a><td><tr><td><a id="l403"></a><a href="#l403">403</a><td>/**<tr><td><a id="l404"></a><a href="#l404">404</a><td> * Sets the default action to take with an unexpected alert before returning<tr><td><a id="l405"></a><a href="#l405">405</a><td> * an error.<tr><td><a id="l406"></a><a href="#l406">406</a><td> * @param {string} behavior The desired behavior; should be "accept", "dismiss",<tr><td><a id="l407"></a><a href="#l407">407</a><td> * or "ignore". Defaults to "dismiss".<tr><td><a id="l408"></a><a href="#l408">408</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l409"></a><a href="#l409">409</a><td> */<tr><td><a id="l410"></a><a href="#l410">410</a><td>webdriver.Capabilities.prototype.setAlertBehavior = function(behavior) {<tr><td><a id="l411"></a><a href="#l411">411</a><td> return this.set(webdriver.Capability.UNEXPECTED_ALERT_BEHAVIOR, behavior);<tr><td><a id="l412"></a><a href="#l412">412</a><td>};</table></div></article><nav><h3><a href="../../../index.html" tabindex="2">Overview</a></h3><div><input type="checkbox" id="nav-modules" checked/><label for="nav-modules"><h3><span class="selectable" tabindex="2">Modules</span></h3></label><div id="nav-modules-view"></div></div><div><input type="checkbox" id="nav-types" checked/><label for="nav-types"><h3><span class="selectable" tabindex="2">Types</span></h3></label><div id="nav-types-view"></div></div><h3><a href="../../../Changes.html" tabindex="2">Changes</a></h3></nav></main><footer><div><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></div></footer><script src="../../../types.js"></script><script src="../../../dossier.js"></script>
|