capybara 2.7.0 → 3.35.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (318) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +1 -0
  3. data/History.md +1147 -11
  4. data/License.txt +1 -1
  5. data/README.md +252 -131
  6. data/lib/capybara/config.rb +92 -0
  7. data/lib/capybara/cucumber.rb +3 -3
  8. data/lib/capybara/driver/base.rb +52 -21
  9. data/lib/capybara/driver/node.rb +48 -14
  10. data/lib/capybara/dsl.rb +16 -9
  11. data/lib/capybara/helpers.rb +72 -81
  12. data/lib/capybara/minitest/spec.rb +267 -0
  13. data/lib/capybara/minitest.rb +385 -0
  14. data/lib/capybara/node/actions.rb +337 -89
  15. data/lib/capybara/node/base.rb +50 -32
  16. data/lib/capybara/node/document.rb +19 -3
  17. data/lib/capybara/node/document_matchers.rb +22 -24
  18. data/lib/capybara/node/element.rb +388 -125
  19. data/lib/capybara/node/finders.rb +231 -121
  20. data/lib/capybara/node/matchers.rb +503 -217
  21. data/lib/capybara/node/simple.rb +64 -27
  22. data/lib/capybara/queries/ancestor_query.rb +27 -0
  23. data/lib/capybara/queries/base_query.rb +87 -11
  24. data/lib/capybara/queries/current_path_query.rb +24 -24
  25. data/lib/capybara/queries/match_query.rb +15 -10
  26. data/lib/capybara/queries/selector_query.rb +675 -81
  27. data/lib/capybara/queries/sibling_query.rb +26 -0
  28. data/lib/capybara/queries/style_query.rb +45 -0
  29. data/lib/capybara/queries/text_query.rb +88 -20
  30. data/lib/capybara/queries/title_query.rb +9 -11
  31. data/lib/capybara/rack_test/browser.rb +63 -39
  32. data/lib/capybara/rack_test/css_handlers.rb +6 -4
  33. data/lib/capybara/rack_test/driver.rb +26 -16
  34. data/lib/capybara/rack_test/errors.rb +6 -0
  35. data/lib/capybara/rack_test/form.rb +73 -58
  36. data/lib/capybara/rack_test/node.rb +187 -67
  37. data/lib/capybara/rails.rb +4 -8
  38. data/lib/capybara/registration_container.rb +44 -0
  39. data/lib/capybara/registrations/drivers.rb +42 -0
  40. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  41. data/lib/capybara/registrations/servers.rb +45 -0
  42. data/lib/capybara/result.rb +142 -14
  43. data/lib/capybara/rspec/features.rb +17 -42
  44. data/lib/capybara/rspec/matcher_proxies.rb +82 -0
  45. data/lib/capybara/rspec/matchers/base.rb +111 -0
  46. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  47. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  48. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  49. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  50. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  51. data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
  52. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  53. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  54. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  55. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  56. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  57. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  58. data/lib/capybara/rspec/matchers.rb +143 -244
  59. data/lib/capybara/rspec.rb +10 -12
  60. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  61. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  62. data/lib/capybara/selector/css.rb +102 -0
  63. data/lib/capybara/selector/definition/button.rb +63 -0
  64. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  65. data/lib/capybara/selector/definition/css.rb +10 -0
  66. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  67. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  68. data/lib/capybara/selector/definition/element.rb +28 -0
  69. data/lib/capybara/selector/definition/field.rb +40 -0
  70. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  71. data/lib/capybara/selector/definition/file_field.rb +13 -0
  72. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  73. data/lib/capybara/selector/definition/frame.rb +17 -0
  74. data/lib/capybara/selector/definition/id.rb +6 -0
  75. data/lib/capybara/selector/definition/label.rb +62 -0
  76. data/lib/capybara/selector/definition/link.rb +54 -0
  77. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  78. data/lib/capybara/selector/definition/option.rb +27 -0
  79. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  80. data/lib/capybara/selector/definition/select.rb +81 -0
  81. data/lib/capybara/selector/definition/table.rb +109 -0
  82. data/lib/capybara/selector/definition/table_row.rb +21 -0
  83. data/lib/capybara/selector/definition/xpath.rb +5 -0
  84. data/lib/capybara/selector/definition.rb +278 -0
  85. data/lib/capybara/selector/filter.rb +3 -46
  86. data/lib/capybara/selector/filter_set.rb +124 -0
  87. data/lib/capybara/selector/filters/base.rb +77 -0
  88. data/lib/capybara/selector/filters/expression_filter.rb +22 -0
  89. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  90. data/lib/capybara/selector/filters/node_filter.rb +31 -0
  91. data/lib/capybara/selector/regexp_disassembler.rb +214 -0
  92. data/lib/capybara/selector/selector.rb +155 -0
  93. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  94. data/lib/capybara/selector.rb +232 -369
  95. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  96. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  97. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  98. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  99. data/lib/capybara/selenium/driver.rb +380 -142
  100. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  101. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
  102. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
  103. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  104. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  105. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  106. data/lib/capybara/selenium/extensions/find.rb +110 -0
  107. data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
  108. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  109. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  110. data/lib/capybara/selenium/logger_suppressor.rb +40 -0
  111. data/lib/capybara/selenium/node.rb +528 -97
  112. data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
  113. data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
  114. data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  115. data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  116. data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  117. data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
  118. data/lib/capybara/selenium/patches/atoms.rb +18 -0
  119. data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  120. data/lib/capybara/selenium/patches/logs.rb +45 -0
  121. data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  122. data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  123. data/lib/capybara/server/animation_disabler.rb +63 -0
  124. data/lib/capybara/server/checker.rb +44 -0
  125. data/lib/capybara/server/middleware.rb +71 -0
  126. data/lib/capybara/server.rb +74 -71
  127. data/lib/capybara/session/config.rb +126 -0
  128. data/lib/capybara/session/matchers.rb +44 -27
  129. data/lib/capybara/session.rb +500 -297
  130. data/lib/capybara/spec/fixtures/no_extension +1 -0
  131. data/lib/capybara/spec/public/jquery.js +5 -5
  132. data/lib/capybara/spec/public/offset.js +6 -0
  133. data/lib/capybara/spec/public/test.js +168 -14
  134. data/lib/capybara/spec/session/accept_alert_spec.rb +37 -14
  135. data/lib/capybara/spec/session/accept_confirm_spec.rb +7 -6
  136. data/lib/capybara/spec/session/accept_prompt_spec.rb +38 -10
  137. data/lib/capybara/spec/session/all_spec.rb +179 -59
  138. data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
  140. data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
  141. data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  142. data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  143. data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
  144. data/lib/capybara/spec/session/assert_title_spec.rb +93 -0
  145. data/lib/capybara/spec/session/attach_file_spec.rb +154 -48
  146. data/lib/capybara/spec/session/body_spec.rb +12 -13
  147. data/lib/capybara/spec/session/check_spec.rb +168 -41
  148. data/lib/capybara/spec/session/choose_spec.rb +75 -23
  149. data/lib/capybara/spec/session/click_button_spec.rb +243 -175
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +57 -32
  151. data/lib/capybara/spec/session/click_link_spec.rb +100 -53
  152. data/lib/capybara/spec/session/current_scope_spec.rb +11 -10
  153. data/lib/capybara/spec/session/current_url_spec.rb +61 -35
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +7 -7
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +5 -4
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +13 -6
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +21 -7
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +91 -34
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +45 -3
  162. data/lib/capybara/spec/session/execute_script_spec.rb +24 -4
  163. data/lib/capybara/spec/session/fill_in_spec.rb +166 -64
  164. data/lib/capybara/spec/session/find_button_spec.rb +37 -18
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
  166. data/lib/capybara/spec/session/find_field_spec.rb +57 -34
  167. data/lib/capybara/spec/session/find_link_spec.rb +47 -10
  168. data/lib/capybara/spec/session/find_spec.rb +290 -144
  169. data/lib/capybara/spec/session/first_spec.rb +91 -48
  170. data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
  171. data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
  172. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
  174. data/lib/capybara/spec/session/go_back_spec.rb +3 -2
  175. data/lib/capybara/spec/session/go_forward_spec.rb +3 -2
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +76 -19
  180. data/lib/capybara/spec/session/has_css_spec.rb +277 -131
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +98 -26
  182. data/lib/capybara/spec/session/has_field_spec.rb +177 -107
  183. data/lib/capybara/spec/session/has_link_spec.rb +13 -12
  184. data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
  185. data/lib/capybara/spec/session/has_select_spec.rb +191 -95
  186. data/lib/capybara/spec/session/has_selector_spec.rb +128 -64
  187. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  188. data/lib/capybara/spec/session/has_table_spec.rb +172 -5
  189. data/lib/capybara/spec/session/has_text_spec.rb +126 -60
  190. data/lib/capybara/spec/session/has_title_spec.rb +35 -12
  191. data/lib/capybara/spec/session/has_xpath_spec.rb +74 -53
  192. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
  193. data/lib/capybara/spec/session/html_spec.rb +14 -6
  194. data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
  195. data/lib/capybara/spec/session/node_spec.rb +1028 -131
  196. data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  197. data/lib/capybara/spec/session/refresh_spec.rb +34 -0
  198. data/lib/capybara/spec/session/reset_session_spec.rb +75 -34
  199. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
  200. data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
  201. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +11 -15
  202. data/lib/capybara/spec/session/save_page_spec.rb +42 -55
  203. data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
  204. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  205. data/lib/capybara/spec/session/scroll_spec.rb +117 -0
  206. data/lib/capybara/spec/session/select_spec.rb +112 -85
  207. data/lib/capybara/spec/session/selectors_spec.rb +71 -8
  208. data/lib/capybara/spec/session/sibling_spec.rb +52 -0
  209. data/lib/capybara/spec/session/text_spec.rb +38 -23
  210. data/lib/capybara/spec/session/title_spec.rb +17 -5
  211. data/lib/capybara/spec/session/uncheck_spec.rb +71 -12
  212. data/lib/capybara/spec/session/unselect_spec.rb +44 -43
  213. data/lib/capybara/spec/session/visit_spec.rb +99 -32
  214. data/lib/capybara/spec/session/window/become_closed_spec.rb +33 -29
  215. data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
  216. data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
  217. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +39 -30
  218. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +17 -10
  219. data/lib/capybara/spec/session/window/window_spec.rb +121 -73
  220. data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
  221. data/lib/capybara/spec/session/window/within_window_spec.rb +52 -82
  222. data/lib/capybara/spec/session/within_spec.rb +76 -43
  223. data/lib/capybara/spec/spec_helper.rb +67 -33
  224. data/lib/capybara/spec/test_app.rb +85 -36
  225. data/lib/capybara/spec/views/animated.erb +49 -0
  226. data/lib/capybara/spec/views/buttons.erb +1 -1
  227. data/lib/capybara/spec/views/fieldsets.erb +1 -1
  228. data/lib/capybara/spec/views/form.erb +227 -20
  229. data/lib/capybara/spec/views/frame_child.erb +10 -2
  230. data/lib/capybara/spec/views/frame_one.erb +2 -1
  231. data/lib/capybara/spec/views/frame_parent.erb +2 -2
  232. data/lib/capybara/spec/views/frame_two.erb +1 -1
  233. data/lib/capybara/spec/views/header_links.erb +1 -1
  234. data/lib/capybara/spec/views/host_links.erb +1 -1
  235. data/lib/capybara/spec/views/initial_alert.erb +10 -0
  236. data/lib/capybara/spec/views/obscured.erb +47 -0
  237. data/lib/capybara/spec/views/offset.erb +32 -0
  238. data/lib/capybara/spec/views/path.erb +1 -1
  239. data/lib/capybara/spec/views/popup_one.erb +1 -1
  240. data/lib/capybara/spec/views/popup_two.erb +1 -1
  241. data/lib/capybara/spec/views/postback.erb +1 -1
  242. data/lib/capybara/spec/views/react.erb +45 -0
  243. data/lib/capybara/spec/views/scroll.erb +20 -0
  244. data/lib/capybara/spec/views/spatial.erb +31 -0
  245. data/lib/capybara/spec/views/tables.erb +69 -2
  246. data/lib/capybara/spec/views/with_animation.erb +82 -0
  247. data/lib/capybara/spec/views/with_base_tag.erb +1 -1
  248. data/lib/capybara/spec/views/with_count.erb +1 -1
  249. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  250. data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
  251. data/lib/capybara/spec/views/with_hover.erb +7 -1
  252. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  253. data/lib/capybara/spec/views/with_html.erb +100 -10
  254. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  255. data/lib/capybara/spec/views/with_html_entities.erb +1 -1
  256. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  257. data/lib/capybara/spec/views/with_js.erb +49 -3
  258. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  259. data/lib/capybara/spec/views/with_namespace.erb +20 -0
  260. data/lib/capybara/spec/views/with_scope.erb +1 -1
  261. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  262. data/lib/capybara/spec/views/with_simple_html.erb +1 -1
  263. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  264. data/lib/capybara/spec/views/with_title.erb +1 -1
  265. data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
  266. data/lib/capybara/spec/views/with_windows.erb +7 -1
  267. data/lib/capybara/spec/views/within_frames.erb +6 -3
  268. data/lib/capybara/version.rb +2 -1
  269. data/lib/capybara/window.rb +39 -21
  270. data/lib/capybara.rb +208 -186
  271. data/spec/basic_node_spec.rb +52 -39
  272. data/spec/capybara_spec.rb +72 -50
  273. data/spec/css_builder_spec.rb +101 -0
  274. data/spec/css_splitter_spec.rb +38 -0
  275. data/spec/dsl_spec.rb +81 -61
  276. data/spec/filter_set_spec.rb +46 -0
  277. data/spec/fixtures/capybara.csv +1 -0
  278. data/spec/fixtures/certificate.pem +25 -0
  279. data/spec/fixtures/key.pem +27 -0
  280. data/spec/fixtures/selenium_driver_rspec_failure.rb +7 -3
  281. data/spec/fixtures/selenium_driver_rspec_success.rb +7 -3
  282. data/spec/minitest_spec.rb +164 -0
  283. data/spec/minitest_spec_spec.rb +162 -0
  284. data/spec/per_session_config_spec.rb +68 -0
  285. data/spec/rack_test_spec.rb +189 -96
  286. data/spec/regexp_dissassembler_spec.rb +250 -0
  287. data/spec/result_spec.rb +143 -13
  288. data/spec/rspec/features_spec.rb +38 -32
  289. data/spec/rspec/scenarios_spec.rb +9 -7
  290. data/spec/rspec/shared_spec_matchers.rb +959 -0
  291. data/spec/rspec/views_spec.rb +9 -3
  292. data/spec/rspec_matchers_spec.rb +62 -0
  293. data/spec/rspec_spec.rb +127 -30
  294. data/spec/sauce_spec_chrome.rb +43 -0
  295. data/spec/selector_spec.rb +458 -37
  296. data/spec/selenium_spec_chrome.rb +196 -9
  297. data/spec/selenium_spec_chrome_remote.rb +100 -0
  298. data/spec/selenium_spec_edge.rb +47 -0
  299. data/spec/selenium_spec_firefox.rb +210 -0
  300. data/spec/selenium_spec_firefox_remote.rb +80 -0
  301. data/spec/selenium_spec_ie.rb +150 -0
  302. data/spec/selenium_spec_safari.rb +148 -0
  303. data/spec/server_spec.rb +200 -101
  304. data/spec/session_spec.rb +91 -0
  305. data/spec/shared_selenium_node.rb +83 -0
  306. data/spec/shared_selenium_session.rb +558 -0
  307. data/spec/spec_helper.rb +94 -2
  308. data/spec/xpath_builder_spec.rb +93 -0
  309. metadata +420 -60
  310. data/lib/capybara/query.rb +0 -7
  311. data/lib/capybara/spec/session/assert_current_path.rb +0 -60
  312. data/lib/capybara/spec/session/assert_selector.rb +0 -148
  313. data/lib/capybara/spec/session/assert_text.rb +0 -196
  314. data/lib/capybara/spec/session/assert_title.rb +0 -70
  315. data/lib/capybara/spec/session/source_spec.rb +0 -0
  316. data/lib/capybara/spec/session/within_frame_spec.rb +0 -53
  317. data/spec/rspec/matchers_spec.rb +0 -827
  318. data/spec/selenium_spec.rb +0 -151
