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/net/index.js
CHANGED
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const os = require('os');
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
function getLoInterface() {
|
|
24
|
-
|
|
24
|
+
let name;
|
|
25
25
|
if (process.platform === 'darwin') {
|
|
26
26
|
name = 'lo0';
|
|
27
27
|
} else if (process.platform === 'linux') {
|
|
@@ -34,32 +34,28 @@ function getLoInterface() {
|
|
|
34
34
|
/**
|
|
35
35
|
* Queries the system network interfaces for an IP address.
|
|
36
36
|
* @param {boolean} loopback Whether to find a loopback address.
|
|
37
|
-
* @param {string
|
|
38
|
-
* @return {string} The located IP address or undefined.
|
|
37
|
+
* @param {string} family The IP family (IPv4 or IPv6). Defaults to IPv4.
|
|
38
|
+
* @return {(string|undefined)} The located IP address or undefined.
|
|
39
39
|
*/
|
|
40
|
-
function getAddress(loopback,
|
|
41
|
-
|
|
42
|
-
var addresses = [];
|
|
43
|
-
|
|
44
|
-
var interfaces;
|
|
40
|
+
function getAddress(loopback, family) {
|
|
41
|
+
let interfaces;
|
|
45
42
|
if (loopback) {
|
|
46
|
-
|
|
43
|
+
let lo = getLoInterface();
|
|
47
44
|
interfaces = lo ? [lo] : null;
|
|
48
45
|
}
|
|
49
46
|
interfaces = interfaces || os.networkInterfaces();
|
|
50
|
-
for (
|
|
47
|
+
for (let key in interfaces) {
|
|
51
48
|
if (!interfaces.hasOwnProperty(key)) {
|
|
52
49
|
continue;
|
|
53
50
|
}
|
|
54
51
|
|
|
55
|
-
interfaces[key]
|
|
56
|
-
if (ipAddress.family === family &&
|
|
57
|
-
|
|
58
|
-
addresses.push(ipAddress.address);
|
|
52
|
+
for (let ipAddress of interfaces[key]) {
|
|
53
|
+
if (ipAddress.family === family && ipAddress.internal === loopback) {
|
|
54
|
+
return ipAddress.address;
|
|
59
55
|
}
|
|
60
|
-
}
|
|
56
|
+
}
|
|
61
57
|
}
|
|
62
|
-
return
|
|
58
|
+
return undefined;
|
|
63
59
|
}
|
|
64
60
|
|
|
65
61
|
|
|
@@ -68,21 +64,21 @@ function getAddress(loopback, opt_family) {
|
|
|
68
64
|
|
|
69
65
|
/**
|
|
70
66
|
* Retrieves the external IP address for this host.
|
|
71
|
-
* @param {string=}
|
|
72
|
-
* @return {string} The IP address or undefined if not available.
|
|
67
|
+
* @param {string=} family The IP family to retrieve. Defaults to "IPv4".
|
|
68
|
+
* @return {(string|undefined)} The IP address or undefined if not available.
|
|
73
69
|
*/
|
|
74
|
-
exports.getAddress = function(
|
|
75
|
-
return getAddress(false,
|
|
70
|
+
exports.getAddress = function(family = 'IPv4') {
|
|
71
|
+
return getAddress(false, family);
|
|
76
72
|
};
|
|
77
73
|
|
|
78
74
|
|
|
79
75
|
/**
|
|
80
76
|
* Retrieves a loopback address for this machine.
|
|
81
|
-
* @param {string=}
|
|
82
|
-
* @return {string} The IP address or undefined if not available.
|
|
77
|
+
* @param {string=} family The IP family to retrieve. Defaults to "IPv4".
|
|
78
|
+
* @return {(string|undefined)} The IP address or undefined if not available.
|
|
83
79
|
*/
|
|
84
|
-
exports.getLoopbackAddress = function(
|
|
85
|
-
return getAddress(true,
|
|
80
|
+
exports.getLoopbackAddress = function(family = 'IPv4') {
|
|
81
|
+
return getAddress(true, family);
|
|
86
82
|
};
|
|
87
83
|
|
|
88
84
|
|
package/net/portprober.js
CHANGED
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const fs = require('fs');
|
|
21
|
+
const net = require('net');
|
|
22
|
+
const {exec} = require('child_process');
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
/**
|
|
@@ -34,9 +34,9 @@ const DEFAULT_IANA_RANGE = {min: 49152, max: 65535};
|
|
|
34
34
|
/**
|
|
35
35
|
* The epheremal port range for the current system. Lazily computed on first
|
|
36
36
|
* access.
|
|
37
|
-
* @type {Promise
|
|
37
|
+
* @type {Promise<{min: number, max: number}>}
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
let systemRange = null;
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
/**
|
|
@@ -49,11 +49,10 @@ function findSystemPortRange() {
|
|
|
49
49
|
if (systemRange) {
|
|
50
50
|
return systemRange;
|
|
51
51
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
});
|
|
52
|
+
let range =
|
|
53
|
+
process.platform === 'win32'
|
|
54
|
+
? findWindowsPortRange() : findUnixPortRange();
|
|
55
|
+
return systemRange = range.catch(() => DEFAULT_IANA_RANGE);
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
|
|
@@ -81,7 +80,7 @@ function execute(cmd) {
|
|
|
81
80
|
* @return {!Promise<{min: number, max: number}>} A promise that will resolve
|
|
82
81
|
* with the ephemeral port range on the current system.
|
|
83
82
|
*/
|
|
84
|
-
function findUnixPortRange() {
|
|
83
|
+
async function findUnixPortRange() {
|
|
85
84
|
var cmd;
|
|
86
85
|
if (process.platform === 'sunos') {
|
|
87
86
|
cmd =
|
|
@@ -94,12 +93,17 @@ function findUnixPortRange() {
|
|
|
94
93
|
' | sed -e "s/.*:\\s*//"';
|
|
95
94
|
}
|
|
96
95
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
96
|
+
let stdout = await execute(cmd);
|
|
97
|
+
if (!stdout || !stdout.length) {
|
|
98
|
+
return DEFAULT_IANA_RANGE;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
let range = stdout.trim().split(/\s+/).map(Number);
|
|
102
|
+
if (range.some(isNaN)) {
|
|
103
|
+
return DEFAULT_IANA_RANGE;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
return {min: range[0], max: range[1]};
|
|
103
107
|
}
|
|
104
108
|
|
|
105
109
|
|
|
@@ -108,35 +112,29 @@ function findUnixPortRange() {
|
|
|
108
112
|
* @return {!Promise<{min: number, max: number}>} A promise that will resolve
|
|
109
113
|
* with the ephemeral port range on the current system.
|
|
110
114
|
*/
|
|
111
|
-
function findWindowsPortRange() {
|
|
115
|
+
async function findWindowsPortRange() {
|
|
112
116
|
// First, check if we're running on XP. If this initial command fails,
|
|
113
117
|
// we just fallback on the default IANA range.
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
min: range[0],
|
|
135
|
-
max: range[0] + range[1]
|
|
136
|
-
};
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
});
|
|
118
|
+
let stdout = await execute('cmd.exe /c ver');
|
|
119
|
+
if (/Windows XP/.test(stdout)) {
|
|
120
|
+
// TODO: Try to read these values from the registry.
|
|
121
|
+
return {min: 1025, max: 5000};
|
|
122
|
+
} else {
|
|
123
|
+
stdout = await execute('netsh int ipv4 show dynamicport tcp');
|
|
124
|
+
/* > netsh int ipv4 show dynamicport tcp
|
|
125
|
+
Protocol tcp Dynamic Port Range
|
|
126
|
+
---------------------------------
|
|
127
|
+
Start Port : 49152
|
|
128
|
+
Number of Ports : 16384
|
|
129
|
+
*/
|
|
130
|
+
let range = stdout.split(/\n/)
|
|
131
|
+
.filter((line) => /.*:\s*\d+/.test(line))
|
|
132
|
+
.map((line) => Number(line.split(/:\s*/)[1]));
|
|
133
|
+
return {
|
|
134
|
+
min: range[0],
|
|
135
|
+
max: range[0] + range[1]
|
|
136
|
+
};
|
|
137
|
+
}
|
|
140
138
|
}
|
|
141
139
|
|
|
142
140
|
|
|
@@ -171,30 +169,15 @@ function isFree(port, opt_host) {
|
|
|
171
169
|
* @return {!Promise<number>} A promise that will resolve to a free port. If a
|
|
172
170
|
* port cannot be found, the promise will be rejected.
|
|
173
171
|
*/
|
|
174
|
-
function findFreePort(opt_host) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
reject(Error('Unable to find a free port'));
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
var port = Math.floor(
|
|
187
|
-
Math.random() * (range.max - range.min) + range.min);
|
|
188
|
-
isFree(port, opt_host).then(function(isFree) {
|
|
189
|
-
if (isFree) {
|
|
190
|
-
resolve(port);
|
|
191
|
-
} else {
|
|
192
|
-
findPort();
|
|
193
|
-
}
|
|
194
|
-
}, findPort);
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
});
|
|
172
|
+
async function findFreePort(opt_host) {
|
|
173
|
+
let range = await findSystemPortRange();
|
|
174
|
+
for (let i = 0; i < 100; i++) {
|
|
175
|
+
let port = Math.floor(Math.random() * (range.max - range.min) + range.min);
|
|
176
|
+
if (await isFree(port, opt_host)) {
|
|
177
|
+
return port;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
throw Error('Unable to find a free port');
|
|
198
181
|
}
|
|
199
182
|
|
|
200
183
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "selenium-webdriver",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-alpha.4",
|
|
4
4
|
"description": "The official WebDriver JavaScript bindings from the Selenium project",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"keywords": [
|
|
@@ -20,23 +20,28 @@
|
|
|
20
20
|
"url": "https://github.com/SeleniumHQ/selenium.git"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
23
|
+
"node": ">= 10.15.0"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"jszip": "^3.1.
|
|
27
|
-
"rimraf": "^2.
|
|
26
|
+
"jszip": "^3.1.5",
|
|
27
|
+
"rimraf": "^2.6.3",
|
|
28
28
|
"tmp": "0.0.30",
|
|
29
|
-
"xml2js": "^0.4.
|
|
29
|
+
"xml2js": "^0.4.19"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"express": "^4.
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"serve-index": "^1.
|
|
37
|
-
"sinon": "^
|
|
32
|
+
"express": "^4.16.4",
|
|
33
|
+
"jasmine": "^3.3.1",
|
|
34
|
+
"mocha": "^5.2.0",
|
|
35
|
+
"multer": "^1.4.1",
|
|
36
|
+
"serve-index": "^1.9.1",
|
|
37
|
+
"sinon": "^7.2.3"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
|
-
"test": "mocha -t 600000 --recursive test"
|
|
40
|
+
"test": "mocha -t 600000 --recursive test",
|
|
41
|
+
"test-jasmine": "jasmine JASMINE_CONFIG_PATH=jasmine.json"
|
|
42
|
+
},
|
|
43
|
+
"mocha": {
|
|
44
|
+
"recursive": true,
|
|
45
|
+
"timeout": 600000
|
|
41
46
|
}
|
|
42
47
|
}
|
package/proxy.js
CHANGED
|
File without changes
|
package/remote/index.js
CHANGED
|
@@ -28,7 +28,6 @@ const exec = require('../io/exec');
|
|
|
28
28
|
const {Zip} = require('../io/zip');
|
|
29
29
|
const cmd = require('../lib/command');
|
|
30
30
|
const input = require('../lib/input');
|
|
31
|
-
const promise = require('../lib/promise');
|
|
32
31
|
const webdriver = require('../lib/webdriver');
|
|
33
32
|
const net = require('../net');
|
|
34
33
|
const portprober = require('../net/portprober');
|
|
@@ -253,7 +252,7 @@ class DriverService {
|
|
|
253
252
|
|
|
254
253
|
httpUtil.waitForServer(serverUrl, timeout, cancelToken)
|
|
255
254
|
.then(_ => fulfill(serverUrl), err => {
|
|
256
|
-
if (err instanceof
|
|
255
|
+
if (err instanceof httpUtil.CancellationError) {
|
|
257
256
|
fulfill(serverUrl);
|
|
258
257
|
} else {
|
|
259
258
|
reject(err);
|
|
@@ -278,19 +277,10 @@ class DriverService {
|
|
|
278
277
|
if (!this.address_ || !this.command_) {
|
|
279
278
|
return Promise.resolve(); // Not currently running.
|
|
280
279
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Schedules a task in the current control flow to stop the server if it is
|
|
288
|
-
* currently running.
|
|
289
|
-
* @return {!promise.Thenable} A promise that will be resolved when
|
|
290
|
-
* the server has been stopped.
|
|
291
|
-
*/
|
|
292
|
-
stop() {
|
|
293
|
-
return promise.controlFlow().execute(this.kill.bind(this));
|
|
280
|
+
let cmd = this.command_;
|
|
281
|
+
this.address_ = null;
|
|
282
|
+
this.command_ = null;
|
|
283
|
+
return cmd.then(c => c.kill('SIGTERM'));
|
|
294
284
|
}
|
|
295
285
|
}
|
|
296
286
|
|
|
@@ -510,35 +500,65 @@ class SeleniumServer extends DriverService {
|
|
|
510
500
|
|
|
511
501
|
|
|
512
502
|
/**
|
|
513
|
-
*
|
|
514
|
-
*
|
|
515
|
-
* - `loopback` - Whether the server should only be accessed on this host's
|
|
516
|
-
* loopback address.
|
|
517
|
-
* - `port` - The port to start the server on (must be > 0). If the port is
|
|
518
|
-
* provided as a promise, the service will wait for the promise to resolve
|
|
519
|
-
* before starting.
|
|
520
|
-
* - `args` - The arguments to pass to the service. If a promise is provided,
|
|
521
|
-
* the service will wait for it to resolve before starting.
|
|
522
|
-
* - `jvmArgs` - The arguments to pass to the JVM. If a promise is provided,
|
|
523
|
-
* the service will wait for it to resolve before starting.
|
|
524
|
-
* - `env` - The environment variables that should be visible to the server
|
|
525
|
-
* process. Defaults to inheriting the current process's environment.
|
|
526
|
-
* - `stdio` - IO configuration for the spawned server process. For more
|
|
527
|
-
* information, refer to the documentation of `child_process.spawn`.
|
|
503
|
+
* A record object describing configuration options for a {@link SeleniumServer}
|
|
504
|
+
* instance.
|
|
528
505
|
*
|
|
529
|
-
* @
|
|
530
|
-
* loopback: (boolean|undefined),
|
|
531
|
-
* port: (number|!promise.Promise<number>),
|
|
532
|
-
* args: !(Array<string>|promise.Promise<!Array<string>>),
|
|
533
|
-
* jvmArgs: (!Array<string>|
|
|
534
|
-
* !promise.Promise<!Array<string>>|
|
|
535
|
-
* undefined),
|
|
536
|
-
* env: (!Object<string, string>|undefined),
|
|
537
|
-
* stdio: (string|!Array<string|number|!stream.Stream|null|undefined>|
|
|
538
|
-
* undefined)
|
|
539
|
-
* }}
|
|
506
|
+
* @record
|
|
540
507
|
*/
|
|
541
|
-
SeleniumServer.Options
|
|
508
|
+
SeleniumServer.Options = class {
|
|
509
|
+
constructor() {
|
|
510
|
+
/**
|
|
511
|
+
* Whether the server should only be accessible on this host's loopback
|
|
512
|
+
* address.
|
|
513
|
+
*
|
|
514
|
+
* @type {(boolean|undefined)}
|
|
515
|
+
*/
|
|
516
|
+
this.loopback;
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* The port to start the server on (must be > 0). If the port is provided as
|
|
520
|
+
* a promise, the service will wait for the promise to resolve before
|
|
521
|
+
* starting.
|
|
522
|
+
*
|
|
523
|
+
* @type {(number|!IThenable<number>)}
|
|
524
|
+
*/
|
|
525
|
+
this.port;
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* The arguments to pass to the service. If a promise is provided,
|
|
529
|
+
* the service will wait for it to resolve before starting.
|
|
530
|
+
*
|
|
531
|
+
* @type {!(Array<string>|IThenable<!Array<string>>)}
|
|
532
|
+
*/
|
|
533
|
+
this.args;
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* The arguments to pass to the JVM. If a promise is provided,
|
|
537
|
+
* the service will wait for it to resolve before starting.
|
|
538
|
+
*
|
|
539
|
+
* @type {(!Array<string>|!IThenable<!Array<string>>|undefined)}
|
|
540
|
+
*/
|
|
541
|
+
this.jvmArgs;
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* The environment variables that should be visible to the server
|
|
545
|
+
* process. Defaults to inheriting the current process's environment.
|
|
546
|
+
*
|
|
547
|
+
* @type {(!Object<string, string>|undefined)}
|
|
548
|
+
*/
|
|
549
|
+
this.env;
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* IO configuration for the spawned server process. If unspecified, IO will
|
|
553
|
+
* be ignored.
|
|
554
|
+
*
|
|
555
|
+
* @type {(string|!Array<string|number|!stream.Stream|null|undefined>|
|
|
556
|
+
* undefined)}
|
|
557
|
+
* @see <https://nodejs.org/dist/latest-v8.x/docs/api/child_process.html#child_process_options_stdio>
|
|
558
|
+
*/
|
|
559
|
+
this.stdio;
|
|
560
|
+
}
|
|
561
|
+
};
|
|
542
562
|
|
|
543
563
|
|
|
544
564
|
|
|
@@ -582,8 +602,7 @@ class FileDetector extends input.FileDetector {
|
|
|
582
602
|
.then(encodedZip => {
|
|
583
603
|
let command = new cmd.Command(cmd.Name.UPLOAD_FILE)
|
|
584
604
|
.setParameter('file', encodedZip);
|
|
585
|
-
return driver.
|
|
586
|
-
'remote.FileDetector.handleFile(' + file + ')');
|
|
605
|
+
return driver.execute(command);
|
|
587
606
|
});
|
|
588
607
|
}, function(err) {
|
|
589
608
|
if (err.code === 'ENOENT') {
|