selenium-webdriver 3.5.0 → 4.0.0-alpha.4
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 +246 -0
- package/LICENSE +1 -1
- package/NOTICE +1 -1
- package/README.md +40 -40
- package/chrome.js +118 -134
- package/edge.js +43 -117
- package/example/chrome_android.js +8 -9
- package/example/chrome_mobile_emulation.js +8 -9
- package/example/firefox_channels.js +23 -19
- package/example/google_search.js +3 -3
- package/example/google_search_test.js +38 -27
- package/example/{chrome_headless.js → headless.js} +15 -7
- package/example/logging.js +40 -7
- package/firefox.js +789 -0
- package/http/index.js +62 -9
- package/http/util.js +11 -6
- package/ie.js +83 -97
- package/index.js +198 -114
- package/io/exec.js +29 -15
- package/io/index.js +1 -1
- package/io/zip.js +1 -1
- package/lib/actions.js +68 -63
- package/lib/atoms/get-attribute.js +86 -0
- package/lib/atoms/is-displayed.js +76 -76
- package/lib/by.js +7 -4
- package/lib/capabilities.js +310 -210
- package/lib/command.js +27 -51
- package/lib/error.js +100 -41
- package/lib/http.js +161 -120
- package/lib/input.js +1044 -8
- package/lib/logging.js +1 -5
- package/lib/promise.js +222 -3331
- package/lib/proxy.js +134 -39
- package/lib/session.js +2 -2
- package/lib/symbols.js +0 -0
- package/lib/until.js +1 -1
- package/lib/webdriver.js +717 -953
- package/net/index.js +21 -25
- package/net/portprober.js +51 -68
- package/package.json +17 -12
- package/proxy.js +0 -0
- package/remote/index.js +63 -44
- package/safari.js +41 -128
- package/testing/index.js +386 -315
- package/.npmignore +0 -2
- package/example/async_await_test.js +0 -68
- package/example/google_search_generator.js +0 -50
- package/example/parallel_flows.js +0 -54
- package/firefox/binary.js +0 -344
- package/firefox/extension.js +0 -224
- package/firefox/index.js +0 -626
- package/firefox/profile.js +0 -394
- package/lib/README +0 -5
- package/lib/atoms/getAttribute.js +0 -9
- package/lib/devmode.js +0 -34
- package/lib/events.js +0 -210
- package/lib/firefox/webdriver.json +0 -70
- package/lib/test/build.js +0 -151
- package/lib/test/data/ClickTest_testClicksASurroundingStrongTag.html +0 -11
- package/lib/test/data/Page.aspx +0 -17
- package/lib/test/data/Page.aspx.cs +0 -22
- package/lib/test/data/Redirect.aspx +0 -11
- package/lib/test/data/Redirect.aspx.cs +0 -9
- package/lib/test/data/Settings.StyleCop +0 -759
- package/lib/test/data/Web.Config +0 -59
- package/lib/test/data/actualXhtmlPage.xhtml +0 -14
- package/lib/test/data/ajaxy_page.html +0 -81
- package/lib/test/data/alerts.html +0 -85
- package/lib/test/data/banner.gif +0 -0
- package/lib/test/data/beach.jpg +0 -0
- package/lib/test/data/blank.html +0 -1
- package/lib/test/data/bodyTypingTest.html +0 -41
- package/lib/test/data/booleanAttributes.html +0 -19
- package/lib/test/data/child/childPage.html +0 -8
- package/lib/test/data/child/grandchild/grandchildPage.html +0 -8
- package/lib/test/data/clickEventPage.html +0 -26
- package/lib/test/data/click_frames.html +0 -10
- package/lib/test/data/click_jacker.html +0 -38
- package/lib/test/data/click_out_of_bounds.html +0 -23
- package/lib/test/data/click_out_of_bounds_overflow.html +0 -85
- package/lib/test/data/click_rtl.html +0 -19
- package/lib/test/data/click_source.html +0 -18
- package/lib/test/data/click_tests/click_iframe.html +0 -6
- package/lib/test/data/click_tests/click_in_iframe.html +0 -8
- package/lib/test/data/click_tests/disabled_element.html +0 -12
- package/lib/test/data/click_tests/disappearing_element.html +0 -62
- package/lib/test/data/click_tests/google_map.html +0 -15
- package/lib/test/data/click_tests/google_map.png +0 -0
- package/lib/test/data/click_tests/html5_submit_buttons.html +0 -16
- package/lib/test/data/click_tests/issue5237.html +0 -9
- package/lib/test/data/click_tests/issue5237_frame.html +0 -1
- package/lib/test/data/click_tests/issue5237_target.html +0 -10
- package/lib/test/data/click_tests/link_that_wraps.html +0 -11
- package/lib/test/data/click_tests/mapped_page1.html +0 -9
- package/lib/test/data/click_tests/mapped_page2.html +0 -9
- package/lib/test/data/click_tests/mapped_page3.html +0 -9
- package/lib/test/data/click_tests/overlapping_elements.html +0 -70
- package/lib/test/data/click_tests/partially_overlapping_elements.html +0 -124
- package/lib/test/data/click_tests/span_that_wraps.html +0 -11
- package/lib/test/data/click_tests/submitted_page.html +0 -9
- package/lib/test/data/click_tests/wrapped_overlapping_elements.html +0 -13
- package/lib/test/data/click_too_big.html +0 -10
- package/lib/test/data/click_too_big_in_frame.html +0 -11
- package/lib/test/data/clicks.html +0 -35
- package/lib/test/data/closeable_window.html +0 -8
- package/lib/test/data/cn-test.html +0 -156
- package/lib/test/data/colorPage.html +0 -20
- package/lib/test/data/cookies.html +0 -30
- package/lib/test/data/coordinates_tests/element_in_frame.html +0 -9
- package/lib/test/data/coordinates_tests/element_in_nested_frame.html +0 -9
- package/lib/test/data/coordinates_tests/page_with_element_out_of_view.html +0 -11
- package/lib/test/data/coordinates_tests/page_with_empty_element.html +0 -10
- package/lib/test/data/coordinates_tests/page_with_fixed_element.html +0 -12
- package/lib/test/data/coordinates_tests/page_with_hidden_element.html +0 -10
- package/lib/test/data/coordinates_tests/page_with_invisible_element.html +0 -10
- package/lib/test/data/coordinates_tests/page_with_transparent_element.html +0 -10
- package/lib/test/data/coordinates_tests/simple_page.html +0 -10
- package/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- package/lib/test/data/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- package/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css +0 -573
- package/lib/test/data/cssTransform.html +0 -61
- package/lib/test/data/cssTransform2.html +0 -20
- package/lib/test/data/document_write_in_onload.html +0 -13
- package/lib/test/data/dragAndDropInsideScrolledDiv.html +0 -67
- package/lib/test/data/dragAndDropTest.html +0 -102
- package/lib/test/data/dragDropOverflow.html +0 -104
- package/lib/test/data/draggableLists.html +0 -67
- package/lib/test/data/droppableItems.html +0 -65
- package/lib/test/data/dynamic.html +0 -39
- package/lib/test/data/dynamicallyModifiedPage.html +0 -42
- package/lib/test/data/errors.html +0 -15
- package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
- package/lib/test/data/firefox/sample.xpi +0 -0
- package/lib/test/data/firefox/webextension.xpi +0 -0
- package/lib/test/data/fixedFooterNoScroll.html +0 -13
- package/lib/test/data/fixedFooterNoScrollQuirksMode.html +0 -12
- package/lib/test/data/formPage.html +0 -175
- package/lib/test/data/formSelectionPage.html +0 -46
- package/lib/test/data/form_handling_js_submit.html +0 -30
- package/lib/test/data/framePage3.html +0 -7
- package/lib/test/data/frameScrollChild.html +0 -26
- package/lib/test/data/frameScrollPage.html +0 -14
- package/lib/test/data/frameScrollParent.html +0 -11
- package/lib/test/data/frameWithAnimals.html +0 -11
- package/lib/test/data/frame_switching_tests/bug4876.html +0 -9
- package/lib/test/data/frame_switching_tests/bug4876_iframe.html +0 -9
- package/lib/test/data/frame_switching_tests/deletingFrame.html +0 -29
- package/lib/test/data/frame_switching_tests/deletingFrame_iframe.html +0 -8
- package/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html +0 -7
- package/lib/test/data/frameset.html +0 -14
- package/lib/test/data/framesetPage2.html +0 -7
- package/lib/test/data/framesetPage3.html +0 -4
- package/lib/test/data/globalscope.html +0 -15
- package/lib/test/data/hidden.html +0 -5
- package/lib/test/data/hidden_partially.html +0 -45
- package/lib/test/data/html5/blue.jpg +0 -0
- package/lib/test/data/html5/database.js +0 -84
- package/lib/test/data/html5/geolocation.js +0 -18
- package/lib/test/data/html5/green.jpg +0 -0
- package/lib/test/data/html5/red.jpg +0 -0
- package/lib/test/data/html5/status.html +0 -1
- package/lib/test/data/html5/test.appcache +0 -11
- package/lib/test/data/html5/yellow.jpg +0 -0
- package/lib/test/data/html5Page.html +0 -32
- package/lib/test/data/icon.gif +0 -0
- package/lib/test/data/idElements.html +0 -2
- package/lib/test/data/iframeAtBottom.html +0 -15
- package/lib/test/data/iframeWithAlert.html +0 -1
- package/lib/test/data/iframeWithIframe.html +0 -1
- package/lib/test/data/iframes.html +0 -11
- package/lib/test/data/injectableContent.html +0 -22
- package/lib/test/data/javascriptEnhancedForm.html +0 -30
- package/lib/test/data/javascriptPage.html +0 -285
- package/lib/test/data/jquery-1.3.2.js +0 -4376
- package/lib/test/data/js/jquery-1.4.4.min.js +0 -167
- package/lib/test/data/js/jquery-ui-1.8.10.custom.min.js +0 -782
- package/lib/test/data/js/skins/lightgray/content.inline.min.css +0 -1
- package/lib/test/data/js/skins/lightgray/content.min.css +0 -1
- package/lib/test/data/js/skins/lightgray/fonts/readme.md +0 -1
- package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg +0 -175
- package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot +0 -0
- package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.svg +0 -62
- package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf +0 -0
- package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff +0 -0
- package/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg +0 -153
- package/lib/test/data/js/skins/lightgray/fonts/tinymce.eot +0 -0
- package/lib/test/data/js/skins/lightgray/fonts/tinymce.svg +0 -63
- package/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf +0 -0
- package/lib/test/data/js/skins/lightgray/fonts/tinymce.woff +0 -0
- package/lib/test/data/js/skins/lightgray/img/anchor.gif +0 -0
- package/lib/test/data/js/skins/lightgray/img/loader.gif +0 -0
- package/lib/test/data/js/skins/lightgray/img/object.gif +0 -0
- package/lib/test/data/js/skins/lightgray/img/trans.gif +0 -0
- package/lib/test/data/js/skins/lightgray/skin.ie7.min.css +0 -1
- package/lib/test/data/js/skins/lightgray/skin.min.css +0 -1
- package/lib/test/data/js/themes/modern/theme.min.js +0 -1
- package/lib/test/data/js/tinymce.min.js +0 -10
- package/lib/test/data/key_logger.html +0 -34
- package/lib/test/data/key_tests/remove_on_keypress.html +0 -36
- package/lib/test/data/keyboard_shortcut.html +0 -36
- package/lib/test/data/linked_image.html +0 -16
- package/lib/test/data/locators_tests/boolean_attribute_selected.html +0 -13
- package/lib/test/data/locators_tests/boolean_attribute_selected_html4.html +0 -13
- package/lib/test/data/longContentPage.html +0 -55
- package/lib/test/data/macbeth.html +0 -5255
- package/lib/test/data/map.png +0 -0
- package/lib/test/data/map_visibility.html +0 -8
- package/lib/test/data/markerTransparent.png +0 -0
- package/lib/test/data/messages.html +0 -15
- package/lib/test/data/meta-redirect.html +0 -11
- package/lib/test/data/missedJsReference.html +0 -11
- package/lib/test/data/modal_dialogs/modal_1.html +0 -21
- package/lib/test/data/modal_dialogs/modal_2.html +0 -21
- package/lib/test/data/modal_dialogs/modal_3.html +0 -15
- package/lib/test/data/modal_dialogs/modalindex.html +0 -21
- package/lib/test/data/mouseOver.html +0 -17
- package/lib/test/data/mousePositionTracker.html +0 -33
- package/lib/test/data/nestedElements.html +0 -164
- package/lib/test/data/overflow/x_auto_y_auto.html +0 -30
- package/lib/test/data/overflow/x_auto_y_hidden.html +0 -30
- package/lib/test/data/overflow/x_auto_y_scroll.html +0 -30
- package/lib/test/data/overflow/x_hidden_y_auto.html +0 -30
- package/lib/test/data/overflow/x_hidden_y_hidden.html +0 -30
- package/lib/test/data/overflow/x_hidden_y_scroll.html +0 -30
- package/lib/test/data/overflow/x_scroll_y_auto.html +0 -30
- package/lib/test/data/overflow/x_scroll_y_hidden.html +0 -30
- package/lib/test/data/overflow/x_scroll_y_scroll.html +0 -30
- package/lib/test/data/overflow-body.html +0 -15
- package/lib/test/data/pageWithOnBeforeUnloadMessage.html +0 -20
- package/lib/test/data/pageWithOnLoad.html +0 -6
- package/lib/test/data/pageWithOnUnload.html +0 -6
- package/lib/test/data/page_with_link_to_slow_loading_page.html +0 -6
- package/lib/test/data/plain.txt +0 -1
- package/lib/test/data/proxy/page1.html +0 -20
- package/lib/test/data/proxy/page2.html +0 -24
- package/lib/test/data/proxy/page3.html +0 -5
- package/lib/test/data/readOnlyPage.html +0 -24
- package/lib/test/data/rectangles.html +0 -40
- package/lib/test/data/resultPage.html +0 -25
- package/lib/test/data/rich_text.html +0 -161
- package/lib/test/data/safari/frames_benchmark.html +0 -31
- package/lib/test/data/screen/screen.css +0 -19
- package/lib/test/data/screen/screen.html +0 -72
- package/lib/test/data/screen/screen.js +0 -7
- package/lib/test/data/screen/screen_frame1.html +0 -72
- package/lib/test/data/screen/screen_frame2.html +0 -72
- package/lib/test/data/screen/screen_frames.html +0 -11
- package/lib/test/data/screen/screen_iframes.html +0 -12
- package/lib/test/data/screen/screen_too_long.html +0 -68
- package/lib/test/data/screen/screen_x_long.html +0 -72
- package/lib/test/data/screen/screen_x_too_long.html +0 -72
- package/lib/test/data/screen/screen_y_long.html +0 -72
- package/lib/test/data/screen/screen_y_too_long.html +0 -72
- package/lib/test/data/scroll.html +0 -27
- package/lib/test/data/scroll2.html +0 -21
- package/lib/test/data/scroll3.html +0 -8
- package/lib/test/data/scroll4.html +0 -7
- package/lib/test/data/scroll5.html +0 -18
- package/lib/test/data/scrolling_tests/frame_with_height_above_200.html +0 -26
- package/lib/test/data/scrolling_tests/frame_with_height_above_2000.html +0 -26
- package/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html +0 -11
- package/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html +0 -12
- package/lib/test/data/scrolling_tests/frame_with_small_height.html +0 -10
- package/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html +0 -19
- package/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html +0 -12
- package/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html +0 -11
- package/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html +0 -12
- package/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html +0 -11
- package/lib/test/data/scrolling_tests/page_with_scrolling_frame.html +0 -11
- package/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html +0 -12
- package/lib/test/data/scrolling_tests/page_with_tall_frame.html +0 -11
- package/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html +0 -14
- package/lib/test/data/scrolling_tests/target_page.html +0 -9
- package/lib/test/data/selectPage.html +0 -58
- package/lib/test/data/selectableItems.html +0 -65
- package/lib/test/data/sessionCookie.html +0 -21
- package/lib/test/data/sessionCookieDest.html +0 -34
- package/lib/test/data/simple.xml +0 -5
- package/lib/test/data/simpleTest.html +0 -98
- package/lib/test/data/single_text_input.html +0 -12
- package/lib/test/data/slowLoadingAlert.html +0 -10
- package/lib/test/data/slowLoadingResourcePage.html +0 -12
- package/lib/test/data/slow_loading_iframes.html +0 -14
- package/lib/test/data/styledPage.html +0 -28
- package/lib/test/data/svgPiechart.xhtml +0 -81
- package/lib/test/data/svgTest.svg +0 -4
- package/lib/test/data/tables.html +0 -36
- package/lib/test/data/tinymce.html +0 -10
- package/lib/test/data/transformable.xml +0 -11
- package/lib/test/data/transformable.xsl +0 -37
- package/lib/test/data/transparentUpload.html +0 -70
- package/lib/test/data/underscore.html +0 -9
- package/lib/test/data/unicode_ltr.html +0 -8
- package/lib/test/data/upload.html +0 -45
- package/lib/test/data/userDefinedProperty.html +0 -8
- package/lib/test/data/veryLargeCanvas.html +0 -81
- package/lib/test/data/visibility-css.html +0 -21
- package/lib/test/data/win32frameset.html +0 -8
- package/lib/test/data/window_switching_tests/page_with_frame.html +0 -12
- package/lib/test/data/window_switching_tests/simple_page.html +0 -9
- package/lib/test/data/xhtmlFormPage.xhtml +0 -17
- package/lib/test/data/xhtmlTest.html +0 -76
- package/lib/test/fileserver.js +0 -321
- package/lib/test/httpserver.js +0 -120
- package/lib/test/index.js +0 -270
- package/lib/test/promise.js +0 -79
- package/lib/test/resources.js +0 -44
- package/opera.js +0 -405
- package/phantomjs.js +0 -282
- package/test/actions_test.js +0 -52
- package/test/chrome/options_test.js +0 -227
- package/test/chrome/service_test.js +0 -45
- package/test/cookie_test.js +0 -214
- package/test/element_finding_test.js +0 -426
- package/test/execute_script_test.js +0 -350
- package/test/fingerprint_test.js +0 -62
- package/test/firefox/extension_test.js +0 -120
- package/test/firefox/firefox_test.js +0 -261
- package/test/firefox/profile_test.js +0 -140
- package/test/http/http_test.js +0 -223
- package/test/http/util_test.js +0 -178
- package/test/io/io_test.js +0 -360
- package/test/io/zip_test.js +0 -128
- package/test/lib/by_test.js +0 -160
- package/test/lib/capabilities_test.js +0 -111
- package/test/lib/error_test.js +0 -305
- package/test/lib/events_test.js +0 -177
- package/test/lib/http_test.js +0 -696
- package/test/lib/logging_test.js +0 -272
- package/test/lib/promise_aplus_test.js +0 -78
- package/test/lib/promise_error_test.js +0 -884
- package/test/lib/promise_flow_test.js +0 -2288
- package/test/lib/promise_generator_test.js +0 -310
- package/test/lib/promise_test.js +0 -1109
- package/test/lib/testutil.js +0 -90
- package/test/lib/until_test.js +0 -478
- package/test/lib/webdriver_test.js +0 -2311
- package/test/logging_test.js +0 -167
- package/test/net/index_test.js +0 -60
- package/test/net/portprober_test.js +0 -128
- package/test/page_loading_test.js +0 -166
- package/test/phantomjs/execute_phantomjs_test.js +0 -59
- package/test/proxy_test.js +0 -180
- package/test/rect_test.js +0 -60
- package/test/remote_test.js +0 -117
- package/test/safari_test.js +0 -108
- package/test/session_test.js +0 -99
- package/test/stale_element_test.js +0 -63
- package/test/tag_name_test.js +0 -36
- package/test/testing/assert_test.js +0 -373
- package/test/testing/index_test.js +0 -224
- package/test/upload_test.js +0 -86
- package/test/window_test.js +0 -161
- package/testing/assert.js +0 -378
package/test/cookie_test.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
|
-
// or more contributor license agreements. See the NOTICE file
|
|
3
|
-
// distributed with this work for additional information
|
|
4
|
-
// regarding copyright ownership. The SFC licenses this file
|
|
5
|
-
// to you under the Apache License, Version 2.0 (the
|
|
6
|
-
// "License"); you may not use this file except in compliance
|
|
7
|
-
// with the License. You may obtain a copy of the License at
|
|
8
|
-
//
|
|
9
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
//
|
|
11
|
-
// Unless required by applicable law or agreed to in writing,
|
|
12
|
-
// software distributed under the License is distributed on an
|
|
13
|
-
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
-
// KIND, either express or implied. See the License for the
|
|
15
|
-
// specific language governing permissions and limitations
|
|
16
|
-
// under the License.
|
|
17
|
-
|
|
18
|
-
'use strict';
|
|
19
|
-
|
|
20
|
-
var assert = require('assert'),
|
|
21
|
-
url = require('url');
|
|
22
|
-
|
|
23
|
-
var test = require('../lib/test'),
|
|
24
|
-
fileserver = require('../lib/test/fileserver'),
|
|
25
|
-
Browser = require('..').Browser,
|
|
26
|
-
Pages = test.Pages;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
test.suite(function(env) {
|
|
30
|
-
var driver;
|
|
31
|
-
|
|
32
|
-
test.before(function*() {
|
|
33
|
-
driver = yield env.builder().build();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test.after(function() {
|
|
37
|
-
return driver.quit();
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// Cookie handling is broken.
|
|
41
|
-
test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.SAFARI)).
|
|
42
|
-
describe('Cookie Management;', function() {
|
|
43
|
-
|
|
44
|
-
test.beforeEach(function*() {
|
|
45
|
-
yield driver.get(fileserver.Pages.ajaxyPage);
|
|
46
|
-
yield driver.manage().deleteAllCookies();
|
|
47
|
-
return assertHasCookies();
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test.it('can add new cookies', function*() {
|
|
51
|
-
var cookie = createCookieSpec();
|
|
52
|
-
|
|
53
|
-
yield driver.manage().addCookie(cookie);
|
|
54
|
-
yield driver.manage().getCookie(cookie.name).then(function(actual) {
|
|
55
|
-
assert.equal(actual.value, cookie.value);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
test.it('can get all cookies', function*() {
|
|
60
|
-
var cookie1 = createCookieSpec();
|
|
61
|
-
var cookie2 = createCookieSpec();
|
|
62
|
-
|
|
63
|
-
yield driver.manage().addCookie(cookie1);
|
|
64
|
-
yield driver.manage().addCookie(cookie2);
|
|
65
|
-
|
|
66
|
-
return assertHasCookies(cookie1, cookie2);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test.ignore(env.browsers(Browser.IE)).
|
|
70
|
-
it('only returns cookies visible to the current page', function*() {
|
|
71
|
-
var cookie1 = createCookieSpec();
|
|
72
|
-
|
|
73
|
-
yield driver.manage().addCookie(cookie1);
|
|
74
|
-
|
|
75
|
-
var pageUrl = fileserver.whereIs('page/1');
|
|
76
|
-
var cookie2 = createCookieSpec({
|
|
77
|
-
path: url.parse(pageUrl).pathname
|
|
78
|
-
});
|
|
79
|
-
yield driver.get(pageUrl);
|
|
80
|
-
yield driver.manage().addCookie(cookie2);
|
|
81
|
-
yield assertHasCookies(cookie1, cookie2);
|
|
82
|
-
|
|
83
|
-
yield driver.get(fileserver.Pages.ajaxyPage);
|
|
84
|
-
yield assertHasCookies(cookie1);
|
|
85
|
-
|
|
86
|
-
yield driver.get(pageUrl);
|
|
87
|
-
yield assertHasCookies(cookie1, cookie2);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test.it('can delete all cookies', function*() {
|
|
91
|
-
var cookie1 = createCookieSpec();
|
|
92
|
-
var cookie2 = createCookieSpec();
|
|
93
|
-
|
|
94
|
-
yield driver.executeScript(
|
|
95
|
-
'document.cookie = arguments[0] + "=" + arguments[1];' +
|
|
96
|
-
'document.cookie = arguments[2] + "=" + arguments[3];',
|
|
97
|
-
cookie1.name, cookie1.value, cookie2.name, cookie2.value);
|
|
98
|
-
yield assertHasCookies(cookie1, cookie2);
|
|
99
|
-
|
|
100
|
-
yield driver.manage().deleteAllCookies();
|
|
101
|
-
yield assertHasCookies();
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test.it('can delete cookies by name', function*() {
|
|
105
|
-
var cookie1 = createCookieSpec();
|
|
106
|
-
var cookie2 = createCookieSpec();
|
|
107
|
-
|
|
108
|
-
yield driver.executeScript(
|
|
109
|
-
'document.cookie = arguments[0] + "=" + arguments[1];' +
|
|
110
|
-
'document.cookie = arguments[2] + "=" + arguments[3];',
|
|
111
|
-
cookie1.name, cookie1.value, cookie2.name, cookie2.value);
|
|
112
|
-
yield assertHasCookies(cookie1, cookie2);
|
|
113
|
-
|
|
114
|
-
yield driver.manage().deleteCookie(cookie1.name);
|
|
115
|
-
yield assertHasCookies(cookie2);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
test.it('should only delete cookie with exact name', function*() {
|
|
119
|
-
var cookie1 = createCookieSpec();
|
|
120
|
-
var cookie2 = createCookieSpec();
|
|
121
|
-
var cookie3 = {name: cookie1.name + 'xx', value: cookie1.value};
|
|
122
|
-
|
|
123
|
-
yield driver.executeScript(
|
|
124
|
-
'document.cookie = arguments[0] + "=" + arguments[1];' +
|
|
125
|
-
'document.cookie = arguments[2] + "=" + arguments[3];' +
|
|
126
|
-
'document.cookie = arguments[4] + "=" + arguments[5];',
|
|
127
|
-
cookie1.name, cookie1.value, cookie2.name, cookie2.value,
|
|
128
|
-
cookie3.name, cookie3.value);
|
|
129
|
-
yield assertHasCookies(cookie1, cookie2, cookie3);
|
|
130
|
-
|
|
131
|
-
yield driver.manage().deleteCookie(cookie1.name);
|
|
132
|
-
yield assertHasCookies(cookie2, cookie3);
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
test.it('can delete cookies set higher in the path', function*() {
|
|
136
|
-
var cookie = createCookieSpec();
|
|
137
|
-
var childUrl = fileserver.whereIs('child/childPage.html');
|
|
138
|
-
var grandchildUrl = fileserver.whereIs(
|
|
139
|
-
'child/grandchild/grandchildPage.html');
|
|
140
|
-
|
|
141
|
-
yield driver.get(childUrl);
|
|
142
|
-
yield driver.manage().addCookie(cookie);
|
|
143
|
-
yield assertHasCookies(cookie);
|
|
144
|
-
|
|
145
|
-
yield driver.get(grandchildUrl);
|
|
146
|
-
yield assertHasCookies(cookie);
|
|
147
|
-
|
|
148
|
-
yield driver.manage().deleteCookie(cookie.name);
|
|
149
|
-
yield assertHasCookies();
|
|
150
|
-
|
|
151
|
-
yield driver.get(childUrl);
|
|
152
|
-
yield assertHasCookies();
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
test.ignore(env.browsers(
|
|
156
|
-
Browser.ANDROID,
|
|
157
|
-
Browser.FIREFOX,
|
|
158
|
-
'legacy-' + Browser.FIREFOX,
|
|
159
|
-
Browser.IE)).
|
|
160
|
-
it('should retain cookie expiry', function*() {
|
|
161
|
-
let expirationDelay = 5 * 1000;
|
|
162
|
-
let expiry = new Date(Date.now() + expirationDelay);
|
|
163
|
-
let cookie = createCookieSpec({expiry});
|
|
164
|
-
|
|
165
|
-
yield driver.manage().addCookie(cookie);
|
|
166
|
-
yield driver.manage().getCookie(cookie.name).then(function(actual) {
|
|
167
|
-
assert.equal(actual.value, cookie.value);
|
|
168
|
-
// expiry times are exchanged in seconds since January 1, 1970 UTC.
|
|
169
|
-
assert.equal(actual.expiry, Math.floor(expiry.getTime() / 1000));
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
yield driver.sleep(expirationDelay);
|
|
173
|
-
yield assertHasCookies();
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
function createCookieSpec(opt_options) {
|
|
178
|
-
let spec = {
|
|
179
|
-
name: getRandomString(),
|
|
180
|
-
value: getRandomString()
|
|
181
|
-
};
|
|
182
|
-
if (opt_options) {
|
|
183
|
-
spec = Object.assign(spec, opt_options);
|
|
184
|
-
}
|
|
185
|
-
return spec;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
function buildCookieMap(cookies) {
|
|
189
|
-
var map = {};
|
|
190
|
-
cookies.forEach(function(cookie) {
|
|
191
|
-
map[cookie.name] = cookie;
|
|
192
|
-
});
|
|
193
|
-
return map;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
function assertHasCookies(...expected) {
|
|
197
|
-
return driver.manage().getCookies().then(function(cookies) {
|
|
198
|
-
assert.equal(cookies.length, expected.length,
|
|
199
|
-
'Wrong # of cookies.' +
|
|
200
|
-
'\n Expected: ' + JSON.stringify(expected) +
|
|
201
|
-
'\n Was : ' + JSON.stringify(cookies));
|
|
202
|
-
|
|
203
|
-
var map = buildCookieMap(cookies);
|
|
204
|
-
for (var i = 0; i < expected.length; ++i) {
|
|
205
|
-
assert.equal(expected[i].value, map[expected[i].name].value);
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
function getRandomString() {
|
|
211
|
-
var x = 1234567890;
|
|
212
|
-
return Math.floor(Math.random() * x).toString(36);
|
|
213
|
-
}
|
|
214
|
-
});
|
|
@@ -1,426 +0,0 @@
|
|
|
1
|
-
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
|
-
// or more contributor license agreements. See the NOTICE file
|
|
3
|
-
// distributed with this work for additional information
|
|
4
|
-
// regarding copyright ownership. The SFC licenses this file
|
|
5
|
-
// to you under the Apache License, Version 2.0 (the
|
|
6
|
-
// "License"); you may not use this file except in compliance
|
|
7
|
-
// with the License. You may obtain a copy of the License at
|
|
8
|
-
//
|
|
9
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
//
|
|
11
|
-
// Unless required by applicable law or agreed to in writing,
|
|
12
|
-
// software distributed under the License is distributed on an
|
|
13
|
-
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
-
// KIND, either express or implied. See the License for the
|
|
15
|
-
// specific language governing permissions and limitations
|
|
16
|
-
// under the License.
|
|
17
|
-
|
|
18
|
-
'use strict';
|
|
19
|
-
|
|
20
|
-
var fail = require('assert').fail;
|
|
21
|
-
|
|
22
|
-
var Browser = require('..').Browser,
|
|
23
|
-
By = require('..').By,
|
|
24
|
-
error = require('..').error,
|
|
25
|
-
until = require('..').until,
|
|
26
|
-
promise = require('../lib/promise'),
|
|
27
|
-
test = require('../lib/test'),
|
|
28
|
-
assert = require('../testing/assert'),
|
|
29
|
-
Pages = test.Pages;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
test.suite(function(env) {
|
|
33
|
-
var browsers = env.browsers;
|
|
34
|
-
|
|
35
|
-
var driver;
|
|
36
|
-
|
|
37
|
-
test.before(function*() {
|
|
38
|
-
driver = yield env.builder().build();
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
after(function() {
|
|
42
|
-
return driver.quit();
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('finding elements', function() {
|
|
46
|
-
test.it(
|
|
47
|
-
'should work after loading multiple pages in a row',
|
|
48
|
-
function*() {
|
|
49
|
-
yield driver.get(Pages.formPage);
|
|
50
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
51
|
-
yield driver.findElement(By.linkText('click me')).click();
|
|
52
|
-
yield driver.wait(until.titleIs('We Arrive Here'), 5000);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
describe('By.id()', function() {
|
|
56
|
-
test.it('should work', function*() {
|
|
57
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
58
|
-
yield driver.findElement(By.id('linkId')).click();
|
|
59
|
-
yield driver.wait(until.titleIs('We Arrive Here'), 5000);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test.it('should fail if ID not present on page', function*() {
|
|
63
|
-
yield driver.get(Pages.formPage);
|
|
64
|
-
return driver.findElement(By.id('nonExistantButton')).
|
|
65
|
-
then(fail, function(e) {
|
|
66
|
-
assert(e).instanceOf(error.NoSuchElementError);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
test.it(
|
|
71
|
-
'should find multiple elements by ID even though that is ' +
|
|
72
|
-
'malformed HTML',
|
|
73
|
-
function*() {
|
|
74
|
-
yield driver.get(Pages.nestedPage);
|
|
75
|
-
|
|
76
|
-
let elements = yield driver.findElements(By.id('2'));
|
|
77
|
-
assert(elements.length).equalTo(8);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
describe('By.linkText()', function() {
|
|
82
|
-
test.it('should be able to click on link identified by text', function*() {
|
|
83
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
84
|
-
yield driver.findElement(By.linkText('click me')).click();
|
|
85
|
-
yield driver.wait(until.titleIs('We Arrive Here'), 5000);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
test.it(
|
|
89
|
-
'should be able to find elements by partial link text',
|
|
90
|
-
function*() {
|
|
91
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
92
|
-
yield driver.findElement(By.partialLinkText('ick me')).click();
|
|
93
|
-
yield driver.wait(until.titleIs('We Arrive Here'), 5000);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
test.it('should work when link text contains equals sign', function*() {
|
|
97
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
98
|
-
let el = yield driver.findElement(By.linkText('Link=equalssign'));
|
|
99
|
-
|
|
100
|
-
let id = yield el.getAttribute('id');
|
|
101
|
-
assert(id).equalTo('linkWithEqualsSign');
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test.it('matches by partial text when containing equals sign',
|
|
105
|
-
function*() {
|
|
106
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
107
|
-
let link = yield driver.findElement(By.partialLinkText('Link='));
|
|
108
|
-
|
|
109
|
-
let id = yield link.getAttribute('id');
|
|
110
|
-
assert(id).equalTo('linkWithEqualsSign');
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
test.it('works when searching for multiple and text contains =',
|
|
114
|
-
function*() {
|
|
115
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
116
|
-
let elements =
|
|
117
|
-
yield driver.findElements(By.linkText('Link=equalssign'));
|
|
118
|
-
|
|
119
|
-
assert(elements.length).equalTo(1);
|
|
120
|
-
|
|
121
|
-
let id = yield elements[0].getAttribute('id');
|
|
122
|
-
assert(id).equalTo('linkWithEqualsSign');
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
test.it(
|
|
126
|
-
'works when searching for multiple with partial text containing =',
|
|
127
|
-
function*() {
|
|
128
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
129
|
-
let elements =
|
|
130
|
-
yield driver.findElements(By.partialLinkText('Link='));
|
|
131
|
-
|
|
132
|
-
assert(elements.length).equalTo(1);
|
|
133
|
-
|
|
134
|
-
let id = yield elements[0].getAttribute('id');
|
|
135
|
-
assert(id).equalTo('linkWithEqualsSign');
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
test.it('should be able to find multiple exact matches',
|
|
139
|
-
function*() {
|
|
140
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
141
|
-
let elements = yield driver.findElements(By.linkText('click me'));
|
|
142
|
-
assert(elements.length).equalTo(2);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
test.it('should be able to find multiple partial matches',
|
|
146
|
-
function*() {
|
|
147
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
148
|
-
let elements =
|
|
149
|
-
yield driver.findElements(By.partialLinkText('ick me'));
|
|
150
|
-
assert(elements.length).equalTo(2);
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
test.ignore(browsers(Browser.SAFARI)).
|
|
154
|
-
it('works on XHTML pages', function*() {
|
|
155
|
-
yield driver.get(test.whereIs('actualXhtmlPage.xhtml'));
|
|
156
|
-
|
|
157
|
-
let el = yield driver.findElement(By.linkText('Foo'));
|
|
158
|
-
return assert(el.getText()).equalTo('Foo');
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
describe('By.name()', function() {
|
|
163
|
-
test.it('should work', function*() {
|
|
164
|
-
yield driver.get(Pages.formPage);
|
|
165
|
-
|
|
166
|
-
let el = yield driver.findElement(By.name('checky'));
|
|
167
|
-
yield assert(el.getAttribute('value')).equalTo('furrfu');
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
test.it('should find multiple elements with same name', function*() {
|
|
171
|
-
yield driver.get(Pages.nestedPage);
|
|
172
|
-
|
|
173
|
-
let elements = yield driver.findElements(By.name('checky'));
|
|
174
|
-
assert(elements.length).greaterThan(1);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
test.it(
|
|
178
|
-
'should be able to find elements that do not support name property',
|
|
179
|
-
function*() {
|
|
180
|
-
yield driver.get(Pages.nestedPage);
|
|
181
|
-
yield driver.findElement(By.name('div1'));
|
|
182
|
-
// Pass if this does not return an error.
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
test.it('shoudl be able to find hidden elements by name', function*() {
|
|
186
|
-
yield driver.get(Pages.formPage);
|
|
187
|
-
yield driver.findElement(By.name('hidden'));
|
|
188
|
-
// Pass if this does not return an error.
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
describe('By.className()', function() {
|
|
193
|
-
test.it('should work', function*() {
|
|
194
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
195
|
-
|
|
196
|
-
let el = yield driver.findElement(By.className('extraDiv'));
|
|
197
|
-
yield assert(el.getText()).startsWith('Another div starts here.');
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
test.it('should work when name is first name among many', function*() {
|
|
201
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
202
|
-
|
|
203
|
-
let el = yield driver.findElement(By.className('nameA'));
|
|
204
|
-
yield assert(el.getText()).equalTo('An H2 title');
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
test.it('should work when name is last name among many', function*() {
|
|
208
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
209
|
-
|
|
210
|
-
let el = yield driver.findElement(By.className('nameC'));
|
|
211
|
-
yield assert(el.getText()).equalTo('An H2 title');
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
test.it('should work when name is middle of many', function*() {
|
|
215
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
216
|
-
|
|
217
|
-
let el = yield driver.findElement(By.className('nameBnoise'));
|
|
218
|
-
yield assert(el.getText()).equalTo('An H2 title');
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
test.it('should work when name surrounded by whitespace', function*() {
|
|
222
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
223
|
-
|
|
224
|
-
let el = yield driver.findElement(By.className('spaceAround'));
|
|
225
|
-
yield assert(el.getText()).equalTo('Spaced out');
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
test.it('should fail if queried name only partially matches', function*() {
|
|
229
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
230
|
-
return driver.findElement(By.className('nameB')).
|
|
231
|
-
then(fail, function(e) {
|
|
232
|
-
assert(e).instanceOf(error.NoSuchElementError);
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
test.it('should implicitly wait', function*() {
|
|
237
|
-
var TIMEOUT_IN_MS = 1000;
|
|
238
|
-
var EPSILON = TIMEOUT_IN_MS / 2;
|
|
239
|
-
|
|
240
|
-
yield driver.manage().timeouts().implicitlyWait(TIMEOUT_IN_MS);
|
|
241
|
-
yield driver.get(Pages.formPage);
|
|
242
|
-
|
|
243
|
-
var start = new Date();
|
|
244
|
-
return driver.findElement(By.id('nonExistantButton')).
|
|
245
|
-
then(fail, function(e) {
|
|
246
|
-
var end = new Date();
|
|
247
|
-
assert(e).instanceOf(error.NoSuchElementError);
|
|
248
|
-
assert(end - start).closeTo(TIMEOUT_IN_MS, EPSILON);
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
test.it('should be able to find multiple matches', function*() {
|
|
253
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
254
|
-
|
|
255
|
-
let elements = yield driver.findElements(By.className('nameC'));
|
|
256
|
-
assert(elements.length).greaterThan(1);
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
test.it('permits compound class names', function() {
|
|
260
|
-
return driver.get(Pages.xhtmlTestPage)
|
|
261
|
-
.then(() => driver.findElement(By.className('nameA nameC')))
|
|
262
|
-
.then(el => el.getText())
|
|
263
|
-
.then(text => assert(text).equalTo('An H2 title'));
|
|
264
|
-
});
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
describe('By.xpath()', function() {
|
|
268
|
-
test.it('should work with multiple matches', function*() {
|
|
269
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
270
|
-
let elements = yield driver.findElements(By.xpath('//div'));
|
|
271
|
-
assert(elements.length).greaterThan(1);
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
test.it('should work for selectors using contains keyword', function*() {
|
|
275
|
-
yield driver.get(Pages.nestedPage);
|
|
276
|
-
yield driver.findElement(By.xpath('//a[contains(., "hello world")]'));
|
|
277
|
-
// Pass if no error.
|
|
278
|
-
});
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
describe('By.tagName()', function() {
|
|
282
|
-
test.it('works', function*() {
|
|
283
|
-
yield driver.get(Pages.formPage);
|
|
284
|
-
|
|
285
|
-
let el = yield driver.findElement(By.tagName('input'));
|
|
286
|
-
yield assert(el.getTagName()).equalTo('input');
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
test.it('can find multiple elements', function*() {
|
|
290
|
-
yield driver.get(Pages.formPage);
|
|
291
|
-
|
|
292
|
-
let elements = yield driver.findElements(By.tagName('input'));
|
|
293
|
-
assert(elements.length).greaterThan(1);
|
|
294
|
-
});
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
describe('By.css()', function() {
|
|
298
|
-
test.it('works', function*() {
|
|
299
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
300
|
-
yield driver.findElement(By.css('div.content'));
|
|
301
|
-
// Pass if no error.
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
test.it('can find multiple elements', function*() {
|
|
305
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
306
|
-
|
|
307
|
-
let elements = yield driver.findElements(By.css('p'));
|
|
308
|
-
assert(elements.length).greaterThan(1);
|
|
309
|
-
// Pass if no error.
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
test.it(
|
|
313
|
-
'should find first matching element when searching by ' +
|
|
314
|
-
'compound CSS selector',
|
|
315
|
-
function*() {
|
|
316
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
317
|
-
|
|
318
|
-
let el =
|
|
319
|
-
yield driver.findElement(By.css('div.extraDiv, div.content'));
|
|
320
|
-
yield assert(el.getAttribute('class')).equalTo('content');
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
test.it('should be able to find multiple elements by compound selector',
|
|
324
|
-
function*() {
|
|
325
|
-
yield driver.get(Pages.xhtmlTestPage);
|
|
326
|
-
let elements =
|
|
327
|
-
yield driver.findElements(By.css('div.extraDiv, div.content'));
|
|
328
|
-
|
|
329
|
-
return Promise.all([
|
|
330
|
-
assertClassIs(elements[0], 'content'),
|
|
331
|
-
assertClassIs(elements[1], 'extraDiv')
|
|
332
|
-
]);
|
|
333
|
-
|
|
334
|
-
function assertClassIs(el, expected) {
|
|
335
|
-
return assert(el.getAttribute('class')).equalTo(expected);
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
// IE only supports short version option[selected].
|
|
340
|
-
test.ignore(browsers(Browser.IE)).
|
|
341
|
-
it('should be able to find element by boolean attribute', function*() {
|
|
342
|
-
yield driver.get(test.whereIs(
|
|
343
|
-
'locators_tests/boolean_attribute_selected.html'));
|
|
344
|
-
|
|
345
|
-
let el = yield driver.findElement(By.css('option[selected="selected"]'));
|
|
346
|
-
yield assert(el.getAttribute('value')).equalTo('two');
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
test.it(
|
|
350
|
-
'should be able to find element with short ' +
|
|
351
|
-
'boolean attribute selector',
|
|
352
|
-
function*() {
|
|
353
|
-
yield driver.get(test.whereIs(
|
|
354
|
-
'locators_tests/boolean_attribute_selected.html'));
|
|
355
|
-
|
|
356
|
-
let el = yield driver.findElement(By.css('option[selected]'));
|
|
357
|
-
yield assert(el.getAttribute('value')).equalTo('two');
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
test.it(
|
|
361
|
-
'should be able to find element with short boolean attribute ' +
|
|
362
|
-
'selector on HTML4 page',
|
|
363
|
-
function*() {
|
|
364
|
-
yield driver.get(test.whereIs(
|
|
365
|
-
'locators_tests/boolean_attribute_selected_html4.html'));
|
|
366
|
-
|
|
367
|
-
let el = yield driver.findElement(By.css('option[selected]'));
|
|
368
|
-
yield assert(el.getAttribute('value')).equalTo('two');
|
|
369
|
-
});
|
|
370
|
-
});
|
|
371
|
-
|
|
372
|
-
describe('by custom locator', function() {
|
|
373
|
-
test.it('handles single element result', function*() {
|
|
374
|
-
yield driver.get(Pages.javascriptPage);
|
|
375
|
-
|
|
376
|
-
let link = yield driver.findElement(function(driver) {
|
|
377
|
-
let links = driver.findElements(By.tagName('a'));
|
|
378
|
-
return promise.filter(links, function(link) {
|
|
379
|
-
return link.getAttribute('id').then(id => id === 'updatediv');
|
|
380
|
-
}).then(links => links[0]);
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
yield assert(link.getText()).matches(/Update\s+a\s+div/);
|
|
384
|
-
});
|
|
385
|
-
|
|
386
|
-
test.it('uses first element if locator resolves to list', function*() {
|
|
387
|
-
yield driver.get(Pages.javascriptPage);
|
|
388
|
-
|
|
389
|
-
let link = yield driver.findElement(function() {
|
|
390
|
-
return driver.findElements(By.tagName('a'));
|
|
391
|
-
});
|
|
392
|
-
|
|
393
|
-
yield assert(link.getText()).isEqualTo('Change the page title!');
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
test.it('fails if locator returns non-webelement value', function*() {
|
|
397
|
-
yield driver.get(Pages.javascriptPage);
|
|
398
|
-
|
|
399
|
-
let link = driver.findElement(function() {
|
|
400
|
-
return driver.getTitle();
|
|
401
|
-
});
|
|
402
|
-
|
|
403
|
-
return link.then(
|
|
404
|
-
() => fail('Should have failed'),
|
|
405
|
-
(e) => assert(e).instanceOf(TypeError));
|
|
406
|
-
});
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
describe('switchTo().activeElement()', function() {
|
|
410
|
-
// SAFARI's new session response does not identify it as a W3C browser,
|
|
411
|
-
// so the command is sent in the unsupported wire protocol format.
|
|
412
|
-
test.ignore(browsers(Browser.SAFARI)).
|
|
413
|
-
it('returns document.activeElement', function*() {
|
|
414
|
-
yield driver.get(Pages.formPage);
|
|
415
|
-
|
|
416
|
-
let email = yield driver.findElement(By.css('#email'));
|
|
417
|
-
yield driver.executeScript('arguments[0].focus()', email);
|
|
418
|
-
|
|
419
|
-
let ae = yield driver.switchTo().activeElement();
|
|
420
|
-
let equal = yield driver.executeScript(
|
|
421
|
-
'return arguments[0] === arguments[1]', email, ae);
|
|
422
|
-
assert(equal).isTrue();
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
});
|
|
426
|
-
});
|