@@ -1,21 +1,22 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Capybara::SpecHelper.spec '#has_link?' do
3
4
  before do
4
5
  @session.visit('/with_html')
5
6
  end
6
7
 
7
- it "should be true if the given link is on the page" do
8
+ it 'should be true if the given link is on the page' do
8
9
  expect(@session).to have_link('foo')
9
10
  expect(@session).to have_link('awesome title')
10
- expect(@session).to have_link('A link', :href => '/with_simple_html')
11
- expect(@session).to have_link(:'A link', :href => :'/with_simple_html')
12
- expect(@session).to have_link('A link', :href => /\/with_simple_html/)
11
+ expect(@session).to have_link('A link', href: '/with_simple_html')
12
+ expect(@session).to have_link(:'A link', href: :'/with_simple_html')
13
+ expect(@session).to have_link('A link', href: %r{/with_simple_html})
13
14
  end
14
15
 
15
- it "should be false if the given link is not on the page" do
16
+ it 'should be false if the given link is not on the page' do
16
17
  expect(@session).not_to have_link('monkey')
17
- expect(@session).not_to have_link('A link', :href => '/non-existant-href')
18
- expect(@session).not_to have_link('A link', :href => /non-existant/)
18
+ expect(@session).not_to have_link('A link', href: '/nonexistent-href')
19
+ expect(@session).not_to have_link('A link', href: /nonexistent/)
19
20
  end
