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,214 +0,0 @@
1
- // Licensed to the Software Freedom Conservancy (SFC) under one
2
- // or more contributor license agreements. See the NOTICE file
3
- // distributed with this work for additional information
4
- // regarding copyright ownership. The SFC licenses this file
5
- // to you under the Apache License, Version 2.0 (the
6
- // "License"); you may not use this file except in compliance
7
- // with the License. You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the License is distributed on an
13
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- // KIND, either express or implied. See the License for the
15
- // specific language governing permissions and limitations
16
- // under the License.
17
-
18
- 'use strict';
19
-
20
- var assert = require('assert'),
21
- url = require('url');
22
-
23
- var test = require('../lib/test'),
24
- fileserver = require('../lib/test/fileserver'),
25
- Browser = require('..').Browser,
26
- Pages = test.Pages;
27
-
28
-
29
- test.suite(function(env) {
30
- var driver;
31
-
32
- test.before(function*() {
33
- driver = yield env.builder().build();
34
- });
35
-
36
- test.after(function() {
37
- return driver.quit();
38
- });
39
-
40
- // Cookie handling is broken.
41
- test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.SAFARI)).
42
- describe('Cookie Management;', function() {
43
-
44
- test.beforeEach(function*() {
45
- yield driver.get(fileserver.Pages.ajaxyPage);
46
- yield driver.manage().deleteAllCookies();
47
- return assertHasCookies();
48
- });
49
-
50
- test.it('can add new cookies', function*() {
51
- var cookie = createCookieSpec();
52
-
53
- yield driver.manage().addCookie(cookie);
54
- yield driver.manage().getCookie(cookie.name).then(function(actual) {
55
- assert.equal(actual.value, cookie.value);
56
- });
57
- });
58
-
59
- test.it('can get all cookies', function*() {
60
- var cookie1 = createCookieSpec();
61
- var cookie2 = createCookieSpec();
62
-
63
- yield driver.manage().addCookie(cookie1);
64
- yield driver.manage().addCookie(cookie2);
65
-
66
- return assertHasCookies(cookie1, cookie2);
67
- });
68
-
69
- test.ignore(env.browsers(Browser.IE)).
70
- it('only returns cookies visible to the current page', function*() {
71
- var cookie1 = createCookieSpec();
72
-
73
- yield driver.manage().addCookie(cookie1);
74
-
75
- var pageUrl = fileserver.whereIs('page/1');
76
- var cookie2 = createCookieSpec({
77
- path: url.parse(pageUrl).pathname
78
- });
79
- yield driver.get(pageUrl);
80
- yield driver.manage().addCookie(cookie2);
81
- yield assertHasCookies(cookie1, cookie2);
82
-
83
- yield driver.get(fileserver.Pages.ajaxyPage);
84
- yield assertHasCookies(cookie1);
85
-
86
- yield driver.get(pageUrl);
87
- yield assertHasCookies(cookie1, cookie2);
88
- });
89
-
90
- test.it('can delete all cookies', function*() {
91
- var cookie1 = createCookieSpec();
92
- var cookie2 = createCookieSpec();
93
-
94
- yield driver.executeScript(
95
- 'document.cookie = arguments[0] + "=" + arguments[1];' +
96
- 'document.cookie = arguments[2] + "=" + arguments[3];',
97
- cookie1.name, cookie1.value, cookie2.name, cookie2.value);
98
- yield assertHasCookies(cookie1, cookie2);
99
-
100
- yield driver.manage().deleteAllCookies();
101
- yield assertHasCookies();
102
- });
103
-
104
- test.it('can delete cookies by name', function*() {
105
- var cookie1 = createCookieSpec();
106
- var cookie2 = createCookieSpec();
107
-
108
- yield driver.executeScript(
109
- 'document.cookie = arguments[0] + "=" + arguments[1];' +
110
- 'document.cookie = arguments[2] + "=" + arguments[3];',
111
- cookie1.name, cookie1.value, cookie2.name, cookie2.value);
112
- yield assertHasCookies(cookie1, cookie2);
113
-
114
- yield driver.manage().deleteCookie(cookie1.name);
115
- yield assertHasCookies(cookie2);
116
- });
117
-
118
- test.it('should only delete cookie with exact name', function*() {
119
- var cookie1 = createCookieSpec();
120
- var cookie2 = createCookieSpec();
121
- var cookie3 = {name: cookie1.name + 'xx', value: cookie1.value};
122
-
123
- yield driver.executeScript(
124
- 'document.cookie = arguments[0] + "=" + arguments[1];' +
125
- 'document.cookie = arguments[2] + "=" + arguments[3];' +
126
- 'document.cookie = arguments[4] + "=" + arguments[5];',
127
- cookie1.name, cookie1.value, cookie2.name, cookie2.value,
128
- cookie3.name, cookie3.value);
129
- yield assertHasCookies(cookie1, cookie2, cookie3);
130
-
131
- yield driver.manage().deleteCookie(cookie1.name);
132
- yield assertHasCookies(cookie2, cookie3);
133
- });
134
-
135
- test.it('can delete cookies set higher in the path', function*() {
136
- var cookie = createCookieSpec();
137
- var childUrl = fileserver.whereIs('child/childPage.html');
138
- var grandchildUrl = fileserver.whereIs(
139
- 'child/grandchild/grandchildPage.html');
140
-
141
- yield driver.get(childUrl);
142
- yield driver.manage().addCookie(cookie);
143
- yield assertHasCookies(cookie);
144
-
145
- yield driver.get(grandchildUrl);
146
- yield assertHasCookies(cookie);
147
-
148
- yield driver.manage().deleteCookie(cookie.name);
149
- yield assertHasCookies();
150
-
151
- yield driver.get(childUrl);
152
- yield assertHasCookies();
153
- });
154
-
155
- test.ignore(env.browsers(
156
- Browser.ANDROID,
157
- Browser.FIREFOX,
158
- 'legacy-' + Browser.FIREFOX,
159
- Browser.IE)).
160
- it('should retain cookie expiry', function*() {
161
- let expirationDelay = 5 * 1000;
162
- let expiry = new Date(Date.now() + expirationDelay);
163
- let cookie = createCookieSpec({expiry});
164
-
165
- yield driver.manage().addCookie(cookie);
166
- yield driver.manage().getCookie(cookie.name).then(function(actual) {
167
- assert.equal(actual.value, cookie.value);
168
- // expiry times are exchanged in seconds since January 1, 1970 UTC.
169
- assert.equal(actual.expiry, Math.floor(expiry.getTime() / 1000));
170
- });
171
-
172
- yield driver.sleep(expirationDelay);
173
- yield assertHasCookies();
174
- });
175
- });
176
-
177
- function createCookieSpec(opt_options) {
178
- let spec = {
179
- name: getRandomString(),
180
- value: getRandomString()
181
- };
182
- if (opt_options) {
183
- spec = Object.assign(spec, opt_options);
184
- }
185
- return spec;
186
- }
187
-
188
- function buildCookieMap(cookies) {
189
- var map = {};
190
- cookies.forEach(function(cookie) {
191
- map[cookie.name] = cookie;
192
- });
193
- return map;
194
- }
195
-
196
- function assertHasCookies(...expected) {
197
- return driver.manage().getCookies().then(function(cookies) {
198
- assert.equal(cookies.length, expected.length,
199
- 'Wrong # of cookies.' +
200
- '\n Expected: ' + JSON.stringify(expected) +
201
- '\n Was : ' + JSON.stringify(cookies));
202
-
203
- var map = buildCookieMap(cookies);
204
- for (var i = 0; i < expected.length; ++i) {
205
- assert.equal(expected[i].value, map[expected[i].name].value);
206
- }
207
- });
208
- }
209
-
210
- function getRandomString() {
211
- var x = 1234567890;
212
- return Math.floor(Math.random() * x).toString(36);
213
- }
214
- });
@@ -1,426 +0,0 @@
1
- // Licensed to the Software Freedom Conservancy (SFC) under one
2
- // or more contributor license agreements. See the NOTICE file
3
- // distributed with this work for additional information
4
- // regarding copyright ownership. The SFC licenses this file
5
- // to you under the Apache License, Version 2.0 (the
6
- // "License"); you may not use this file except in compliance
7
- // with the License. You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the License is distributed on an
13
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- // KIND, either express or implied. See the License for the
15
- // specific language governing permissions and limitations
16
- // under the License.
17
-
18
- 'use strict';
19
-
20
- var fail = require('assert').fail;
21
-
22
- var Browser = require('..').Browser,
23
- By = require('..').By,
24
- error = require('..').error,
25
- until = require('..').until,
26
- promise = require('../lib/promise'),
27
- test = require('../lib/test'),
28
- assert = require('../testing/assert'),
29
- Pages = test.Pages;
30
-
31
-
32
- test.suite(function(env) {
33
- var browsers = env.browsers;
34
-
35
- var driver;
36
-
37
- test.before(function*() {
38
- driver = yield env.builder().build();
39
- });
40
-
41
- after(function() {
42
- return driver.quit();
43
- });
44
-
45
- describe('finding elements', function() {
46
- test.it(
47
- 'should work after loading multiple pages in a row',
48
- function*() {
49
- yield driver.get(Pages.formPage);
50
- yield driver.get(Pages.xhtmlTestPage);
51
- yield driver.findElement(By.linkText('click me')).click();
52
- yield driver.wait(until.titleIs('We Arrive Here'), 5000);
53
- });
54
-
55
- describe('By.id()', function() {
56
- test.it('should work', function*() {
57
- yield driver.get(Pages.xhtmlTestPage);
58
- yield driver.findElement(By.id('linkId')).click();
59
- yield driver.wait(until.titleIs('We Arrive Here'), 5000);
60
- });
61
-
62
- test.it('should fail if ID not present on page', function*() {
63
- yield driver.get(Pages.formPage);
64
- return driver.findElement(By.id('nonExistantButton')).
65
- then(fail, function(e) {
66
- assert(e).instanceOf(error.NoSuchElementError);
67
- });
68
- });
69
-
70
- test.it(
71
- 'should find multiple elements by ID even though that is ' +
72
- 'malformed HTML',
73
- function*() {
74
- yield driver.get(Pages.nestedPage);
75
-
76
- let elements = yield driver.findElements(By.id('2'));
77
- assert(elements.length).equalTo(8);
78
- });
79
- });
80
-
81
- describe('By.linkText()', function() {
82
- test.it('should be able to click on link identified by text', function*() {
83
- yield driver.get(Pages.xhtmlTestPage);
84
- yield driver.findElement(By.linkText('click me')).click();
85
- yield driver.wait(until.titleIs('We Arrive Here'), 5000);
86
- });
87
-
88
- test.it(
89
- 'should be able to find elements by partial link text',
90
- function*() {
91
- yield driver.get(Pages.xhtmlTestPage);
92
- yield driver.findElement(By.partialLinkText('ick me')).click();
93
- yield driver.wait(until.titleIs('We Arrive Here'), 5000);
94
- });
95
-
96
- test.it('should work when link text contains equals sign', function*() {
97
- yield driver.get(Pages.xhtmlTestPage);
98
- let el = yield driver.findElement(By.linkText('Link=equalssign'));
99
-
100
- let id = yield el.getAttribute('id');
101
- assert(id).equalTo('linkWithEqualsSign');
102
- });
103
-
104
- test.it('matches by partial text when containing equals sign',
105
- function*() {
106
- yield driver.get(Pages.xhtmlTestPage);
107
- let link = yield driver.findElement(By.partialLinkText('Link='));
108
-
109
- let id = yield link.getAttribute('id');
110
- assert(id).equalTo('linkWithEqualsSign');
111
- });
112
-
113
- test.it('works when searching for multiple and text contains =',
114
- function*() {
115
- yield driver.get(Pages.xhtmlTestPage);
116
- let elements =
117
- yield driver.findElements(By.linkText('Link=equalssign'));
118
-
119
- assert(elements.length).equalTo(1);
120
-
121
- let id = yield elements[0].getAttribute('id');
122
- assert(id).equalTo('linkWithEqualsSign');
123
- });
124
-
125
- test.it(
126
- 'works when searching for multiple with partial text containing =',
127
- function*() {
128
- yield driver.get(Pages.xhtmlTestPage);
129
- let elements =
130
- yield driver.findElements(By.partialLinkText('Link='));
131
-
132
- assert(elements.length).equalTo(1);
133
-
134
- let id = yield elements[0].getAttribute('id');
135
- assert(id).equalTo('linkWithEqualsSign');
136
- });
137
-
138
- test.it('should be able to find multiple exact matches',
139
- function*() {
140
- yield driver.get(Pages.xhtmlTestPage);
141
- let elements = yield driver.findElements(By.linkText('click me'));
142
- assert(elements.length).equalTo(2);
143
- });
144
-
145
- test.it('should be able to find multiple partial matches',
146
- function*() {
147
- yield driver.get(Pages.xhtmlTestPage);
148
- let elements =
149
- yield driver.findElements(By.partialLinkText('ick me'));
150
- assert(elements.length).equalTo(2);
151
- });
152
-
153
- test.ignore(browsers(Browser.SAFARI)).
154
- it('works on XHTML pages', function*() {
155
- yield driver.get(test.whereIs('actualXhtmlPage.xhtml'));
156
-
157
- let el = yield driver.findElement(By.linkText('Foo'));
158
- return assert(el.getText()).equalTo('Foo');
159
- });
160
- });
161
-
162
- describe('By.name()', function() {
163
- test.it('should work', function*() {
164
- yield driver.get(Pages.formPage);
165
-
166
- let el = yield driver.findElement(By.name('checky'));
167
- yield assert(el.getAttribute('value')).equalTo('furrfu');
168
- });
169
-
170
- test.it('should find multiple elements with same name', function*() {
171
- yield driver.get(Pages.nestedPage);
172
-
173
- let elements = yield driver.findElements(By.name('checky'));
174
- assert(elements.length).greaterThan(1);
175
- });
176
-
177
- test.it(
178
- 'should be able to find elements that do not support name property',
179
- function*() {
180
- yield driver.get(Pages.nestedPage);
181
- yield driver.findElement(By.name('div1'));
182
- // Pass if this does not return an error.
183
- });
184
-
185
- test.it('shoudl be able to find hidden elements by name', function*() {
186
- yield driver.get(Pages.formPage);
187
- yield driver.findElement(By.name('hidden'));
188
- // Pass if this does not return an error.
189
- });
190
- });
191
-
192
- describe('By.className()', function() {
193
- test.it('should work', function*() {
194
- yield driver.get(Pages.xhtmlTestPage);
195
-
196
- let el = yield driver.findElement(By.className('extraDiv'));
197
- yield assert(el.getText()).startsWith('Another div starts here.');
198
- });
199
-
200
- test.it('should work when name is first name among many', function*() {
201
- yield driver.get(Pages.xhtmlTestPage);
202
-
203
- let el = yield driver.findElement(By.className('nameA'));
204
- yield assert(el.getText()).equalTo('An H2 title');
205
- });
206
-
207
- test.it('should work when name is last name among many', function*() {
208
- yield driver.get(Pages.xhtmlTestPage);
209
-
210
- let el = yield driver.findElement(By.className('nameC'));
211
- yield assert(el.getText()).equalTo('An H2 title');
212
- });
213
-
214
- test.it('should work when name is middle of many', function*() {
215
- yield driver.get(Pages.xhtmlTestPage);
216
-
217
- let el = yield driver.findElement(By.className('nameBnoise'));
218
- yield assert(el.getText()).equalTo('An H2 title');
219
- });
220
-
221
- test.it('should work when name surrounded by whitespace', function*() {
222
- yield driver.get(Pages.xhtmlTestPage);
223
-
224
- let el = yield driver.findElement(By.className('spaceAround'));
225
- yield assert(el.getText()).equalTo('Spaced out');
226
- });
227
-
228
- test.it('should fail if queried name only partially matches', function*() {
229
- yield driver.get(Pages.xhtmlTestPage);
230
- return driver.findElement(By.className('nameB')).
231
- then(fail, function(e) {
232
- assert(e).instanceOf(error.NoSuchElementError);
233
- });
234
- });
235
-
236
- test.it('should implicitly wait', function*() {
237
- var TIMEOUT_IN_MS = 1000;
238
- var EPSILON = TIMEOUT_IN_MS / 2;
239
-
240
- yield driver.manage().timeouts().implicitlyWait(TIMEOUT_IN_MS);
241
- yield driver.get(Pages.formPage);
242
-
243
- var start = new Date();
244
- return driver.findElement(By.id('nonExistantButton')).
245
- then(fail, function(e) {
246
- var end = new Date();
247
- assert(e).instanceOf(error.NoSuchElementError);
248
- assert(end - start).closeTo(TIMEOUT_IN_MS, EPSILON);
249
- });
250
- });
251
-
252
- test.it('should be able to find multiple matches', function*() {
253
- yield driver.get(Pages.xhtmlTestPage);
254
-
255
- let elements = yield driver.findElements(By.className('nameC'));
256
- assert(elements.length).greaterThan(1);
257
- });
258
-
259
- test.it('permits compound class names', function() {
260
- return driver.get(Pages.xhtmlTestPage)
261
- .then(() => driver.findElement(By.className('nameA nameC')))
262
- .then(el => el.getText())
263
- .then(text => assert(text).equalTo('An H2 title'));
264
- });
265
- });
266
-
267
- describe('By.xpath()', function() {
268
- test.it('should work with multiple matches', function*() {
269
- yield driver.get(Pages.xhtmlTestPage);
270
- let elements = yield driver.findElements(By.xpath('//div'));
271
- assert(elements.length).greaterThan(1);
272
- });
273
-
274
- test.it('should work for selectors using contains keyword', function*() {
275
- yield driver.get(Pages.nestedPage);
276
- yield driver.findElement(By.xpath('//a[contains(., "hello world")]'));
277
- // Pass if no error.
278
- });
279
- });
280
-
281
- describe('By.tagName()', function() {
282
- test.it('works', function*() {
283
- yield driver.get(Pages.formPage);
284
-
285
- let el = yield driver.findElement(By.tagName('input'));
286
- yield assert(el.getTagName()).equalTo('input');
287
- });
288
-
289
- test.it('can find multiple elements', function*() {
290
- yield driver.get(Pages.formPage);
291
-
292
- let elements = yield driver.findElements(By.tagName('input'));
293
- assert(elements.length).greaterThan(1);
294
- });
295
- });
296
-
297
- describe('By.css()', function() {
298
- test.it('works', function*() {
299
- yield driver.get(Pages.xhtmlTestPage);
300
- yield driver.findElement(By.css('div.content'));
301
- // Pass if no error.
302
- });
303
-
304
- test.it('can find multiple elements', function*() {
305
- yield driver.get(Pages.xhtmlTestPage);
306
-
307
- let elements = yield driver.findElements(By.css('p'));
308
- assert(elements.length).greaterThan(1);
309
- // Pass if no error.
310
- });
311
-
312
- test.it(
313
- 'should find first matching element when searching by ' +
314
- 'compound CSS selector',
315
- function*() {
316
- yield driver.get(Pages.xhtmlTestPage);
317
-
318
- let el =
319
- yield driver.findElement(By.css('div.extraDiv, div.content'));
320
- yield assert(el.getAttribute('class')).equalTo('content');
321
- });
322
-
323
- test.it('should be able to find multiple elements by compound selector',
324
- function*() {
325
- yield driver.get(Pages.xhtmlTestPage);
326
- let elements =
327
- yield driver.findElements(By.css('div.extraDiv, div.content'));
328
-
329
- return Promise.all([
330
- assertClassIs(elements[0], 'content'),
331
- assertClassIs(elements[1], 'extraDiv')
332
- ]);
333
-
334
- function assertClassIs(el, expected) {
335
- return assert(el.getAttribute('class')).equalTo(expected);
336
- }
337
- });
338
-
339
- // IE only supports short version option[selected].
340
- test.ignore(browsers(Browser.IE)).
341
- it('should be able to find element by boolean attribute', function*() {
342
- yield driver.get(test.whereIs(
343
- 'locators_tests/boolean_attribute_selected.html'));
344
-
345
- let el = yield driver.findElement(By.css('option[selected="selected"]'));
346
- yield assert(el.getAttribute('value')).equalTo('two');
347
- });
348
-
349
- test.it(
350
- 'should be able to find element with short ' +
351
- 'boolean attribute selector',
352
- function*() {
353
- yield driver.get(test.whereIs(
354
- 'locators_tests/boolean_attribute_selected.html'));
355
-
356
- let el = yield driver.findElement(By.css('option[selected]'));
357
- yield assert(el.getAttribute('value')).equalTo('two');
358
- });
359
-
360
- test.it(
361
- 'should be able to find element with short boolean attribute ' +
362
- 'selector on HTML4 page',
363
- function*() {
364
- yield driver.get(test.whereIs(
365
- 'locators_tests/boolean_attribute_selected_html4.html'));
366
-
367
- let el = yield driver.findElement(By.css('option[selected]'));
368
- yield assert(el.getAttribute('value')).equalTo('two');
369
- });
370
- });
371
-
372
- describe('by custom locator', function() {
373
- test.it('handles single element result', function*() {
374
- yield driver.get(Pages.javascriptPage);
375
-
376
- let link = yield driver.findElement(function(driver) {
377
- let links = driver.findElements(By.tagName('a'));
378
- return promise.filter(links, function(link) {
379
- return link.getAttribute('id').then(id => id === 'updatediv');
380
- }).then(links => links[0]);
381
- });
382
-
383
- yield assert(link.getText()).matches(/Update\s+a\s+div/);
384
- });
385
-
386
- test.it('uses first element if locator resolves to list', function*() {
387
- yield driver.get(Pages.javascriptPage);
388
-
389
- let link = yield driver.findElement(function() {
390
- return driver.findElements(By.tagName('a'));
391
- });
392
-
393
- yield assert(link.getText()).isEqualTo('Change the page title!');
394
- });
395
-
396
- test.it('fails if locator returns non-webelement value', function*() {
397
- yield driver.get(Pages.javascriptPage);
398
-
399
- let link = driver.findElement(function() {
400
- return driver.getTitle();
401
- });
402
-
403
- return link.then(
404
- () => fail('Should have failed'),
405
- (e) => assert(e).instanceOf(TypeError));
406
- });
407
- });
408
-
409
- describe('switchTo().activeElement()', function() {
410
- // SAFARI's new session response does not identify it as a W3C browser,
411
- // so the command is sent in the unsupported wire protocol format.
412
- test.ignore(browsers(Browser.SAFARI)).
413
- it('returns document.activeElement', function*() {
414
- yield driver.get(Pages.formPage);
415
-
416
- let email = yield driver.findElement(By.css('#email'));
417
- yield driver.executeScript('arguments[0].focus()', email);
418
-
419
- let ae = yield driver.switchTo().activeElement();
420
- let equal = yield driver.executeScript(
421
- 'return arguments[0] === arguments[1]', email, ae);
422
- assert(equal).isTrue();
423
- });
424
- });
425
- });
426
- });