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
|
@@ -1,350 +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 webdriver = require('..'),
|
|
23
|
-
Browser = webdriver.Browser,
|
|
24
|
-
By = webdriver.By,
|
|
25
|
-
assert = require('../testing/assert'),
|
|
26
|
-
test = require('../lib/test');
|
|
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
|
-
test.beforeEach(function() {
|
|
41
|
-
return driver.get(test.Pages.echoPage);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
describe('executeScript;', function() {
|
|
45
|
-
var shouldHaveFailed = new Error('Should have failed');
|
|
46
|
-
|
|
47
|
-
test.it('fails if script throws', function() {
|
|
48
|
-
return execute('throw new Error("boom")')
|
|
49
|
-
.then(function() { throw shouldHaveFailed; })
|
|
50
|
-
.catch(function(e) {
|
|
51
|
-
// The java WebDriver server adds a bunch of crap to error messages.
|
|
52
|
-
// Error message will just be "JavaScript error" for IE.
|
|
53
|
-
assert(e.message).matches(/.*(JavaScript error|boom).*/);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test.it('fails if script does not parse', function() {
|
|
58
|
-
return execute('throw function\\*')
|
|
59
|
-
.then(function() { throw shouldHaveFailed; })
|
|
60
|
-
.catch(function(e) {
|
|
61
|
-
assert(e).notEqualTo(shouldHaveFailed);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
describe('scripts;', function() {
|
|
66
|
-
test.it('do not pollute the global scope', function*() {
|
|
67
|
-
yield execute('var x = 1;');
|
|
68
|
-
yield assert(execute('return typeof x;')).equalTo('undefined');
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
test.it('can set global variables', function*() {
|
|
72
|
-
yield execute('window.x = 1234;');
|
|
73
|
-
yield assert(execute('return x;')).equalTo(1234);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
test.it('may be defined as a function expression', function*() {
|
|
77
|
-
let result = yield execute(function() {
|
|
78
|
-
return 1234 + 'abc';
|
|
79
|
-
});
|
|
80
|
-
assert(result).equalTo('1234abc');
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
describe('return values;', function() {
|
|
85
|
-
|
|
86
|
-
test.it('returns undefined as null', function() {
|
|
87
|
-
return assert(execute('var x; return x;')).isNull();
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test.it('can return null', function() {
|
|
91
|
-
return assert(execute('return null;')).isNull();
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
test.it('can return numbers', function*() {
|
|
95
|
-
yield assert(execute('return 1234')).equalTo(1234);
|
|
96
|
-
yield assert(execute('return 3.1456')).equalTo(3.1456);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
test.it('can return strings', function() {
|
|
100
|
-
return assert(execute('return "hello"')).equalTo('hello');
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
test.it('can return booleans', function*() {
|
|
104
|
-
yield assert(execute('return true')).equalTo(true);
|
|
105
|
-
yield assert(execute('return false')).equalTo(false);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
test.it('can return an array of primitives', function() {
|
|
109
|
-
return execute('var x; return [1, false, null, 3.14, x]')
|
|
110
|
-
.then(verifyJson([1, false, null, 3.14, null]));
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
test.it('can return nested arrays', function() {
|
|
114
|
-
return execute('return [[1, 2, [3]]]').then(verifyJson([[1, 2, [3]]]));
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test.ignore(env.browsers(Browser.IE)).
|
|
118
|
-
it('can return empty object literal', function() {
|
|
119
|
-
return execute('return {}').then(verifyJson({}));
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
test.it('can return object literals', function() {
|
|
123
|
-
return execute('return {a: 1, b: false, c: null}').then(result => {
|
|
124
|
-
verifyJson(['a', 'b', 'c'])(Object.keys(result).sort());
|
|
125
|
-
assert(result.a).equalTo(1);
|
|
126
|
-
assert(result.b).equalTo(false);
|
|
127
|
-
assert(result.c).isNull();
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
test.it('can return complex object literals', function() {
|
|
132
|
-
return execute('return {a:{b: "hello"}}')
|
|
133
|
-
.then(verifyJson({a:{b: 'hello'}}));
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
test.it('can return dom elements as web elements', function*() {
|
|
137
|
-
let result =
|
|
138
|
-
yield execute('return document.querySelector(".header.host")');
|
|
139
|
-
assert(result).instanceOf(webdriver.WebElement);
|
|
140
|
-
|
|
141
|
-
return assert(result.getText()).startsWith('host: ');
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
test.it('can return array of dom elements', function*() {
|
|
145
|
-
let result = yield execute(
|
|
146
|
-
'var nodes = document.querySelectorAll(".request,.host");' +
|
|
147
|
-
'return [nodes[0], nodes[1]];');
|
|
148
|
-
assert(result.length).equalTo(2);
|
|
149
|
-
|
|
150
|
-
assert(result[0]).instanceOf(webdriver.WebElement);
|
|
151
|
-
yield assert(result[0].getText()).startsWith('GET ');
|
|
152
|
-
|
|
153
|
-
assert(result[1]).instanceOf(webdriver.WebElement);
|
|
154
|
-
yield assert(result[1].getText()).startsWith('host: ');
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
test.it('can return a NodeList as an array of web elements', function*() {
|
|
158
|
-
let result =
|
|
159
|
-
yield execute('return document.querySelectorAll(".request,.host");')
|
|
160
|
-
|
|
161
|
-
assert(result.length).equalTo(2);
|
|
162
|
-
|
|
163
|
-
assert(result[0]).instanceOf(webdriver.WebElement);
|
|
164
|
-
yield assert(result[0].getText()).startsWith('GET ');
|
|
165
|
-
|
|
166
|
-
assert(result[1]).instanceOf(webdriver.WebElement);
|
|
167
|
-
yield assert(result[1].getText()).startsWith('host: ');
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
test.it('can return object literal with element property', function*() {
|
|
171
|
-
let result = yield execute('return {a: document.body}');
|
|
172
|
-
|
|
173
|
-
assert(result.a).instanceOf(webdriver.WebElement);
|
|
174
|
-
yield assert(result.a.getTagName()).equalTo('body');
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
describe('parameters;', function() {
|
|
179
|
-
test.it('can pass numeric arguments', function*() {
|
|
180
|
-
yield assert(execute('return arguments[0]', 12)).equalTo(12);
|
|
181
|
-
yield assert(execute('return arguments[0]', 3.14)).equalTo(3.14);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
test.it('can pass boolean arguments', function*() {
|
|
185
|
-
yield assert(execute('return arguments[0]', true)).equalTo(true);
|
|
186
|
-
yield assert(execute('return arguments[0]', false)).equalTo(false);
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
test.it('can pass string arguments', function*() {
|
|
190
|
-
yield assert(execute('return arguments[0]', 'hi')).equalTo('hi');
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
test.it('can pass null arguments', function*() {
|
|
194
|
-
yield assert(execute('return arguments[0] === null', null)).equalTo(true);
|
|
195
|
-
yield assert(execute('return arguments[0]', null)).equalTo(null);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
test.it('passes undefined as a null argument', function*() {
|
|
199
|
-
var x;
|
|
200
|
-
yield assert(execute('return arguments[0] === null', x)).equalTo(true);
|
|
201
|
-
yield assert(execute('return arguments[0]', x)).equalTo(null);
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
test.it('can pass multiple arguments', function*() {
|
|
205
|
-
yield assert(execute('return arguments.length')).equalTo(0);
|
|
206
|
-
yield assert(execute('return arguments.length', 1, 'a', false)).equalTo(3);
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
test.ignore(env.browsers(Browser.FIREFOX, Browser.SAFARI)).
|
|
210
|
-
it('can return arguments object as array', function*() {
|
|
211
|
-
let val = yield execute('return arguments', 1, 'a', false);
|
|
212
|
-
|
|
213
|
-
assert(val.length).equalTo(3);
|
|
214
|
-
assert(val[0]).equalTo(1);
|
|
215
|
-
assert(val[1]).equalTo('a');
|
|
216
|
-
assert(val[2]).equalTo(false);
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
test.it('can pass object literal', function*() {
|
|
220
|
-
let result = yield execute(
|
|
221
|
-
'return [typeof arguments[0], arguments[0].a]', {a: 'hello'})
|
|
222
|
-
assert(result[0]).equalTo('object');
|
|
223
|
-
assert(result[1]).equalTo('hello');
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
test.it('WebElement arguments are passed as DOM elements', function*() {
|
|
227
|
-
let el = yield driver.findElement(By.tagName('div'));
|
|
228
|
-
let result =
|
|
229
|
-
yield execute('return arguments[0].tagName.toLowerCase();', el);
|
|
230
|
-
assert(result).equalTo('div');
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
test.it('can pass array containing object literals', function*() {
|
|
234
|
-
let result = yield execute('return arguments[0]', [{color: "red"}]);
|
|
235
|
-
assert(result.length).equalTo(1);
|
|
236
|
-
assert(result[0].color).equalTo('red');
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
test.it('does not modify object literal parameters', function() {
|
|
240
|
-
var input = {color: 'red'};
|
|
241
|
-
return execute('return arguments[0];', input).then(verifyJson(input));
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
// See https://code.google.com/p/selenium/issues/detail?id=8223.
|
|
246
|
-
describe('issue 8223;', function() {
|
|
247
|
-
describe('using for..in loops;', function() {
|
|
248
|
-
test.it('can return array built from for-loop index', function() {
|
|
249
|
-
return execute(function() {
|
|
250
|
-
var ret = [];
|
|
251
|
-
for (var i = 0; i < 3; i++) {
|
|
252
|
-
ret.push(i);
|
|
253
|
-
}
|
|
254
|
-
return ret;
|
|
255
|
-
}).then(verifyJson[0, 1, 2]);
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
test.it('can copy input array contents', function() {
|
|
259
|
-
return execute(function(input) {
|
|
260
|
-
var ret = [];
|
|
261
|
-
for (var i in input) {
|
|
262
|
-
ret.push(input[i]);
|
|
263
|
-
}
|
|
264
|
-
return ret;
|
|
265
|
-
}, ['fa', 'fe', 'fi']).then(verifyJson(['fa', 'fe', 'fi']));
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
test.it('can iterate over input object keys', function() {
|
|
269
|
-
return execute(function(thing) {
|
|
270
|
-
var ret = [];
|
|
271
|
-
for (var w in thing.words) {
|
|
272
|
-
ret.push(thing.words[w].word);
|
|
273
|
-
}
|
|
274
|
-
return ret;
|
|
275
|
-
}, {words: [{word: 'fa'}, {word: 'fe'}, {word: 'fi'}]})
|
|
276
|
-
.then(verifyJson(['fa', 'fe', 'fi']));
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
describe('recursive functions;', function() {
|
|
280
|
-
test.it('can build array from input', function() {
|
|
281
|
-
var input = ['fa', 'fe', 'fi'];
|
|
282
|
-
return execute(function(thearray) {
|
|
283
|
-
var ret = [];
|
|
284
|
-
function build_response(thearray, ret) {
|
|
285
|
-
ret.push(thearray.shift());
|
|
286
|
-
return (!thearray.length && ret
|
|
287
|
-
|| build_response(thearray, ret));
|
|
288
|
-
}
|
|
289
|
-
return build_response(thearray, ret);
|
|
290
|
-
}, input).then(verifyJson(input));
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
test.it('can build array from elements in object', function() {
|
|
294
|
-
var input = {words: [{word: 'fa'}, {word: 'fe'}, {word: 'fi'}]};
|
|
295
|
-
return execute(function(thing) {
|
|
296
|
-
var ret = [];
|
|
297
|
-
function build_response(thing, ret) {
|
|
298
|
-
var item = thing.words.shift();
|
|
299
|
-
ret.push(item.word);
|
|
300
|
-
return (!thing.words.length && ret
|
|
301
|
-
|| build_response(thing, ret));
|
|
302
|
-
}
|
|
303
|
-
return build_response(thing, ret);
|
|
304
|
-
}, input).then(verifyJson(['fa', 'fe', 'fi']));
|
|
305
|
-
});
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
describe('async timeouts', function() {
|
|
311
|
-
var TIMEOUT_IN_MS = 200;
|
|
312
|
-
var ACCEPTABLE_WAIT = TIMEOUT_IN_MS / 10;
|
|
313
|
-
var TOO_LONG_WAIT = TIMEOUT_IN_MS * 10;
|
|
314
|
-
|
|
315
|
-
before(function() {
|
|
316
|
-
return driver.manage().timeouts().setScriptTimeout(TIMEOUT_IN_MS)
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
test.it('does not fail if script execute in time', function() {
|
|
320
|
-
return executeTimeOutScript(ACCEPTABLE_WAIT);
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
test.it('fails if script took too long', function() {
|
|
324
|
-
return executeTimeOutScript(TOO_LONG_WAIT)
|
|
325
|
-
.then(function() {
|
|
326
|
-
fail('it should have timed out');
|
|
327
|
-
}).catch(function(e) {
|
|
328
|
-
assert(e.name).equalTo('ScriptTimeoutError');
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
function executeTimeOutScript(sleepTime) {
|
|
333
|
-
return driver.executeAsyncScript(function(sleepTime) {
|
|
334
|
-
var callback = arguments[arguments.length - 1];
|
|
335
|
-
setTimeout(callback, sleepTime)
|
|
336
|
-
}, sleepTime);
|
|
337
|
-
}
|
|
338
|
-
})
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
function verifyJson(expected) {
|
|
342
|
-
return function(actual) {
|
|
343
|
-
return assert(JSON.stringify(actual)).equalTo(JSON.stringify(expected));
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
function execute() {
|
|
348
|
-
return driver.executeScript.apply(driver, arguments);
|
|
349
|
-
}
|
|
350
|
-
});
|
package/test/fingerprint_test.js
DELETED
|
@@ -1,62 +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('../testing/assert'),
|
|
21
|
-
test = require('../lib/test'),
|
|
22
|
-
Pages = test.Pages;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
test.suite(function(env) {
|
|
26
|
-
var browsers = env.browsers;
|
|
27
|
-
|
|
28
|
-
var driver;
|
|
29
|
-
test.before(function() {
|
|
30
|
-
driver = env.builder().build();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
test.after(function() {
|
|
34
|
-
driver.quit();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe('fingerprinting', function() {
|
|
38
|
-
test.it('it should fingerprint the navigator object', function*() {
|
|
39
|
-
yield driver.get(Pages.simpleTestPage);
|
|
40
|
-
|
|
41
|
-
let wd = yield driver.executeScript('return navigator.webdriver');
|
|
42
|
-
assert(wd).equalTo(true);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test.it('fingerprint must not be writable', function*() {
|
|
46
|
-
yield driver.get(Pages.simpleTestPage);
|
|
47
|
-
|
|
48
|
-
let wd = yield driver.executeScript(
|
|
49
|
-
'navigator.webdriver = "ohai"; return navigator.webdriver');
|
|
50
|
-
assert(wd).equalTo(true);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test.it('leaves fingerprint on svg pages', function*() {
|
|
54
|
-
yield driver.get(Pages.svgPage);
|
|
55
|
-
|
|
56
|
-
let wd = yield driver.executeScript('return navigator.webdriver');
|
|
57
|
-
assert(wd).equalTo(true);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// Currently only implemented in legacy firefox.
|
|
62
|
-
}, {browsers: ['legacy-firefox']});
|
|
@@ -1,120 +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
|
-
crypto = require('crypto'),
|
|
22
|
-
fs = require('fs'),
|
|
23
|
-
path = require('path');
|
|
24
|
-
|
|
25
|
-
var extension = require('../../firefox/extension'),
|
|
26
|
-
io = require('../../io'),
|
|
27
|
-
zip = require('../../io/zip'),
|
|
28
|
-
it = require('../../testing').it;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
var JETPACK_EXTENSION = path.join(__dirname,
|
|
32
|
-
'../../lib/test/data/firefox/jetpack-sample.xpi');
|
|
33
|
-
var NORMAL_EXTENSION = path.join(__dirname,
|
|
34
|
-
'../../lib/test/data/firefox/sample.xpi');
|
|
35
|
-
var WEBEXTENSION_EXTENSION = path.join(__dirname,
|
|
36
|
-
'../../lib/test/data/firefox/webextension.xpi');
|
|
37
|
-
|
|
38
|
-
var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack';
|
|
39
|
-
var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org';
|
|
40
|
-
var WEBEXTENSION_EXTENSION_ID = 'webextensions-selenium-example@example.com';
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
describe('extension', function() {
|
|
44
|
-
it('can install a jetpack xpi file', function() {
|
|
45
|
-
return io.tmpDir().then(function(dir) {
|
|
46
|
-
return extension.install(JETPACK_EXTENSION, dir).then(function(id) {
|
|
47
|
-
assert.equal(JETPACK_EXTENSION_ID, id);
|
|
48
|
-
var file = path.join(dir, id + '.xpi');
|
|
49
|
-
assert.ok(fs.existsSync(file), 'no such file: ' + file);
|
|
50
|
-
assert.ok(!fs.statSync(file).isDirectory());
|
|
51
|
-
|
|
52
|
-
var copiedSha1 = crypto.createHash('sha1')
|
|
53
|
-
.update(fs.readFileSync(file))
|
|
54
|
-
.digest('hex');
|
|
55
|
-
|
|
56
|
-
var goldenSha1 = crypto.createHash('sha1')
|
|
57
|
-
.update(fs.readFileSync(JETPACK_EXTENSION))
|
|
58
|
-
.digest('hex');
|
|
59
|
-
|
|
60
|
-
assert.equal(copiedSha1, goldenSha1);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('can install a normal xpi file', function() {
|
|
66
|
-
return io.tmpDir().then(function(dir) {
|
|
67
|
-
return extension.install(NORMAL_EXTENSION, dir).then(function(id) {
|
|
68
|
-
assert.equal(NORMAL_EXTENSION_ID, id);
|
|
69
|
-
|
|
70
|
-
var file = path.join(dir, NORMAL_EXTENSION_ID);
|
|
71
|
-
assert.ok(fs.statSync(file).isDirectory());
|
|
72
|
-
|
|
73
|
-
assert.ok(fs.existsSync(path.join(file, 'chrome.manifest')));
|
|
74
|
-
assert.ok(fs.existsSync(path.join(file, 'content/overlay.xul')));
|
|
75
|
-
assert.ok(fs.existsSync(path.join(file, 'content/overlay.js')));
|
|
76
|
-
assert.ok(fs.existsSync(path.join(file, 'install.rdf')));
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('can install a webextension xpi file', function() {
|
|
82
|
-
return io.tmpDir().then(function(dir) {
|
|
83
|
-
return extension.install(WEBEXTENSION_EXTENSION, dir).then(function(id) {
|
|
84
|
-
assert.equal(WEBEXTENSION_EXTENSION_ID, id);
|
|
85
|
-
var file = path.join(dir, id + '.xpi');
|
|
86
|
-
assert.ok(fs.existsSync(file), 'no such file: ' + file);
|
|
87
|
-
assert.ok(!fs.statSync(file).isDirectory());
|
|
88
|
-
|
|
89
|
-
var copiedSha1 = crypto.createHash('sha1')
|
|
90
|
-
.update(fs.readFileSync(file))
|
|
91
|
-
.digest('hex');
|
|
92
|
-
|
|
93
|
-
var goldenSha1 = crypto.createHash('sha1')
|
|
94
|
-
.update(fs.readFileSync(WEBEXTENSION_EXTENSION))
|
|
95
|
-
.digest('hex');
|
|
96
|
-
|
|
97
|
-
assert.equal(copiedSha1, goldenSha1);
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('can install an extension from a directory', function() {
|
|
103
|
-
return io.tmpDir().then(function(srcDir) {
|
|
104
|
-
return zip.unzip(NORMAL_EXTENSION, srcDir)
|
|
105
|
-
.then(() => io.tmpDir())
|
|
106
|
-
.then(dstDir => {
|
|
107
|
-
return extension.install(srcDir, dstDir).then(function(id) {
|
|
108
|
-
assert.equal(NORMAL_EXTENSION_ID, id);
|
|
109
|
-
|
|
110
|
-
var dir = path.join(dstDir, NORMAL_EXTENSION_ID);
|
|
111
|
-
|
|
112
|
-
assert.ok(fs.existsSync(path.join(dir, 'chrome.manifest')));
|
|
113
|
-
assert.ok(fs.existsSync(path.join(dir, 'content/overlay.xul')));
|
|
114
|
-
assert.ok(fs.existsSync(path.join(dir, 'content/overlay.js')));
|
|
115
|
-
assert.ok(fs.existsSync(path.join(dir, 'install.rdf')));
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
});
|