20
21
  end
21
22
 
@@ -24,15 +25,15 @@ Capybara::SpecHelper.spec '#has_no_link?' do
24
25
  @session.visit('/with_html')
25
26
  end
26
27
 
27
- it "should be false if the given link is on the page" do
28
+ it 'should be false if the given link is on the page' do
28
29
  expect(@session).not_to have_no_link('foo')
29
30
  expect(@session).not_to have_no_link('awesome title')
30
- expect(@session).not_to have_no_link('A link', :href => '/with_simple_html')
31
+ expect(@session).not_to have_no_link('A link', href: '/with_simple_html')
31
32
  end
32
33
 
33
- it "should be true if the given link is not on the page" do
34
+ it 'should be true if the given link is not on the page' do
34
35
  expect(@session).to have_no_link('monkey')
35
- expect(@session).to have_no_link('A link', :href => '/non-existant-href')
36
- expect(@session).to have_no_link('A link', :href => /\/non-existant-href/)
36
+ expect(@session).to have_no_link('A link', href: '/nonexistent-href')
37
+ expect(@session).to have_no_link('A link', href: %r{/nonexistent-href})
37
38
  end
38
39
  end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#have_none_of_selectors' do
4
+ before do
5
+ @session.visit('/with_html')
6
+ end
7
+
8
+ it 'should be false if any of the given locators are on the page' do
9
+ expect do
10
+ expect(@session).to have_none_of_selectors(:xpath, '//p', '//a')
11
+ end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
12
+ expect do
13
+ expect(@session).to have_none_of_selectors(:css, 'p a#foo')
14
+ end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
15
+ end
16
+
17
+ it 'should be true if none of the given locators are on the page' do
18
+ expect(@session).to have_none_of_selectors(:xpath, '//abbr', '//td')
19
+ expect(@session).to have_none_of_selectors(:css, 'p a#doesnotexist', 'abbr')
20
+ end
21
+
22
+ it 'should use default selector' do
23
+ Capybara.default_selector = :css
24
+ expect(@session).to have_none_of_selectors('p a#doesnotexist', 'abbr')
25
+ expect do
26
+ expect(@session).to have_none_of_selectors('abbr', 'p a#foo')
27
+ end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
28
+ end
29
+
30
+ context 'should respect scopes' do
31
+ it 'when used with `within`' do
32
+ @session.within "//p[@id='first']" do
33
+ expect do
34
+ expect(@session).to have_none_of_selectors(".//a[@id='foo']")
35
+ end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
36
+ expect(@session).to have_none_of_selectors(".//a[@id='red']")
37
+ end
38
+ end
39
+
40
+ it 'when called on an element' do
41
+ el = @session.find "//p[@id='first']"
42
+ expect do
43
+ expect(el).to have_none_of_selectors(".//a[@id='foo']")
44
+ end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
45
+ expect(el).to have_none_of_selectors(".//a[@id='red']")
46
+ end
47
+ end
48
+
49
+ context 'with options' do
50
+ it 'should apply the options to all locators' do
51
+ expect do
52
+ expect(@session).to have_none_of_selectors('//p//a', text: 'Redirect')
53
+ end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
54
+ expect(@session).to have_none_of_selectors('//p', text: 'Doesnotexist')
55
+ end
56
+
57
+ it 'should discard all matches where the given regexp is matched' do
58
+ expect do
59
+ expect(@session).to have_none_of_selectors('//p//a', text: /re[dab]i/i, count: 1)
60
+ end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
61
+ expect(@session).to have_none_of_selectors('//p//a', text: /Red$/)
62
+ end
63
+ end
64
+
65
+ context 'with wait', requires: [:js] do
66
+ it 'should not find elements if they appear after given wait duration' do
67
+ @session.visit('/with_js')
68
+ @session.click_link('Click me')
69
+ expect(@session).to have_none_of_selectors(:css, '#new_field', 'a#has-been-clicked', wait: 0.1)
70
+ end
71
+ end
72
+
73
+ it 'cannot be negated' do
74
+ expect do
75
+ expect(@session).not_to have_none_of_selectors(:css, 'p a#foo', 'h2#h2one', 'h2#h2two')
76
+ end.to raise_error ArgumentError
77
+ end
78
+ end
@@ -1,214 +1,310 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Capybara::SpecHelper.spec '#has_select?' do
3
4
  before { @session.visit('/form') }
