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.
Files changed (366) hide show
  1. package/CHANGES.md +246 -0
  2. package/LICENSE +1 -1
  3. package/NOTICE +1 -1
  4. package/README.md +40 -40
  5. package/chrome.js +118 -134
  6. package/edge.js +43 -117
  7. package/example/chrome_android.js +8 -9
  8. package/example/chrome_mobile_emulation.js +8 -9
  9. package/example/firefox_channels.js +23 -19
  10. package/example/google_search.js +3 -3
  11. package/example/google_search_test.js +38 -27
  12. package/example/{chrome_headless.js → headless.js} +15 -7
  13. package/example/logging.js +40 -7
  14. package/firefox.js +789 -0
  15. package/http/index.js +62 -9
  16. package/http/util.js +11 -6
  17. package/ie.js +83 -97
  18. package/index.js +198 -114
  19. package/io/exec.js +29 -15
  20. package/io/index.js +1 -1
  21. package/io/zip.js +1 -1
  22. package/lib/actions.js +68 -63
  23. package/lib/atoms/get-attribute.js +86 -0
  24. package/lib/atoms/is-displayed.js +76 -76
  25. package/lib/by.js +7 -4
  26. package/lib/capabilities.js +310 -210
  27. package/lib/command.js +27 -51
  28. package/lib/error.js +100 -41
  29. package/lib/http.js +161 -120
  30. package/lib/input.js +1044 -8
  31. package/lib/logging.js +1 -5
  32. package/lib/promise.js +222 -3331
  33. package/lib/proxy.js +134 -39
  34. package/lib/session.js +2 -2
  35. package/lib/symbols.js +0 -0
  36. package/lib/until.js +1 -1
  37. package/lib/webdriver.js +717 -953
  38. package/net/index.js +21 -25
  39. package/net/portprober.js +51 -68
  40. package/package.json +17 -12
  41. package/proxy.js +0 -0
  42. package/remote/index.js +63 -44
  43. package/safari.js +41 -128
  44. package/testing/index.js +386 -315
  45. package/.npmignore +0 -2
  46. package/example/async_await_test.js +0 -68
  47. package/example/google_search_generator.js +0 -50
  48. package/example/parallel_flows.js +0 -54
  49. package/firefox/binary.js +0 -344
  50. package/firefox/extension.js +0 -224
  51. package/firefox/index.js +0 -626
  52. package/firefox/profile.js +0 -394
  53. package/lib/README +0 -5
  54. package/lib/atoms/getAttribute.js +0 -9
  55. package/lib/devmode.js +0 -34
  56. package/lib/events.js +0 -210
  57. package/lib/firefox/webdriver.json +0 -70
  58. package/lib/test/build.js +0 -151
  59. package/lib/test/data/ClickTest_testClicksASurroundingStrongTag.html +0 -11
  60. package/lib/test/data/Page.aspx +0 -17
  61. package/lib/test/data/Page.aspx.cs +0 -22
  62. package/lib/test/data/Redirect.aspx +0 -11
  63. package/lib/test/data/Redirect.aspx.cs +0 -9
  64. package/lib/test/data/Settings.StyleCop +0 -759
  65. package/lib/test/data/Web.Config +0 -59
  66. package/lib/test/data/actualXhtmlPage.xhtml +0 -14
  67. package/lib/test/data/ajaxy_page.html +0 -81
  68. package/lib/test/data/alerts.html +0 -85
  69. package/lib/test/data/banner.gif +0 -0
  70. package/lib/test/data/beach.jpg +0 -0
  71. package/lib/test/data/blank.html +0 -1
  72. package/lib/test/data/bodyTypingTest.html +0 -41
  73. package/lib/test/data/booleanAttributes.html +0 -19
  74. package/lib/test/data/child/childPage.html +0 -8
  75. package/lib/test/data/child/grandchild/grandchildPage.html +0 -8
  76. package/lib/test/data/clickEventPage.html +0 -26
  77. package/lib/test/data/click_frames.html +0 -10
  78. package/lib/test/data/click_jacker.html +0 -38
  79. package/lib/test/data/click_out_of_bounds.html +0 -23
  80. package/lib/test/data/click_out_of_bounds_overflow.html +0 -85
  81. package/lib/test/data/click_rtl.html +0 -19
  82. package/lib/test/data/click_source.html +0 -18
  83. package/lib/test/data/click_tests/click_iframe.html +0 -6
  84. package/lib/test/data/click_tests/click_in_iframe.html +0 -8
  85. package/lib/test/data/click_tests/disabled_element.html +0 -12
  86. package/lib/test/data/click_tests/disappearing_element.html +0 -62
  87. package/lib/test/data/click_tests/google_map.html +0 -15
  88. package/lib/test/data/click_tests/google_map.png +0 -0
  89. package/lib/test/data/click_tests/html5_submit_buttons.html +0 -16
  90. package/lib/test/data/click_tests/issue5237.html +0 -9
  91. package/lib/test/data/click_tests/issue5237_frame.html +0 -1
  92. package/lib/test/data/click_tests/issue5237_target.html +0 -10
  93. package/lib/test/data/click_tests/link_that_wraps.html +0 -11
  94. package/lib/test/data/click_tests/mapped_page1.html +0 -9
  95. package/lib/test/data/click_tests/mapped_page2.html +0 -9
  96. package/lib/test/data/click_tests/mapped_page3.html +0 -9
  97. package/lib/test/data/click_tests/overlapping_elements.html +0 -70
  98. package/lib/test/data/click_tests/partially_overlapping_elements.html +0 -124
  99. package/lib/test/data/click_tests/span_that_wraps.html +0 -11
  100. package/lib/test/data/click_tests/submitted_page.html +0 -9
  101. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +0 -13
  102. package/lib/test/data/click_too_big.html +0 -10
  103. package/lib/test/data/click_too_big_in_frame.html +0 -11
  104. package/lib/test/data/clicks.html +0 -35
  105. package/lib/test/data/closeable_window.html +0 -8
  106. package/lib/test/data/cn-test.html +0 -156
  107. package/lib/test/data/colorPage.html +0 -20
  108. package/lib/test/data/cookies.html +0 -30
  109. package/lib/test/data/coordinates_tests/element_in_frame.html +0 -9
  110. package/lib/test/data/coordinates_tests/element_in_nested_frame.html +0 -9
  111. package/lib/test/data/coordinates_tests/page_with_element_out_of_view.html +0 -11
  112. package/lib/test/data/coordinates_tests/page_with_empty_element.html +0 -10
  113. package/lib/test/data/coordinates_tests/page_with_fixed_element.html +0 -12
  114. package/lib/test/data/coordinates_tests/page_with_hidden_element.html +0 -10
  115. package/lib/test/data/coordinates_tests/page_with_invisible_element.html +0 -10
  116. package/lib/test/data/coordinates_tests/page_with_transparent_element.html +0 -10
  117. package/lib/test/data/coordinates_tests/simple_page.html +0 -10
  118. package/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  119. package/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  120. package/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  121. package/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  122. package/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  123. package/lib/test/data/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  124. package/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  125. package/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  126. package/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  127. package/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  128. package/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  129. package/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  130. package/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  131. package/lib/test/data/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  132. package/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css +0 -573
  133. package/lib/test/data/cssTransform.html +0 -61
  134. package/lib/test/data/cssTransform2.html +0 -20
  135. package/lib/test/data/document_write_in_onload.html +0 -13
  136. package/lib/test/data/dragAndDropInsideScrolledDiv.html +0 -67
  137. package/lib/test/data/dragAndDropTest.html +0 -102
  138. package/lib/test/data/dragDropOverflow.html +0 -104
  139. package/lib/test/data/draggableLists.html +0 -67
  140. package/lib/test/data/droppableItems.html +0 -65
  141. package/lib/test/data/dynamic.html +0 -39
  142. package/lib/test/data/dynamicallyModifiedPage.html +0 -42
  143. package/lib/test/data/errors.html +0 -15
  144. package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
  145. package/lib/test/data/firefox/sample.xpi +0 -0
  146. package/lib/test/data/firefox/webextension.xpi +0 -0
  147. package/lib/test/data/fixedFooterNoScroll.html +0 -13
  148. package/lib/test/data/fixedFooterNoScrollQuirksMode.html +0 -12
  149. package/lib/test/data/formPage.html +0 -175
  150. package/lib/test/data/formSelectionPage.html +0 -46
  151. package/lib/test/data/form_handling_js_submit.html +0 -30
  152. package/lib/test/data/framePage3.html +0 -7
  153. package/lib/test/data/frameScrollChild.html +0 -26
  154. package/lib/test/data/frameScrollPage.html +0 -14
  155. package/lib/test/data/frameScrollParent.html +0 -11
  156. package/lib/test/data/frameWithAnimals.html +0 -11
  157. package/lib/test/data/frame_switching_tests/bug4876.html +0 -9
  158. package/lib/test/data/frame_switching_tests/bug4876_iframe.html +0 -9
  159. package/lib/test/data/frame_switching_tests/deletingFrame.html +0 -29
  160. package/lib/test/data/frame_switching_tests/deletingFrame_iframe.html +0 -8
  161. package/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html +0 -7
  162. package/lib/test/data/frameset.html +0 -14
  163. package/lib/test/data/framesetPage2.html +0 -7
  164. package/lib/test/data/framesetPage3.html +0 -4
  165. package/lib/test/data/globalscope.html +0 -15
  166. package/lib/test/data/hidden.html +0 -5
  167. package/lib/test/data/hidden_partially.html +0 -45
  168. package/lib/test/data/html5/blue.jpg +0 -0
  169. package/lib/test/data/html5/database.js +0 -84
  170. package/lib/test/data/html5/geolocation.js +0 -18
  171. package/lib/test/data/html5/green.jpg +0 -0
  172. package/lib/test/data/html5/red.jpg +0 -0
  173. package/lib/test/data/html5/status.html +0 -1
  174. package/lib/test/data/html5/test.appcache +0 -11
  175. package/lib/test/data/html5/yellow.jpg +0 -0
  176. package/lib/test/data/html5Page.html +0 -32
  177. package/lib/test/data/icon.gif +0 -0
  178. package/lib/test/data/idElements.html +0 -2
  179. package/lib/test/data/iframeAtBottom.html +0 -15
  180. package/lib/test/data/iframeWithAlert.html +0 -1
  181. package/lib/test/data/iframeWithIframe.html +0 -1
  182. package/lib/test/data/iframes.html +0 -11
  183. package/lib/test/data/injectableContent.html +0 -22
  184. package/lib/test/data/javascriptEnhancedForm.html +0 -30
  185. package/lib/test/data/javascriptPage.html +0 -285
  186. package/lib/test/data/jquery-1.3.2.js +0 -4376
  187. package/lib/test/data/js/jquery-1.4.4.min.js +0 -167
  188. package/lib/test/data/js/jquery-ui-1.8.10.custom.min.js +0 -782
  189. package/lib/test/data/js/skins/lightgray/content.inline.min.css +0 -1
  190. package/lib/test/data/js/skins/lightgray/content.min.css +0 -1
  191. package/lib/test/data/js/skins/lightgray/fonts/readme.md +0 -1
  192. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg +0 -175
  193. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot +0 -0
  194. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.svg +0 -62
  195. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  196. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff +0 -0
  197. package/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg +0 -153
  198. package/lib/test/data/js/skins/lightgray/fonts/tinymce.eot +0 -0
  199. package/lib/test/data/js/skins/lightgray/fonts/tinymce.svg +0 -63
  200. package/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf +0 -0
  201. package/lib/test/data/js/skins/lightgray/fonts/tinymce.woff +0 -0
  202. package/lib/test/data/js/skins/lightgray/img/anchor.gif +0 -0
  203. package/lib/test/data/js/skins/lightgray/img/loader.gif +0 -0
  204. package/lib/test/data/js/skins/lightgray/img/object.gif +0 -0
  205. package/lib/test/data/js/skins/lightgray/img/trans.gif +0 -0
  206. package/lib/test/data/js/skins/lightgray/skin.ie7.min.css +0 -1
  207. package/lib/test/data/js/skins/lightgray/skin.min.css +0 -1
  208. package/lib/test/data/js/themes/modern/theme.min.js +0 -1
  209. package/lib/test/data/js/tinymce.min.js +0 -10
  210. package/lib/test/data/key_logger.html +0 -34
  211. package/lib/test/data/key_tests/remove_on_keypress.html +0 -36
  212. package/lib/test/data/keyboard_shortcut.html +0 -36
  213. package/lib/test/data/linked_image.html +0 -16
  214. package/lib/test/data/locators_tests/boolean_attribute_selected.html +0 -13
  215. package/lib/test/data/locators_tests/boolean_attribute_selected_html4.html +0 -13
  216. package/lib/test/data/longContentPage.html +0 -55
  217. package/lib/test/data/macbeth.html +0 -5255
  218. package/lib/test/data/map.png +0 -0
  219. package/lib/test/data/map_visibility.html +0 -8
  220. package/lib/test/data/markerTransparent.png +0 -0
  221. package/lib/test/data/messages.html +0 -15
  222. package/lib/test/data/meta-redirect.html +0 -11
  223. package/lib/test/data/missedJsReference.html +0 -11
  224. package/lib/test/data/modal_dialogs/modal_1.html +0 -21
  225. package/lib/test/data/modal_dialogs/modal_2.html +0 -21
  226. package/lib/test/data/modal_dialogs/modal_3.html +0 -15
  227. package/lib/test/data/modal_dialogs/modalindex.html +0 -21
  228. package/lib/test/data/mouseOver.html +0 -17
  229. package/lib/test/data/mousePositionTracker.html +0 -33
  230. package/lib/test/data/nestedElements.html +0 -164
  231. package/lib/test/data/overflow/x_auto_y_auto.html +0 -30
  232. package/lib/test/data/overflow/x_auto_y_hidden.html +0 -30
  233. package/lib/test/data/overflow/x_auto_y_scroll.html +0 -30
  234. package/lib/test/data/overflow/x_hidden_y_auto.html +0 -30
  235. package/lib/test/data/overflow/x_hidden_y_hidden.html +0 -30
  236. package/lib/test/data/overflow/x_hidden_y_scroll.html +0 -30
  237. package/lib/test/data/overflow/x_scroll_y_auto.html +0 -30
  238. package/lib/test/data/overflow/x_scroll_y_hidden.html +0 -30
  239. package/lib/test/data/overflow/x_scroll_y_scroll.html +0 -30
  240. package/lib/test/data/overflow-body.html +0 -15
  241. package/lib/test/data/pageWithOnBeforeUnloadMessage.html +0 -20
  242. package/lib/test/data/pageWithOnLoad.html +0 -6
  243. package/lib/test/data/pageWithOnUnload.html +0 -6
  244. package/lib/test/data/page_with_link_to_slow_loading_page.html +0 -6
  245. package/lib/test/data/plain.txt +0 -1
  246. package/lib/test/data/proxy/page1.html +0 -20
  247. package/lib/test/data/proxy/page2.html +0 -24
  248. package/lib/test/data/proxy/page3.html +0 -5
  249. package/lib/test/data/readOnlyPage.html +0 -24
  250. package/lib/test/data/rectangles.html +0 -40
  251. package/lib/test/data/resultPage.html +0 -25
  252. package/lib/test/data/rich_text.html +0 -161
  253. package/lib/test/data/safari/frames_benchmark.html +0 -31
  254. package/lib/test/data/screen/screen.css +0 -19
  255. package/lib/test/data/screen/screen.html +0 -72
  256. package/lib/test/data/screen/screen.js +0 -7
  257. package/lib/test/data/screen/screen_frame1.html +0 -72
  258. package/lib/test/data/screen/screen_frame2.html +0 -72
  259. package/lib/test/data/screen/screen_frames.html +0 -11
  260. package/lib/test/data/screen/screen_iframes.html +0 -12
  261. package/lib/test/data/screen/screen_too_long.html +0 -68
  262. package/lib/test/data/screen/screen_x_long.html +0 -72
  263. package/lib/test/data/screen/screen_x_too_long.html +0 -72
  264. package/lib/test/data/screen/screen_y_long.html +0 -72
  265. package/lib/test/data/screen/screen_y_too_long.html +0 -72
  266. package/lib/test/data/scroll.html +0 -27
  267. package/lib/test/data/scroll2.html +0 -21
  268. package/lib/test/data/scroll3.html +0 -8
  269. package/lib/test/data/scroll4.html +0 -7
  270. package/lib/test/data/scroll5.html +0 -18
  271. package/lib/test/data/scrolling_tests/frame_with_height_above_200.html +0 -26
  272. package/lib/test/data/scrolling_tests/frame_with_height_above_2000.html +0 -26
  273. package/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html +0 -11
  274. package/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html +0 -12
  275. package/lib/test/data/scrolling_tests/frame_with_small_height.html +0 -10
  276. package/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html +0 -19
  277. package/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html +0 -12
  278. package/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html +0 -11
  279. package/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html +0 -12
  280. package/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html +0 -11
  281. package/lib/test/data/scrolling_tests/page_with_scrolling_frame.html +0 -11
  282. package/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html +0 -12
  283. package/lib/test/data/scrolling_tests/page_with_tall_frame.html +0 -11
  284. package/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html +0 -14
  285. package/lib/test/data/scrolling_tests/target_page.html +0 -9
  286. package/lib/test/data/selectPage.html +0 -58
  287. package/lib/test/data/selectableItems.html +0 -65
  288. package/lib/test/data/sessionCookie.html +0 -21
  289. package/lib/test/data/sessionCookieDest.html +0 -34
  290. package/lib/test/data/simple.xml +0 -5
  291. package/lib/test/data/simpleTest.html +0 -98
  292. package/lib/test/data/single_text_input.html +0 -12
  293. package/lib/test/data/slowLoadingAlert.html +0 -10
  294. package/lib/test/data/slowLoadingResourcePage.html +0 -12
  295. package/lib/test/data/slow_loading_iframes.html +0 -14
  296. package/lib/test/data/styledPage.html +0 -28
  297. package/lib/test/data/svgPiechart.xhtml +0 -81
  298. package/lib/test/data/svgTest.svg +0 -4
  299. package/lib/test/data/tables.html +0 -36
  300. package/lib/test/data/tinymce.html +0 -10
  301. package/lib/test/data/transformable.xml +0 -11
  302. package/lib/test/data/transformable.xsl +0 -37
  303. package/lib/test/data/transparentUpload.html +0 -70
  304. package/lib/test/data/underscore.html +0 -9
  305. package/lib/test/data/unicode_ltr.html +0 -8
  306. package/lib/test/data/upload.html +0 -45
  307. package/lib/test/data/userDefinedProperty.html +0 -8
  308. package/lib/test/data/veryLargeCanvas.html +0 -81
  309. package/lib/test/data/visibility-css.html +0 -21
  310. package/lib/test/data/win32frameset.html +0 -8
  311. package/lib/test/data/window_switching_tests/page_with_frame.html +0 -12
  312. package/lib/test/data/window_switching_tests/simple_page.html +0 -9
  313. package/lib/test/data/xhtmlFormPage.xhtml +0 -17
  314. package/lib/test/data/xhtmlTest.html +0 -76
  315. package/lib/test/fileserver.js +0 -321
  316. package/lib/test/httpserver.js +0 -120
  317. package/lib/test/index.js +0 -270
  318. package/lib/test/promise.js +0 -79
  319. package/lib/test/resources.js +0 -44
  320. package/opera.js +0 -405
  321. package/phantomjs.js +0 -282
  322. package/test/actions_test.js +0 -52
  323. package/test/chrome/options_test.js +0 -227
  324. package/test/chrome/service_test.js +0 -45
  325. package/test/cookie_test.js +0 -214
  326. package/test/element_finding_test.js +0 -426
  327. package/test/execute_script_test.js +0 -350
  328. package/test/fingerprint_test.js +0 -62
  329. package/test/firefox/extension_test.js +0 -120
  330. package/test/firefox/firefox_test.js +0 -261
  331. package/test/firefox/profile_test.js +0 -140
  332. package/test/http/http_test.js +0 -223
  333. package/test/http/util_test.js +0 -178
  334. package/test/io/io_test.js +0 -360
  335. package/test/io/zip_test.js +0 -128
  336. package/test/lib/by_test.js +0 -160
  337. package/test/lib/capabilities_test.js +0 -111
  338. package/test/lib/error_test.js +0 -305
  339. package/test/lib/events_test.js +0 -177
  340. package/test/lib/http_test.js +0 -696
  341. package/test/lib/logging_test.js +0 -272
  342. package/test/lib/promise_aplus_test.js +0 -78
  343. package/test/lib/promise_error_test.js +0 -884
  344. package/test/lib/promise_flow_test.js +0 -2288
  345. package/test/lib/promise_generator_test.js +0 -310
  346. package/test/lib/promise_test.js +0 -1109
  347. package/test/lib/testutil.js +0 -90
  348. package/test/lib/until_test.js +0 -478
  349. package/test/lib/webdriver_test.js +0 -2311
  350. package/test/logging_test.js +0 -167
  351. package/test/net/index_test.js +0 -60
  352. package/test/net/portprober_test.js +0 -128
  353. package/test/page_loading_test.js +0 -166
  354. package/test/phantomjs/execute_phantomjs_test.js +0 -59
  355. package/test/proxy_test.js +0 -180
  356. package/test/rect_test.js +0 -60
  357. package/test/remote_test.js +0 -117
  358. package/test/safari_test.js +0 -108
  359. package/test/session_test.js +0 -99
  360. package/test/stale_element_test.js +0 -63
  361. package/test/tag_name_test.js +0 -36
  362. package/test/testing/assert_test.js +0 -373
  363. package/test/testing/index_test.js +0 -224
  364. package/test/upload_test.js +0 -86
  365. package/test/window_test.js +0 -161
  366. 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
- });
@@ -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
- });