4
5
 
5
- it "should be true if the field is on the page" do
6
+ it 'should be true if the field is on the page' do
6
7
  expect(@session).to have_select('Locale')
7
8
  expect(@session).to have_select('form_region')
8
9
  expect(@session).to have_select('Languages')
9
- expect(@session).to have_select(:'Languages')
10
+ expect(@session).to have_select(:Languages)
10
11
  end
11
12
 
12
- it "should be false if the field is not on the page" do
13
+ it 'should be false if the field is not on the page' do
13
14
  expect(@session).not_to have_select('Monkey')
14
15
  end
15
16
 
16
17
  context 'with selected value' do
17
- it "should be true if a field with the given value is on the page" do
18
- expect(@session).to have_select('form_locale', :selected => 'English')
19
- expect(@session).to have_select('Region', :selected => 'Norway')
20
- expect(@session).to have_select('Underwear', :selected => [
18
+ it 'should be true if a field with the given value is on the page' do
19
+ expect(@session).to have_select('form_locale', selected: 'English')
20
+ expect(@session).to have_select('Region', selected: 'Norway')
21
+ expect(@session).to have_select('Underwear', selected: [
21
22
  'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
22
23
  ])
23
24
  end
24
25
 
25
- it "should be false if the given field is not on the page" do
26
- expect(@session).not_to have_select('Locale', :selected => 'Swedish')
27
- expect(@session).not_to have_select('Does not exist', :selected => 'John')
28
- expect(@session).not_to have_select('City', :selected => 'Not there')
29
- expect(@session).not_to have_select('Underwear', :selected => [
30
- 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns', 'Nonexistant'
26
+ it 'should be false if the given field is not on the page' do
27
+ expect(@session).not_to have_select('Locale', selected: 'Swedish')
28
+ expect(@session).not_to have_select('Does not exist', selected: 'John')
29
+ expect(@session).not_to have_select('City', selected: 'Not there')
30
+ expect(@session).not_to have_select('Underwear', selected: [
31
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns', 'Nonexistent'
31
32
  ])
32
- expect(@session).not_to have_select('Underwear', :selected => [
33
+ expect(@session).not_to have_select('Underwear', selected: [
33
34
  'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
34
35
  ])
35
- expect(@session).not_to have_select('Underwear', :selected => [
36
- 'Boxerbriefs', 'Briefs','Commando', "Frenchman's Pantalons"
36
+ expect(@session).not_to have_select('Underwear', selected: [
37
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons"
37
38
  ])
38
39
  end
39
40
 
40
- it "should be true after the given value is selected" do
41
- @session.select('Swedish', :from => 'Locale')
42
- expect(@session).to have_select('Locale', :selected => 'Swedish')
41
+ it 'should be true after the given value is selected' do
42
+ @session.select('Swedish', from: 'Locale')
43
+ expect(@session).to have_select('Locale', selected: 'Swedish')
43
44
  end
44
45
 
45
- it "should be false after a different value is selected" do
46
- @session.select('Swedish', :from => 'Locale')
47
- expect(@session).not_to have_select('Locale', :selected => 'English')
46
+ it 'should be false after a different value is selected' do
47
+ @session.select('Swedish', from: 'Locale')
48
+ expect(@session).not_to have_select('Locale', selected: 'English')
48
49
  end
49
50
 
50
- it "should be true after the given values are selected" do
51
- @session.select('Boxers', :from => 'Underwear')
52
- expect(@session).to have_select('Underwear', :selected => [
51
+ it 'should be true after the given values are selected' do
52
+ @session.select('Boxers', from: 'Underwear')
53
+ expect(@session).to have_select('Underwear', selected: [
53
54
  'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
54
55
  ])
55
56
  end
56
57
 
57
- it "should be false after one of the values is unselected" do
58
- @session.unselect('Briefs', :from => 'Underwear')
59
- expect(@session).not_to have_select('Underwear', :selected => [
58
+ it 'should be false after one of the values is unselected' do
59
+ @session.unselect('Briefs', from: 'Underwear')
60
+ expect(@session).not_to have_select('Underwear', selected: [
60
61
  'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
61
62
  ])
62
63
  end
63
64
 
64
65
  it "should be true even when the selected option invisible, regardless of the select's visibility" do
65
- expect(@session).to have_select('Icecream', :visible => false, :selected => 'Chocolate')
66
- expect(@session).to have_select('Sorbet', :selected => 'Vanilla')
66
+ expect(@session).to have_select('Icecream', visible: :hidden, selected: 'Chocolate')
67
+ expect(@session).to have_select('Sorbet', selected: 'Vanilla')
68
+ end
69
+ end
70
+
71
+ context 'with partial select' do
72
+ it 'should be true if a field with the given partial values is on the page' do
73
+ expect(@session).to have_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
74
+ end
75
+
76
+ it 'should be false if a field with the given partial values is not on the page' do
77
+ expect(@session).not_to have_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
78
+ end
79
+
80
+ it 'should be true after the given partial value is selected' do
81
+ @session.select('Boxers', from: 'Underwear')
82
+ expect(@session).to have_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
83
+ end
84
+
85
+ it 'should be false after one of the given partial values is unselected' do
86
+ @session.unselect('Briefs', from: 'Underwear')
87
+ expect(@session).not_to have_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
88
+ end
89
+
90
+ it "should be true even when the selected values are invisible, regardless of the select's visibility" do
91
+ expect(@session).to have_select('Dessert', visible: :hidden, with_options: %w[Pudding Tiramisu])
92
+ expect(@session).to have_select('Cake', with_selected: ['Chocolate Cake', 'Sponge Cake'])
93
+ end
94
+
95
+ it 'should support non array partial values' do
96
+ expect(@session).to have_select('Underwear', with_selected: 'Briefs')
97
+ expect(@session).not_to have_select('Underwear', with_selected: 'Boxers')
67
98
  end
68
99
  end
69
100
 
70
101
  context 'with exact options' do
71
- it "should be true if a field with the given options is on the page" do
72
- expect(@session).to have_select('Region', :options => ['Norway', 'Sweden', 'Finland'])
73
- expect(@session).to have_select('Tendency', :options => [])
102
+ it 'should be true if a field with the given options is on the page' do
103
+ expect(@session).to have_select('Region', options: %w[Norway Sweden Finland])
104
+ expect(@session).to have_select('Tendency', options: [])
105
+ end
106
+
107
+ it 'should be false if the given field is not on the page' do
108
+ expect(@session).not_to have_select('Locale', options: ['Swedish'])
109
+ expect(@session).not_to have_select('Does not exist', options: ['John'])
110
+ expect(@session).not_to have_select('City', options: ['London', 'Made up city'])
111
+ expect(@session).not_to have_select('Region', options: %w[Norway Sweden])
112
+ expect(@session).not_to have_select('Region', options: %w[Norway Norway Norway])
74
113
  end
75
114
 
76
- it "should be false if the given field is not on the page" do
77
- expect(@session).not_to have_select('Locale', :options => ['Swedish'])
78
- expect(@session).not_to have_select('Does not exist', :options => ['John'])
79
- expect(@session).not_to have_select('City', :options => ['London', 'Made up city'])
80
- expect(@session).not_to have_select('Region', :options => ['Norway', 'Sweden'])
81
- expect(@session).not_to have_select('Region', :options => ['Norway', 'Norway', 'Norway'])
115
+ it 'should be true even when the options are invisible, if the select itself is invisible' do
116
+ expect(@session).to have_select('Icecream', visible: :hidden, options: %w[Chocolate Vanilla Strawberry])
117
+ end
118
+ end
119
+
120
+ context 'with enabled options' do
121
+ it 'should be true if the listed options exist and are enabled' do
122
+ expect(@session).to have_select('form_title', enabled_options: %w[Mr Mrs Miss])
82
123
  end
83
124
 
84
- it" should be true even when the options are invisible, if the select itself is invisible" do
85
- expect(@session).to have_select("Icecream", :visible => false, :options => ['Chocolate', 'Vanilla', 'Strawberry'])
125
+ it 'should be false if the listed options do not exist' do
126
+ expect(@session).not_to have_select('form_title', enabled_options: ['Not there'])
86
127
  end
87
128
 
129
+ it 'should be false if the listed option exists but is not enabled' do
130
+ expect(@session).not_to have_select('form_title', enabled_options: %w[Mr Mrs Miss Other])
131
+ end
132
+ end
133
+
134
+ context 'with disabled options' do
135
+ it 'should be true if the listed options exist and are disabled' do
136
+ expect(@session).to have_select('form_title', disabled_options: ['Other'])
137
+ end
138
+
139
+ it 'should be false if the listed options do not exist' do
140
+ expect(@session).not_to have_select('form_title', disabled_options: ['Not there'])
141
+ end
142
+
143
+ it 'should be false if the listed option exists but is not disabled' do
144
+ expect(@session).not_to have_select('form_title', disabled_options: %w[Other Mrs])
145
+ end
88
146
  end
89
147
 
90
148
  context 'with partial options' do
91
- it "should be true if a field with the given partial options is on the page" do
92
- expect(@session).to have_select('Region', :with_options => ['Norway', 'Sweden'])
93
- expect(@session).to have_select('City', :with_options => ['London'])
149
+ it 'should be true if a field with the given partial options is on the page' do
150
+ expect(@session).to have_select('Region', with_options: %w[Norway Sweden])
151
+ expect(@session).to have_select('City', with_options: ['London'])
94
152
  end
95
153
 
96
- it "should be false if a field with the given partial options is not on the page" do
97
- expect(@session).not_to have_select('Locale', :with_options => ['Uruguayan'])
98
- expect(@session).not_to have_select('Does not exist', :with_options => ['John'])
99
- expect(@session).not_to have_select('Region', :with_options => ['Norway', 'Sweden', 'Finland', 'Latvia'])
154
+ it 'should be false if a field with the given partial options is not on the page' do
155
+ expect(@session).not_to have_select('Locale', with_options: ['Uruguayan'])
156
+ expect(@session).not_to have_select('Does not exist', with_options: ['John'])
157
+ expect(@session).not_to have_select('Region', with_options: %w[Norway Sweden Finland Latvia])
100
158
  end
101
159
 
102
- it" should be true even when the options are invisible, if the select itself is invisible" do
103
- expect(@session).to have_select("Icecream", :visible => false, :with_options => ['Vanilla', 'Strawberry'])
160
+ it 'should be true even when the options are invisible, if the select itself is invisible' do
161
+ expect(@session).to have_select('Icecream', visible: :hidden, with_options: %w[Vanilla Strawberry])
104
162
  end
105
163
  end
106
164
 
107
165
  context 'with multiple option' do
108
- it "should find multiple selects if true" do
166
+ it 'should find multiple selects if true' do
109
167
  expect(@session).to have_select('form_languages', multiple: true)
110
168
  expect(@session).not_to have_select('form_other_title', multiple: true)
111
169
  end
112
170
 
113
- it "should not find multiple selects if false" do
171
+ it 'should not find multiple selects if false' do
114
172
  expect(@session).not_to have_select('form_languages', multiple: false)
115
173
  expect(@session).to have_select('form_other_title', multiple: false)
116
174
  end
117
175
 
118
- it "should find both if not specified" do
176
+ it 'should find both if not specified' do
119
177
  expect(@session).to have_select('form_languages')
120
178
  expect(@session).to have_select('form_other_title')
121
179
  end
122
180
  end
123
181
 
182
+ it 'should support locator-less usage' do
183
+ expect(@session.has_select?(with_options: %w[Norway Sweden])).to eq true
184
+ expect(@session).to have_select(with_options: ['London'])
185
+ expect(@session.has_select?(with_selected: %w[Commando Boxerbriefs])).to eq true
186
+ expect(@session).to have_select(with_selected: ['Briefs'])
187
+ end
124
188
  end
125
189
 
126
190
  Capybara::SpecHelper.spec '#has_no_select?' do
127
191
  before { @session.visit('/form') }
128
192
 
129
- it "should be false if the field is on the page" do
193
+ it 'should be false if the field is on the page' do
130
194
  expect(@session).not_to have_no_select('Locale')
131
195
  expect(@session).not_to have_no_select('form_region')
132
196
  expect(@session).not_to have_no_select('Languages')
133
197
  end
134
198
 
135
- it "should be true if the field is not on the page" do
199
+ it 'should be true if the field is not on the page' do
136
200
  expect(@session).to have_no_select('Monkey')
137
201
  end
138
202
 
139
203
  context 'with selected value' do
140
- it "should be false if a field with the given value is on the page" do
141
- expect(@session).not_to have_no_select('form_locale', :selected => 'English')
142
- expect(@session).not_to have_no_select('Region', :selected => 'Norway')
143
- expect(@session).not_to have_no_select('Underwear', :selected => [
204
+ it 'should be false if a field with the given value is on the page' do
205
+ expect(@session).not_to have_no_select('form_locale', selected: 'English')
206
+ expect(@session).not_to have_no_select('Region', selected: 'Norway')
207
+ expect(@session).not_to have_no_select('Underwear', selected: [
144
208
  'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
145
209
  ])
146
210
  end
147
211
 
148
- it "should be true if the given field is not on the page" do
149
- expect(@session).to have_no_select('Locale', :selected => 'Swedish')
150
- expect(@session).to have_no_select('Does not exist', :selected => 'John')
151
- expect(@session).to have_no_select('City', :selected => 'Not there')
152
- expect(@session).to have_no_select('Underwear', :selected => [
153
- 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns', 'Nonexistant'
212
+ it 'should be true if the given field is not on the page' do
213
+ expect(@session).to have_no_select('Locale', selected: 'Swedish')
214
+ expect(@session).to have_no_select('Does not exist', selected: 'John')
215
+ expect(@session).to have_no_select('City', selected: 'Not there')
216
+ expect(@session).to have_no_select('Underwear', selected: [
217
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns', 'Nonexistent'
154
218
  ])
155
- expect(@session).to have_no_select('Underwear', :selected => [
219
+ expect(@session).to have_no_select('Underwear', selected: [
156
220
  'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
157
221
  ])
158
- expect(@session).to have_no_select('Underwear', :selected => [
159
- 'Boxerbriefs', 'Briefs','Commando', "Frenchman's Pantalons"
222
+ expect(@session).to have_no_select('Underwear', selected: [
223
+ 'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons"
160
224
  ])
161
225
  end
162
226
 
163
- it "should be false after the given value is selected" do
164
- @session.select('Swedish', :from => 'Locale')
165
- expect(@session).not_to have_no_select('Locale', :selected => 'Swedish')
227
+ it 'should be false after the given value is selected' do
228
+ @session.select('Swedish', from: 'Locale')
229
+ expect(@session).not_to have_no_select('Locale', selected: 'Swedish')
166
230
  end
167
231
 
168
- it "should be true after a different value is selected" do
169
- @session.select('Swedish', :from => 'Locale')
170
- expect(@session).to have_no_select('Locale', :selected => 'English')
232
+ it 'should be true after a different value is selected' do
233
+ @session.select('Swedish', from: 'Locale')
234
+ expect(@session).to have_no_select('Locale', selected: 'English')
171
235
  end
172
236
 
173
- it "should be false after the given values are selected" do
174
- @session.select('Boxers', :from => 'Underwear')
175
- expect(@session).not_to have_no_select('Underwear', :selected => [
237
+ it 'should be false after the given values are selected' do
238
+ @session.select('Boxers', from: 'Underwear')
239
+ expect(@session).not_to have_no_select('Underwear', selected: [
176
240
  'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
177
241
  ])
178
242
  end
179
243
 
180
- it "should be true after one of the values is unselected" do
181
- @session.unselect('Briefs', :from => 'Underwear')
182
- expect(@session).to have_no_select('Underwear', :selected => [
244
+ it 'should be true after one of the values is unselected' do
245
+ @session.unselect('Briefs', from: 'Underwear')
246
+ expect(@session).to have_no_select('Underwear', selected: [
183
247
  'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
184
248
  ])
185
249
  end
186
250
  end
187
251
 
252
+ context 'with partial select' do
253
+ it 'should be false if a field with the given partial values is on the page' do
254
+ expect(@session).not_to have_no_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
255
+ end
256
+
257
+ it 'should be true if a field with the given partial values is not on the page' do
258
+ expect(@session).to have_no_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
259
+ end
260
+
261
+ it 'should be false after the given partial value is selected' do
262
+ @session.select('Boxers', from: 'Underwear')
263
+ expect(@session).not_to have_no_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
264
+ end
265
+
266
+ it 'should be true after one of the given partial values is unselected' do
267
+ @session.unselect('Briefs', from: 'Underwear')
268
+ expect(@session).to have_no_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
269
+ end
270
+
271
+ it 'should support non array partial values' do
272
+ expect(@session).not_to have_no_select('Underwear', with_selected: 'Briefs')
273
+ expect(@session).to have_no_select('Underwear', with_selected: 'Boxers')
274
+ end
275
+ end
276
+
188
277
  context 'with exact options' do
189
- it "should be false if a field with the given options is on the page" do
190
- expect(@session).not_to have_no_select('Region', :options => ['Norway', 'Sweden', 'Finland'])
278
+ it 'should be false if a field with the given options is on the page' do
279
+ expect(@session).not_to have_no_select('Region', options: %w[Norway Sweden Finland])
191
280
  end
192
281
 
193
- it "should be true if the given field is not on the page" do
194
- expect(@session).to have_no_select('Locale', :options => ['Swedish'])
195
- expect(@session).to have_no_select('Does not exist', :options => ['John'])
196
- expect(@session).to have_no_select('City', :options => ['London', 'Made up city'])
197
- expect(@session).to have_no_select('Region', :options => ['Norway', 'Sweden'])
198
- expect(@session).to have_no_select('Region', :options => ['Norway', 'Norway', 'Norway'])
282
+ it 'should be true if the given field is not on the page' do
283
+ expect(@session).to have_no_select('Locale', options: ['Swedish'])
284
+ expect(@session).to have_no_select('Does not exist', options: ['John'])
285
+ expect(@session).to have_no_select('City', options: ['London', 'Made up city'])
286
+ expect(@session).to have_no_select('Region', options: %w[Norway Sweden])
287
+ expect(@session).to have_no_select('Region', options: %w[Norway Norway Norway])
199
288
  end
200
289
  end
201
290
 
202
291
  context 'with partial options' do
203
- it "should be false if a field with the given partial options is on the page" do
204
- expect(@session).not_to have_no_select('Region', :with_options => ['Norway', 'Sweden'])
205
- expect(@session).not_to have_no_select('City', :with_options => ['London'])
292
+ it 'should be false if a field with the given partial options is on the page' do
293
+ expect(@session).not_to have_no_select('Region', with_options: %w[Norway Sweden])
294
+ expect(@session).not_to have_no_select('City', with_options: ['London'])
206
295
  end
207
296
 
208
- it "should be true if a field with the given partial options is not on the page" do
209
- expect(@session).to have_no_select('Locale', :with_options => ['Uruguayan'])
210
- expect(@session).to have_no_select('Does not exist', :with_options => ['John'])
211
- expect(@session).to have_no_select('Region', :with_options => ['Norway', 'Sweden', 'Finland', 'Latvia'])
297
+ it 'should be true if a field with the given partial options is not on the page' do
298
+ expect(@session).to have_no_select('Locale', with_options: ['Uruguayan'])
299
+ expect(@session).to have_no_select('Does not exist', with_options: ['John'])
300
+ expect(@session).to have_no_select('Region', with_options: %w[Norway Sweden Finland Latvia])
212
301
  end
213
302
  end
303
+
304
+ it 'should support locator-less usage' do
305
+ expect(@session.has_no_select?(with_options: %w[Norway Sweden Finland Latvia])).to eq true
306
+ expect(@session).to have_no_select(with_options: ['New London'])
307
+ expect(@session.has_no_select?(id: 'form_underwear', with_selected: ['Boxers'])).to eq true
308
+ expect(@session).to have_no_select(id: 'form_underwear', with_selected: %w[Commando Boxers])
309
+ end
214
310
  end