capybara 3.0.0 → 3.36.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (308) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/History.md +777 -10
  4. data/License.txt +1 -1
  5. data/README.md +75 -58
  6. data/lib/capybara/config.rb +29 -10
  7. data/lib/capybara/cucumber.rb +1 -1
  8. data/lib/capybara/driver/base.rb +22 -4
  9. data/lib/capybara/driver/node.rb +34 -9
  10. data/lib/capybara/dsl.rb +14 -6
  11. data/lib/capybara/helpers.rb +52 -7
  12. data/lib/capybara/minitest/spec.rb +173 -84
  13. data/lib/capybara/minitest.rb +250 -144
  14. data/lib/capybara/node/actions.rb +248 -124
  15. data/lib/capybara/node/base.rb +34 -20
  16. data/lib/capybara/node/document.rb +14 -2
  17. data/lib/capybara/node/document_matchers.rb +13 -15
  18. data/lib/capybara/node/element.rb +339 -113
  19. data/lib/capybara/node/finders.rb +95 -82
  20. data/lib/capybara/node/matchers.rb +338 -157
  21. data/lib/capybara/node/simple.rb +54 -15
  22. data/lib/capybara/queries/active_element_query.rb +18 -0
  23. data/lib/capybara/queries/ancestor_query.rb +9 -10
  24. data/lib/capybara/queries/base_query.rb +25 -18
  25. data/lib/capybara/queries/current_path_query.rb +16 -6
  26. data/lib/capybara/queries/match_query.rb +11 -0
  27. data/lib/capybara/queries/selector_query.rb +600 -103
  28. data/lib/capybara/queries/sibling_query.rb +9 -7
  29. data/lib/capybara/queries/style_query.rb +45 -0
  30. data/lib/capybara/queries/text_query.rb +40 -22
  31. data/lib/capybara/queries/title_query.rb +2 -2
  32. data/lib/capybara/rack_test/browser.rb +47 -28
  33. data/lib/capybara/rack_test/driver.rb +12 -3
  34. data/lib/capybara/rack_test/errors.rb +6 -0
  35. data/lib/capybara/rack_test/form.rb +53 -50
  36. data/lib/capybara/rack_test/node.rb +114 -37
  37. data/lib/capybara/rails.rb +1 -1
  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 +86 -52
  43. data/lib/capybara/rspec/features.rb +8 -10
  44. data/lib/capybara/rspec/matcher_proxies.rb +39 -18
  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 +138 -316
  59. data/lib/capybara/rspec.rb +3 -2
  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 +89 -12
  63. data/lib/capybara/selector/definition/button.rb +68 -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 +279 -0
  85. data/lib/capybara/selector/filter.rb +1 -0
  86. data/lib/capybara/selector/filter_set.rb +72 -27
  87. data/lib/capybara/selector/filters/base.rb +45 -2
  88. data/lib/capybara/selector/filters/expression_filter.rb +5 -6
  89. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  90. data/lib/capybara/selector/filters/node_filter.rb +18 -4
  91. data/lib/capybara/selector/regexp_disassembler.rb +214 -0
  92. data/lib/capybara/selector/selector.rb +85 -200
  93. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  94. data/lib/capybara/selector.rb +226 -537
  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 +296 -238
  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 +436 -166
  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 +69 -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 +58 -67
  127. data/lib/capybara/session/config.rb +38 -6
  128. data/lib/capybara/session/matchers.rb +26 -19
  129. data/lib/capybara/session.rb +258 -190
  130. data/lib/capybara/spec/public/jquery.js +5 -5
  131. data/lib/capybara/spec/public/offset.js +6 -0
  132. data/lib/capybara/spec/public/test.js +122 -8
  133. data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
  134. data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
  135. data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
  136. data/lib/capybara/spec/session/active_element_spec.rb +31 -0
  137. data/lib/capybara/spec/session/all_spec.rb +135 -42
  138. data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
  140. data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
  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.rb → assert_text_spec.rb} +62 -38
  144. data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
  145. data/lib/capybara/spec/session/attach_file_spec.rb +120 -72
  146. data/lib/capybara/spec/session/body_spec.rb +11 -13
  147. data/lib/capybara/spec/session/check_spec.rb +111 -51
  148. data/lib/capybara/spec/session/choose_spec.rb +62 -30
  149. data/lib/capybara/spec/session/click_button_spec.rb +227 -161
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
  151. data/lib/capybara/spec/session/click_link_spec.rb +78 -55
  152. data/lib/capybara/spec/session/current_scope_spec.rb +7 -7
  153. data/lib/capybara/spec/session/current_url_spec.rb +44 -37
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +8 -6
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
  162. data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
  163. data/lib/capybara/spec/session/fill_in_spec.rb +104 -44
  164. data/lib/capybara/spec/session/find_button_spec.rb +23 -23
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
  166. data/lib/capybara/spec/session/find_field_spec.rb +33 -31
  167. data/lib/capybara/spec/session/find_link_spec.rb +32 -14
  168. data/lib/capybara/spec/session/find_spec.rb +236 -141
  169. data/lib/capybara/spec/session/first_spec.rb +44 -43
  170. data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
  171. data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
  172. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +44 -19
  174. data/lib/capybara/spec/session/go_back_spec.rb +1 -1
  175. data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +18 -18
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +92 -12
  180. data/lib/capybara/spec/session/has_css_spec.rb +271 -137
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +48 -33
  182. data/lib/capybara/spec/session/has_field_spec.rb +137 -58
  183. data/lib/capybara/spec/session/has_link_spec.rb +30 -6
  184. data/lib/capybara/spec/session/has_none_selectors_spec.rb +26 -24
  185. data/lib/capybara/spec/session/has_select_spec.rb +75 -47
  186. data/lib/capybara/spec/session/has_selector_spec.rb +102 -69
  187. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  188. data/lib/capybara/spec/session/has_table_spec.rb +170 -4
  189. data/lib/capybara/spec/session/has_text_spec.rb +108 -52
  190. data/lib/capybara/spec/session/has_title_spec.rb +19 -14
  191. data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
  192. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
  193. data/lib/capybara/spec/session/html_spec.rb +13 -6
  194. data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
  195. data/lib/capybara/spec/session/node_spec.rb +871 -122
  196. data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
  197. data/lib/capybara/spec/session/refresh_spec.rb +9 -7
  198. data/lib/capybara/spec/session/reset_session_spec.rb +52 -37
  199. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
  200. data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
  201. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
  202. data/lib/capybara/spec/session/save_page_spec.rb +41 -38
  203. data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
  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 +102 -76
  207. data/lib/capybara/spec/session/selectors_spec.rb +51 -18
  208. data/lib/capybara/spec/session/sibling_spec.rb +9 -9
  209. data/lib/capybara/spec/session/text_spec.rb +26 -24
  210. data/lib/capybara/spec/session/title_spec.rb +8 -6
  211. data/lib/capybara/spec/session/uncheck_spec.rb +40 -21
  212. data/lib/capybara/spec/session/unselect_spec.rb +37 -37
  213. data/lib/capybara/spec/session/visit_spec.rb +59 -53
  214. data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
  215. data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
  216. data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
  217. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
  218. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
  219. data/lib/capybara/spec/session/window/window_spec.rb +88 -54
  220. data/lib/capybara/spec/session/window/windows_spec.rb +10 -7
  221. data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
  222. data/lib/capybara/spec/session/within_spec.rb +69 -44
  223. data/lib/capybara/spec/spec_helper.rb +41 -53
  224. data/lib/capybara/spec/test_app.rb +79 -40
  225. data/lib/capybara/spec/views/animated.erb +49 -0
  226. data/lib/capybara/spec/views/form.erb +134 -42
  227. data/lib/capybara/spec/views/frame_child.erb +4 -3
  228. data/lib/capybara/spec/views/frame_one.erb +2 -1
  229. data/lib/capybara/spec/views/frame_parent.erb +1 -1
  230. data/lib/capybara/spec/views/frame_two.erb +1 -1
  231. data/lib/capybara/spec/views/initial_alert.erb +2 -1
  232. data/lib/capybara/spec/views/layout.erb +10 -0
  233. data/lib/capybara/spec/views/obscured.erb +47 -0
  234. data/lib/capybara/spec/views/offset.erb +33 -0
  235. data/lib/capybara/spec/views/path.erb +2 -2
  236. data/lib/capybara/spec/views/popup_one.erb +1 -1
  237. data/lib/capybara/spec/views/popup_two.erb +1 -1
  238. data/lib/capybara/spec/views/react.erb +45 -0
  239. data/lib/capybara/spec/views/scroll.erb +21 -0
  240. data/lib/capybara/spec/views/spatial.erb +31 -0
  241. data/lib/capybara/spec/views/tables.erb +68 -1
  242. data/lib/capybara/spec/views/with_animation.erb +81 -0
  243. data/lib/capybara/spec/views/with_base_tag.erb +2 -2
  244. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  245. data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
  246. data/lib/capybara/spec/views/with_hover.erb +3 -2
  247. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  248. data/lib/capybara/spec/views/with_html.erb +43 -10
  249. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  250. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  251. data/lib/capybara/spec/views/with_js.erb +30 -5
  252. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  253. data/lib/capybara/spec/views/with_namespace.erb +21 -0
  254. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  255. data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
  256. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  257. data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
  258. data/lib/capybara/spec/views/with_windows.erb +1 -1
  259. data/lib/capybara/spec/views/within_frames.erb +1 -1
  260. data/lib/capybara/version.rb +1 -1
  261. data/lib/capybara/window.rb +31 -25
  262. data/lib/capybara.rb +120 -100
  263. data/spec/basic_node_spec.rb +59 -34
  264. data/spec/capybara_spec.rb +54 -52
  265. data/spec/css_builder_spec.rb +101 -0
  266. data/spec/css_splitter_spec.rb +38 -0
  267. data/spec/dsl_spec.rb +80 -53
  268. data/spec/filter_set_spec.rb +24 -7
  269. data/spec/fixtures/certificate.pem +25 -0
  270. data/spec/fixtures/key.pem +27 -0
  271. data/spec/fixtures/selenium_driver_rspec_failure.rb +4 -4
  272. data/spec/fixtures/selenium_driver_rspec_success.rb +4 -4
  273. data/spec/minitest_spec.rb +38 -5
  274. data/spec/minitest_spec_spec.rb +88 -62
  275. data/spec/per_session_config_spec.rb +5 -5
  276. data/spec/rack_test_spec.rb +169 -115
  277. data/spec/regexp_dissassembler_spec.rb +250 -0
  278. data/spec/result_spec.rb +86 -33
  279. data/spec/rspec/features_spec.rb +26 -23
  280. data/spec/rspec/scenarios_spec.rb +8 -4
  281. data/spec/rspec/shared_spec_matchers.rb +393 -363
  282. data/spec/rspec/views_spec.rb +4 -3
  283. data/spec/rspec_matchers_spec.rb +10 -10
  284. data/spec/rspec_spec.rb +109 -85
  285. data/spec/sauce_spec_chrome.rb +43 -0
  286. data/spec/selector_spec.rb +391 -61
  287. data/spec/selenium_spec_chrome.rb +180 -41
  288. data/spec/selenium_spec_chrome_remote.rb +101 -0
  289. data/spec/selenium_spec_edge.rb +28 -8
  290. data/spec/selenium_spec_firefox.rb +211 -0
  291. data/spec/selenium_spec_firefox_remote.rb +80 -0
  292. data/spec/selenium_spec_ie.rb +127 -11
  293. data/spec/selenium_spec_safari.rb +156 -0
  294. data/spec/server_spec.rb +177 -78
  295. data/spec/session_spec.rb +52 -16
  296. data/spec/shared_selenium_node.rb +79 -0
  297. data/spec/shared_selenium_session.rb +455 -123
  298. data/spec/spec_helper.rb +91 -2
  299. data/spec/xpath_builder_spec.rb +93 -0
  300. metadata +343 -42
  301. data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
  302. data/.yard/templates_custom/default/class/html/setup.rb +0 -17
  303. data/.yard/yard_extensions.rb +0 -78
  304. data/lib/capybara/rspec/compound.rb +0 -90
  305. data/lib/capybara/spec/session/assert_selector.rb +0 -149
  306. data/lib/capybara/spec/session/source_spec.rb +0 -0
  307. data/lib/capybara/spec/views/with_title.erb +0 -5
  308. data/spec/selenium_spec_marionette.rb +0 -143
@@ -5,516 +5,541 @@ require 'capybara/dsl'
5
5
  require 'capybara/rspec/matchers'
6
6
  require 'benchmark'
7
7
 
8
+ # rubocop:disable RSpec/ExpectActual
9
+
8
10
  RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
9
11
  include Capybara::DSL
10
12
  include Capybara::RSpecMatchers
11
13
 
12
- describe "have_css matcher" do
13
- it "gives proper description" do
14
- expect(have_css('h1').description).to eq("have visible css \"h1\"")
14
+ describe 'have_css matcher' do
15
+ it 'gives proper description' do
16
+ expect(have_css('h1').description).to eq('have visible css "h1"')
15
17
  end
16
18
 
17
- context "on a string" do
18
- context "with should" do
19
- it "passes if has_css? returns true" do
20
- expect("<h1>Text</h1>").to have_css('h1')
19
+ context 'on a string' do
20
+ context 'with should' do
21
+ it 'passes if has_css? returns true' do
22
+ expect('<h1>Text</h1>').to have_css('h1')
21
23
  end
22
24
 
23
- it "fails if has_css? returns false" do
25
+ it 'fails if has_css? returns false' do
24
26
  expect do
25
- expect("<h1>Text</h1>").to have_css('h2')
26
- end.to raise_error(/expected to find visible css "h2" but there were no matches/)
27
+ expect('<h1>Text</h1>').to have_css('h2')
28
+ end.to raise_error(/expected to find css "h2" but there were no matches/)
27
29
  end
28
30
 
29
- it "passes if matched node count equals expected count" do
30
- expect("<h1>Text</h1>").to have_css('h1', count: 1)
31
+ it 'passes if matched node count equals expected count' do
32
+ expect('<h1>Text</h1>').to have_css('h1', count: 1)
31
33
  end
32
34
 
33
- it "fails if matched node count does not equal expected count" do
35
+ it 'fails if matched node count does not equal expected count' do
34
36
  expect do
35
- expect("<h1>Text</h1>").to have_css('h1', count: 2)
36
- end.to raise_error("expected to find visible css \"h1\" 2 times, found 1 match: \"Text\"")
37
+ expect('<h1>Text</h1>').to have_css('h1', count: 2)
38
+ end.to raise_error('expected to find visible css "h1" 2 times, found 1 match: "Text"')
37
39
  end
38
40
 
39
- it "fails if matched node count is less than expected minimum count" do
41
+ it 'fails if matched node count is less than expected minimum count' do
40
42
  expect do
41
- expect("<h1>Text</h1>").to have_css('p', minimum: 1)
42
- end.to raise_error("expected to find visible css \"p\" at least 1 time but there were no matches")
43
+ expect('<h1>Text</h1>').to have_css('p', minimum: 1)
44
+ end.to raise_error('expected to find css "p" at least 1 time but there were no matches')
43
45
  end
44
46
 
45
- it "fails if matched node count is more than expected maximum count" do
47
+ it 'fails if matched node count is more than expected maximum count' do
46
48
  expect do
47
- expect("<h1>Text</h1><h1>Text</h1><h1>Text</h1>").to have_css('h1', maximum: 2)
49
+ expect('<h1>Text</h1><h1>Text</h1><h1>Text</h1>').to have_css('h1', maximum: 2)
48
50
  end.to raise_error('expected to find visible css "h1" at most 2 times, found 3 matches: "Text", "Text", "Text"')
49
51
  end
50
52
 
51
- it "fails if matched node count does not belong to expected range" do
53
+ it 'fails if matched node count does not belong to expected range' do
52
54
  expect do
53
- expect("<h1>Text</h1>").to have_css('h1', between: 2..3)
54
- end.to raise_error("expected to find visible css \"h1\" between 2 and 3 times, found 1 match: \"Text\"")
55
+ expect('<h1>Text</h1>').to have_css('h1', between: 2..3)
56
+ end.to raise_error('expected to find visible css "h1" between 2 and 3 times, found 1 match: "Text"')
55
57
  end
56
58
  end
57
59
 
58
- context "with should_not" do
59
- it "passes if has_no_css? returns true" do
60
- expect("<h1>Text</h1>").not_to have_css('h2')
60
+ context 'with should_not' do
61
+ it 'passes if has_no_css? returns true' do
62
+ expect('<h1>Text</h1>').not_to have_css('h2')
61
63
  end
62
64
 
63
- it "fails if has_no_css? returns false" do
65
+ it 'fails if has_no_css? returns false' do
64
66
  expect do
65
- expect("<h1>Text</h1>").not_to have_css('h1')
67
+ expect('<h1>Text</h1>').not_to have_css('h1')
66
68
  end.to raise_error(/expected not to find visible css "h1"/)
67
69
  end
68
70
 
69
- it "passes if matched node count does not equal expected count" do
70
- expect("<h1>Text</h1>").not_to have_css('h1', count: 2)
71
+ it 'passes if matched node count does not equal expected count' do
72
+ expect('<h1>Text</h1>').not_to have_css('h1', count: 2)
71
73
  end
72
74
 
73
- it "fails if matched node count equals expected count" do
75
+ it 'fails if matched node count equals expected count' do
74
76
  expect do
75
- expect("<h1>Text</h1>").not_to have_css('h1', count: 1)
77
+ expect('<h1>Text</h1>').not_to have_css('h1', count: 1)
76
78
  end.to raise_error(/expected not to find visible css "h1"/)
77
79
  end
78
80
  end
79
81
 
80
- it "supports compounding" do
81
- expect("<h1>Text</h1><h2>Text</h2>").to have_css('h1').and have_css('h2')
82
- expect("<h1>Text</h1><h2>Text</h2>").to have_css('h3').or have_css('h1')
82
+ it 'supports compounding' do
83
+ expect('<h1>Text</h1><h2>Text</h2>').to have_css('h1').and have_css('h2')
84
+ expect('<h1>Text</h1><h2>Text</h2>').to have_css('h3').or have_css('h1')
85
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_css('h4').and have_css('h2')
86
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_css('h2').or have_css('h1')
83
87
  end
84
88
  end
85
89
 
86
- context "on a page or node" do
90
+ context 'on a page or node' do
87
91
  before do
88
- visit('/with_html')
92
+ session.visit('/with_html')
89
93
  end
90
94
 
91
- context "with should" do
92
- it "passes if has_css? returns true" do
93
- expect(page).to have_css('h1')
95
+ context 'with should' do
96
+ it 'passes if has_css? returns true' do
97
+ expect(session).to have_css('h1')
94
98
  end
95
99
 
96
- it "fails if has_css? returns false" do
100
+ it 'fails if has_css? returns false' do
97
101
  expect do
98
- expect(page).to have_css('h1#doesnotexist')
99
- end.to raise_error(/expected to find visible css "h1#doesnotexist" but there were no matches/)
102
+ expect(session).to have_css('h1#doesnotexist')
103
+ end.to raise_error(/expected to find css "h1#doesnotexist" but there were no matches/)
100
104
  end
101
105
  end
102
106
 
103
- context "with should_not" do
104
- it "passes if has_no_css? returns true" do
105
- expect(page).not_to have_css('h1#doesnotexist')
107
+ context 'with should_not' do
108
+ it 'passes if has_no_css? returns true' do
109
+ expect(session).not_to have_css('h1#doesnotexist')
106
110
  end
107
111
 
108
- it "fails if has_no_css? returns false" do
112
+ it 'fails if has_no_css? returns false' do
109
113
  expect do
110
- expect(page).not_to have_css('h1')
114
+ expect(session).not_to have_css('h1')
111
115
  end.to raise_error(/expected not to find visible css "h1"/)
112
116
  end
113
117
  end
114
118
  end
115
119
  end
116
120
 
117
- describe "have_xpath matcher" do
118
- it "gives proper description" do
121
+ describe 'have_xpath matcher' do
122
+ it 'gives proper description' do
119
123
  expect(have_xpath('//h1').description).to eq("have visible xpath \"\/\/h1\"")
120
124
  end
121
125
 
122
- context "on a string" do
123
- context "with should" do
124
- it "passes if has_xpath? returns true" do
125
- expect("<h1>Text</h1>").to have_xpath('//h1')
126
+ context 'on a string' do
127
+ context 'with should' do
128
+ it 'passes if has_xpath? returns true' do
129
+ expect('<h1>Text</h1>').to have_xpath('//h1')
126
130
  end
127
131
 
128
- it "fails if has_xpath? returns false" do
132
+ it 'fails if has_xpath? returns false' do
129
133
  expect do
130
- expect("<h1>Text</h1>").to have_xpath('//h2')
131
- end.to raise_error(%r{expected to find visible xpath "//h2" but there were no matches})
134
+ expect('<h1>Text</h1>').to have_xpath('//h2')
135
+ end.to raise_error(%r{expected to find xpath "//h2" but there were no matches})
132
136
  end
133
137
  end
134
138
 
135
- context "with should_not" do
136
- it "passes if has_no_xpath? returns true" do
137
- expect("<h1>Text</h1>").not_to have_xpath('//h2')
139
+ context 'with should_not' do
140
+ it 'passes if has_no_xpath? returns true' do
141
+ expect('<h1>Text</h1>').not_to have_xpath('//h2')
138
142
  end
139
143
 
140
- it "fails if has_no_xpath? returns false" do
144
+ it 'fails if has_no_xpath? returns false' do
141
145
  expect do
142
- expect("<h1>Text</h1>").not_to have_xpath('//h1')
146
+ expect('<h1>Text</h1>').not_to have_xpath('//h1')
143
147
  end.to raise_error(%r{expected not to find visible xpath "//h1"})
144
148
  end
145
149
  end
146
150
 
147
- it "supports compounding" do
148
- expect("<h1>Text</h1><h2>Text</h2>").to have_xpath('//h1').and have_xpath('//h2')
149
- expect("<h1>Text</h1><h2>Text</h2>").to have_xpath('//h3').or have_xpath('//h1')
151
+ it 'supports compounding' do
152
+ expect('<h1>Text</h1><h2>Text</h2>').to have_xpath('//h1').and have_xpath('//h2')
153
+ expect('<h1>Text</h1><h2>Text</h2>').to have_xpath('//h3').or have_xpath('//h1')
154
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_xpath('//h4').and have_xpath('//h1')
155
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_xpath('//h4').or have_xpath('//h4')
150
156
  end
151
157
  end
152
158
 
153
- context "on a page or node" do
159
+ context 'on a page or node' do
154
160
  before do
155
- visit('/with_html')
161
+ session.visit('/with_html')
156
162
  end
157
163
 
158
- context "with should" do
159
- it "passes if has_xpath? returns true" do
160
- expect(page).to have_xpath('//h1')
164
+ context 'with should' do
165
+ it 'passes if has_xpath? returns true' do
166
+ expect(session).to have_xpath('//h1')
161
167
  end
162
168
 
163
- it "fails if has_xpath? returns false" do
169
+ it 'fails if has_xpath? returns false' do
164
170
  expect do
165
- expect(page).to have_xpath("//h1[@id='doesnotexist']")
166
- end.to raise_error(%r{expected to find visible xpath "//h1\[@id='doesnotexist'\]" but there were no matches})
171
+ expect(session).to have_xpath("//h1[@id='doesnotexist']")
172
+ end.to raise_error(%r{expected to find xpath "//h1\[@id='doesnotexist'\]" but there were no matches})
167
173
  end
168
174
  end
169
175
 
170
- context "with should_not" do
171
- it "passes if has_no_xpath? returns true" do
172
- expect(page).not_to have_xpath('//h1[@id="doesnotexist"]')
176
+ context 'with should_not' do
177
+ it 'passes if has_no_xpath? returns true' do
178
+ expect(session).not_to have_xpath('//h1[@id="doesnotexist"]')
173
179
  end
174
180
 
175
- it "fails if has_no_xpath? returns false" do
181
+ it 'fails if has_no_xpath? returns false' do
176
182
  expect do
177
- expect(page).not_to have_xpath('//h1')
183
+ expect(session).not_to have_xpath('//h1')
178
184
  end.to raise_error(%r{expected not to find visible xpath "//h1"})
179
185
  end
180
186
  end
181
187
  end
182
188
  end
183
189
 
184
- describe "have_selector matcher" do
185
- it "gives proper description" do
190
+ describe 'have_selector matcher' do
191
+ it 'gives proper description' do
186
192
  matcher = have_selector('//h1')
187
- expect("<h1>Text</h1>").to matcher
188
- expect(matcher.description).to eq("have visible xpath \"//h1\"")
193
+ expect('<h1>Text</h1>').to matcher
194
+ expect(matcher.description).to eq('have visible xpath "//h1"')
189
195
  end
190
196
 
191
- context "on a string" do
192
- context "with should" do
193
- it "passes if has_selector? returns true" do
194
- expect("<h1>Text</h1>").to have_selector('//h1')
197
+ context 'on a string' do
198
+ context 'with should' do
199
+ it 'passes if has_selector? returns true' do
200
+ expect('<h1>Text</h1>').to have_selector('//h1')
195
201
  end
196
202
 
197
- it "fails if has_selector? returns false" do
203
+ it 'fails if has_selector? returns false' do
198
204
  expect do
199
- expect("<h1>Text</h1>").to have_selector('//h2')
200
- end.to raise_error(%r{expected to find visible xpath "//h2" but there were no matches})
205
+ expect('<h1>Text</h1>').to have_selector('//h2')
206
+ end.to raise_error(%r{expected to find xpath "//h2" but there were no matches})
201
207
  end
202
208
  end
203
209
 
204
- context "with should_not" do
205
- it "passes if has_no_selector? returns true" do
206
- expect("<h1>Text</h1>").not_to have_selector(:css, 'h2')
210
+ context 'with should_not' do
211
+ it 'passes if has_no_selector? returns true' do
212
+ expect('<h1>Text</h1>').not_to have_selector(:css, 'h2')
207
213
  end
208
214
 
209
- it "fails if has_no_selector? returns false" do
215
+ it 'fails if has_no_selector? returns false' do
210
216
  expect do
211
- expect("<h1>Text</h1>").not_to have_selector(:css, 'h1')
212
- end.to raise_error(%r{expected not to find visible css "h1"})
217
+ expect('<h1>Text</h1>').not_to have_selector(:css, 'h1')
218
+ end.to raise_error(/expected not to find visible css "h1"/)
213
219
  end
214
220
  end
215
221
  end
216
222
 
217
- context "on a page or node" do
223
+ context 'on a page or node' do
218
224
  before do
219
- visit('/with_html')
225
+ session.visit('/with_html')
220
226
  end
221
227
 
222
- context "with should" do
223
- it "passes if has_selector? returns true" do
224
- expect(page).to have_selector('//h1', text: 'test')
228
+ context 'with should' do
229
+ it 'passes if has_selector? returns true' do
230
+ expect(session).to have_selector('//h1', text: 'test')
225
231
  end
226
232
 
227
- it "fails if has_selector? returns false" do
233
+ it 'fails if has_selector? returns false' do
228
234
  expect do
229
- expect(page).to have_selector("//h1[@id='doesnotexist']")
230
- end.to raise_error(%r{expected to find visible xpath "//h1\[@id='doesnotexist'\]" but there were no matches})
235
+ expect(session).to have_selector("//h1[@id='doesnotexist']")
236
+ end.to raise_error(%r{expected to find xpath "//h1\[@id='doesnotexist'\]" but there were no matches})
231
237
  end
232
238
 
233
- it "includes text in error message" do
239
+ it 'includes text in error message' do
234
240
  expect do
235
- expect(page).to have_selector("//h1", text: 'wrong text')
241
+ expect(session).to have_selector('//h1', text: 'wrong text')
236
242
  end.to raise_error(%r{expected to find visible xpath "//h1" with text "wrong text" but there were no matches})
237
243
  end
238
244
  end
239
245
 
240
- context "with should_not" do
241
- it "passes if has_no_css? returns true" do
242
- expect(page).not_to have_selector(:css, 'h1#doesnotexist')
246
+ context 'with should_not' do
247
+ it 'passes if has_no_css? returns true' do
248
+ expect(session).not_to have_selector(:css, 'h1#doesnotexist')
243
249
  end
244
250
 
245
- it "fails if has_no_selector? returns false" do
251
+ it 'fails if has_no_selector? returns false' do
246
252
  expect do
247
- expect(page).not_to have_selector(:css, 'h1', text: 'test')
248
- end.to raise_error(%r{expected not to find visible css "h1" with text "test"})
253
+ expect(session).not_to have_selector(:css, 'h1', text: 'test')
254
+ end.to raise_error(/expected not to find visible css "h1" with text "test"/)
249
255
  end
250
256
  end
251
257
  end
252
258
 
253
- it "supports compounding" do
254
- expect("<h1>Text</h1><h2>Text</h2>").to have_selector('//h1').and have_selector('//h2')
255
- expect("<h1>Text</h1><h2>Text</h2>").to have_selector('//h3').or have_selector('//h1')
259
+ it 'supports compounding' do
260
+ expect('<h1>Text</h1><h2>Text</h2>').to have_selector('//h1').and have_selector('//h2')
261
+ expect('<h1>Text</h1><h2>Text</h2>').to have_selector('//h3').or have_selector('//h1')
262
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_selector('//h3').and have_selector('//h1')
256
263
  end
257
264
  end
258
265
 
259
- describe "have_content matcher" do
260
- it "gives proper description" do
261
- expect(have_content('Text').description).to eq("text \"Text\"")
266
+ describe 'have_content matcher' do
267
+ it 'gives proper description' do
268
+ expect(have_content('Text').description).to eq('have text "Text"')
262
269
  end
263
270
 
264
- context "on a string" do
265
- context "with should" do
266
- it "passes if has_content? returns true" do
267
- expect("<h1>Text</h1>").to have_content('Text')
271
+ context 'on a string' do
272
+ context 'with should' do
273
+ it 'passes if has_content? returns true' do
274
+ expect('<h1>Text</h1>').to have_content('Text')
268
275
  end
269
276
 
270
- it "passes if has_content? returns true using regexp" do
271
- expect("<h1>Text</h1>").to have_content(/ext/)
277
+ it 'passes if has_content? returns true using regexp' do
278
+ expect('<h1>Text</h1>').to have_content(/ext/)
272
279
  end
273
280
 
274
- it "fails if has_content? returns false" do
281
+ it 'fails if has_content? returns false' do
275
282
  expect do
276
- expect("<h1>Text</h1>").to have_content('No such Text')
283
+ expect('<h1>Text</h1>').to have_content('No such Text')
277
284
  end.to raise_error(/expected to find text "No such Text" in "Text"/)
278
285
  end
279
286
  end
280
287
 
281
- context "with should_not" do
282
- it "passes if has_no_content? returns true" do
283
- expect("<h1>Text</h1>").not_to have_content('No such Text')
288
+ context 'with should_not' do
289
+ it 'passes if has_no_content? returns true' do
290
+ expect('<h1>Text</h1>').not_to have_content('No such Text')
284
291
  end
285
292
 
286
- it "passes because escapes any characters that would have special meaning in a regexp" do
287
- expect("<h1>Text</h1>").not_to have_content('.')
293
+ it 'passes because escapes any characters that would have special meaning in a regexp' do
294
+ expect('<h1>Text</h1>').not_to have_content('.')
288
295
  end
289
296
 
290
- it "fails if has_no_content? returns false" do
297
+ it 'fails if has_no_content? returns false' do
291
298
  expect do
292
- expect("<h1>Text</h1>").not_to have_content('Text')
299
+ expect('<h1>Text</h1>').not_to have_content('Text')
293
300
  end.to raise_error(/expected not to find text "Text" in "Text"/)
294
301
  end
295
302
  end
296
303
  end
297
304
 
298
- context "on a page or node" do
305
+ context 'on a page or node' do
299
306
  before do
300
- visit('/with_html')
307
+ session.visit('/with_html')
301
308
  end
302
309
 
303
- context "with should" do
304
- it "passes if has_content? returns true" do
305
- expect(page).to have_content('This is a test')
310
+ context 'with should' do
311
+ it 'passes if has_content? returns true' do
312
+ expect(session).to have_content('This is a test')
306
313
  end
307
314
 
308
- it "passes if has_content? returns true using regexp" do
309
- expect(page).to have_content(/test/)
315
+ it 'passes if has_content? returns true using regexp' do
316
+ expect(session).to have_content(/test/)
310
317
  end
311
318
 
312
- it "fails if has_content? returns false" do
319
+ it 'fails if has_content? returns false' do
313
320
  expect do
314
- expect(page).to have_content('No such Text')
321
+ expect(session).to have_content('No such Text')
315
322
  end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
316
323
  end
317
324
 
318
- context "with default selector CSS" do
325
+ context 'with default selector CSS' do
319
326
  before { Capybara.default_selector = :css }
320
- it "fails if has_content? returns false" do
327
+
328
+ after { Capybara.default_selector = :xpath }
329
+
330
+ it 'fails if has_content? returns false' do
321
331
  expect do
322
- expect(page).to have_content('No such Text')
332
+ expect(session).to have_content('No such Text')
323
333
  end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
324
334
  end
325
- after { Capybara.default_selector = :xpath }
326
335
  end
327
336
  end
328
337
 
329
- context "with should_not" do
330
- it "passes if has_no_content? returns true" do
331
- expect(page).not_to have_content('No such Text')
338
+ context 'with should_not' do
339
+ it 'passes if has_no_content? returns true' do
340
+ expect(session).not_to have_content('No such Text')
332
341
  end
333
342
 
334
- it "fails if has_no_content? returns false" do
343
+ it 'fails if has_no_content? returns false' do
335
344
  expect do
336
- expect(page).not_to have_content('This is a test')
345
+ expect(session).not_to have_content('This is a test')
337
346
  end.to raise_error(/expected not to find text "This is a test"/)
338
347
  end
348
+
349
+ it 'not_to have_content behaves the same as to have_no_content' do
350
+ Capybara.using_wait_time(5) do
351
+ expect(session).to have_content('This is a test')
352
+ start = Time.now
353
+ expect(session).to have_no_content('No such Text')
354
+ to_time = Time.now
355
+ expect(session).not_to have_content('No such Text')
356
+ not_to_time = Time.now
357
+ expect(not_to_time - to_time).to be_within(0.5).of(to_time - start)
358
+ end
359
+ end
339
360
  end
340
361
  end
341
362
 
342
- it "supports compounding" do
343
- expect("<h1>Text</h1><h2>And</h2>").to have_content('Text').and have_content('And')
344
- expect("<h1>Text</h1><h2>Or</h2>").to have_content('XYZ').or have_content('Or')
363
+ it 'supports compounding' do
364
+ expect('<h1>Text</h1><h2>And</h2>').to have_content('Text').and have_content('And')
365
+ expect('<h1>Text</h1><h2>Or</h2>').to have_content('XYZ').or have_content('Or')
366
+ expect('<h1>Text</h1><h2>Or</h2>').to have_no_content('XYZ').and have_content('Or')
345
367
  end
346
368
  end
347
369
 
348
- describe "have_text matcher" do
349
- it "gives proper description" do
350
- expect(have_text('Text').description).to eq("text \"Text\"")
370
+ describe 'have_text matcher' do
371
+ it 'gives proper description' do
372
+ expect(have_text('Text').description).to eq('have text "Text"')
351
373
  end
352
374
 
353
- context "on a string" do
354
- context "with should" do
355
- it "passes if text contains given string" do
356
- expect("<h1>Text</h1>").to have_text('Text')
375
+ context 'on a string' do
376
+ context 'with should' do
377
+ it 'passes if text contains given string' do
378
+ expect('<h1>Text</h1>').to have_text('Text')
357
379
  end
358
380
 
359
- it "passes if text matches given regexp" do
360
- expect("<h1>Text</h1>").to have_text(/ext/)
381
+ it 'passes if text matches given regexp' do
382
+ expect('<h1>Text</h1>').to have_text(/ext/)
361
383
  end
362
384
 
363
385
  it "fails if text doesn't contain given string" do
364
386
  expect do
365
- expect("<h1>Text</h1>").to have_text('No such Text')
387
+ expect('<h1>Text</h1>').to have_text('No such Text')
366
388
  end.to raise_error(/expected to find text "No such Text" in "Text"/)
367
389
  end
368
390
 
369
391
  it "fails if text doesn't match given regexp" do
370
392
  expect do
371
- expect("<h1>Text</h1>").to have_text(/No such Text/)
393
+ expect('<h1>Text</h1>').to have_text(/No such Text/)
372
394
  end.to raise_error('expected to find text matching /No such Text/ in "Text"')
373
395
  end
374
396
 
375
- it "casts Integer to string" do
397
+ it 'casts Integer to string' do
376
398
  expect do
377
- expect("<h1>Text</h1>").to have_text(3)
399
+ expect('<h1>Text</h1>').to have_text(3)
378
400
  end.to raise_error(/expected to find text "3" in "Text"/)
379
401
  end
380
402
 
381
- it "fails if matched text count does not equal to expected count" do
403
+ it 'fails if matched text count does not equal to expected count' do
382
404
  expect do
383
- expect("<h1>Text</h1>").to have_text('Text', count: 2)
405
+ expect('<h1>Text</h1>').to have_text('Text', count: 2)
384
406
  end.to raise_error('expected to find text "Text" 2 times but found 1 time in "Text"')
385
407
  end
386
408
 
387
- it "fails if matched text count is less than expected minimum count" do
409
+ it 'fails if matched text count is less than expected minimum count' do
388
410
  expect do
389
- expect("<h1>Text</h1>").to have_text('Lorem', minimum: 1)
411
+ expect('<h1>Text</h1>').to have_text('Lorem', minimum: 1)
390
412
  end.to raise_error('expected to find text "Lorem" at least 1 time but found 0 times in "Text"')
391
413
  end
392
414
 
393
- it "fails if matched text count is more than expected maximum count" do
415
+ it 'fails if matched text count is more than expected maximum count' do
394
416
  expect do
395
- expect("<h1>Text TextText</h1>").to have_text('Text', maximum: 2)
417
+ expect('<h1>Text TextText</h1>').to have_text('Text', maximum: 2)
396
418
  end.to raise_error('expected to find text "Text" at most 2 times but found 3 times in "Text TextText"')
397
419
  end
398
420
 
399
- it "fails if matched text count does not belong to expected range" do
421
+ it 'fails if matched text count does not belong to expected range' do
400
422
  expect do
401
- expect("<h1>Text</h1>").to have_text('Text', between: 2..3)
423
+ expect('<h1>Text</h1>').to have_text('Text', between: 2..3)
402
424
  end.to raise_error('expected to find text "Text" between 2 and 3 times but found 1 time in "Text"')
403
425
  end
404
426
  end
405
427
 
406
- context "with should_not" do
428
+ context 'with should_not' do
407
429
  it "passes if text doesn't contain a string" do
408
- expect("<h1>Text</h1>").not_to have_text('No such Text')
430
+ expect('<h1>Text</h1>').not_to have_text('No such Text')
409
431
  end
410
432
 
411
- it "passes because escapes any characters that would have special meaning in a regexp" do
412
- expect("<h1>Text</h1>").not_to have_text('.')
433
+ it 'passes because escapes any characters that would have special meaning in a regexp' do
434
+ expect('<h1>Text</h1>').not_to have_text('.')
413
435
  end
414
436
 
415
- it "fails if text contains a string" do
437
+ it 'fails if text contains a string' do
416
438
  expect do
417
- expect("<h1>Text</h1>").not_to have_text('Text')
439
+ expect('<h1>Text</h1>').not_to have_text('Text')
418
440
  end.to raise_error(/expected not to find text "Text" in "Text"/)
419
441
  end
420
442
  end
421
443
  end
422
444
 
423
- context "on a page or node" do
445
+ context 'on a page or node' do
424
446
  before do
425
- visit('/with_html')
447
+ session.visit('/with_html')
426
448
  end
427
449
 
428
- context "with should" do
429
- it "passes if has_text? returns true" do
430
- expect(page).to have_text('This is a test')
450
+ context 'with should' do
451
+ it 'passes if has_text? returns true' do
452
+ expect(session).to have_text('This is a test')
431
453
  end
432
454
 
433
- it "passes if has_text? returns true using regexp" do
434
- expect(page).to have_text(/test/)
455
+ it 'passes if has_text? returns true using regexp' do
456
+ expect(session).to have_text(/test/)
435
457
  end
436
458
 
437
- it "can check for all text" do
438
- expect(page).to have_text(:all, 'Some of this text is hidden!')
459
+ it 'can check for all text' do
460
+ expect(session).to have_text(:all, 'Some of this text is hidden!')
439
461
  end
440
462
 
441
- it "can check for visible text" do
442
- expect(page).to have_text(:visible, 'Some of this text is')
443
- expect(page).not_to have_text(:visible, 'Some of this text is hidden!')
463
+ it 'can check for visible text' do
464
+ expect(session).to have_text(:visible, 'Some of this text is')
465
+ expect(session).not_to have_text(:visible, 'Some of this text is hidden!')
444
466
  end
445
467
 
446
- it "fails if has_text? returns false" do
468
+ it 'fails if has_text? returns false' do
447
469
  expect do
448
- expect(page).to have_text('No such Text')
470
+ expect(session).to have_text('No such Text')
449
471
  end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
450
472
  end
451
473
 
452
- context "with default selector CSS" do
474
+ context 'with default selector CSS' do
453
475
  before { Capybara.default_selector = :css }
454
- it "fails if has_text? returns false" do
476
+
477
+ after { Capybara.default_selector = :xpath }
478
+
479
+ it 'fails if has_text? returns false' do
455
480
  expect do
456
- expect(page).to have_text('No such Text')
481
+ expect(session).to have_text('No such Text')
457
482
  end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
458
483
  end
459
- after { Capybara.default_selector = :xpath }
460
484
  end
461
485
  end
462
486
 
463
- context "with should_not" do
464
- it "passes if has_no_text? returns true" do
465
- expect(page).not_to have_text('No such Text')
487
+ context 'with should_not' do
488
+ it 'passes if has_no_text? returns true' do
489
+ expect(session).not_to have_text('No such Text')
466
490
  end
467
491
 
468
- it "fails if has_no_text? returns false" do
492
+ it 'fails if has_no_text? returns false' do
469
493
  expect do
470
- expect(page).not_to have_text('This is a test')
494
+ expect(session).not_to have_text('This is a test')
471
495
  end.to raise_error(/expected not to find text "This is a test"/)
472
496
  end
473
497
  end
474
498
  end
475
499
 
476
- it "supports compounding" do
477
- expect("<h1>Text</h1><h2>And</h2>").to have_text('Text').and have_text('And')
478
- expect("<h1>Text</h1><h2>Or</h2>").to have_text('Not here').or have_text('Or')
500
+ it 'supports compounding' do
501
+ expect('<h1>Text</h1><h2>And</h2>').to have_text('Text').and have_text('And')
502
+ expect('<h1>Text</h1><h2>Or</h2>').to have_text('Not here').or have_text('Or')
479
503
  end
480
504
  end
481
505
 
482
- describe "have_link matcher" do
506
+ describe 'have_link matcher' do
483
507
  let(:html) { '<a href="#">Just a link</a><a href="#">Another link</a>' }
484
508
 
485
- it "gives proper description" do
486
- expect(have_link('Just a link').description).to eq("have visible link \"Just a link\"")
509
+ it 'gives proper description' do
510
+ expect(have_link('Just a link').description).to eq('have visible link "Just a link"')
487
511
  end
488
512
 
489
- it "passes if there is such a button" do
513
+ it 'passes if there is such a link' do
490
514
  expect(html).to have_link('Just a link')
491
515
  end
492
516
 
493
- it "fails if there is no such button" do
517
+ it 'fails if there is no such link' do
494
518
  expect do
495
519
  expect(html).to have_link('No such Link')
496
- end.to raise_error(/expected to find visible link "No such Link"/)
520
+ end.to raise_error(/expected to find link "No such Link"/)
497
521
  end
498
522
 
499
- it "supports compounding" do
523
+ it 'supports compounding' do
500
524
  expect(html).to have_link('Just a link').and have_link('Another link')
501
525
  expect(html).to have_link('Not a link').or have_link('Another link')
526
+ expect(html).to have_no_link('Not a link').and have_link('Another link')
502
527
  end
503
528
  end
504
529
 
505
- describe "have_title matcher" do
506
- it "gives proper description" do
507
- expect(have_title('Just a title').description).to eq("have title \"Just a title\"")
530
+ describe 'have_title matcher' do
531
+ it 'gives proper description' do
532
+ expect(have_title('Just a title').description).to eq('have title "Just a title"')
508
533
  end
509
534
 
510
- context "on a string" do
535
+ context 'on a string' do
511
536
  let(:html) { '<title>Just a title</title>' }
512
537
 
513
- it "passes if there is such a title" do
538
+ it 'passes if there is such a title' do
514
539
  expect(html).to have_title('Just a title')
515
540
  end
516
541
 
517
- it "fails if there is no such title" do
542
+ it 'fails if there is no such title' do
518
543
  expect do
519
544
  expect(html).to have_title('No such title')
520
545
  end.to raise_error('expected "Just a title" to include "No such title"')
@@ -527,403 +552,408 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
527
552
  end
528
553
  end
529
554
 
530
- context "on a page or node" do
531
- it "passes if there is such a title" do
532
- visit('/with_js')
533
- expect(page).to have_title('with_js')
555
+ context 'on a page or node' do
556
+ it 'passes if there is such a title' do
557
+ session.visit('/with_js')
558
+ expect(session).to have_title('with_js')
534
559
  end
535
560
 
536
- it "fails if there is no such title" do
537
- visit('/with_js')
561
+ it 'fails if there is no such title' do
562
+ session.visit('/with_js')
538
563
  expect do
539
- expect(page).to have_title('No such title')
540
- end.to raise_error('expected "with_js" to include "No such title"')
564
+ expect(session).to have_title('No such title')
565
+ end.to raise_error(/ to include "No such title"/)
541
566
  end
542
567
 
543
568
  context 'with wait' do
544
- before(:each) do
545
- @session = session
546
- @session.visit('/with_js')
569
+ before do
570
+ session.visit('/with_js')
547
571
  end
548
572
 
549
573
  it 'waits if wait time is more than timeout' do
550
- @session.click_link("Change title")
551
- using_wait_time 0 do
552
- expect(@session).to have_title('changed title', wait: 0.5)
574
+ session.click_link('Change title')
575
+ session.using_wait_time 0 do
576
+ expect(session).to have_title('changed title', wait: 2)
553
577
  end
554
578
  end
555
579
 
556
580
  it "doesn't wait if wait time is less than timeout" do
557
- @session.click_link("Change title")
558
- using_wait_time 3 do
559
- expect(@session).not_to have_title('changed title', wait: 0)
581
+ session.click_link('Change title')
582
+ session.using_wait_time 3 do
583
+ expect(session).not_to have_title('changed title', wait: 0)
560
584
  end
561
585
  end
562
586
  end
563
587
  end
564
588
 
565
- it "supports compounding" do
566
- expect("<title>I compound</title>").to have_title('I dont compound').or have_title('I compound')
589
+ it 'supports compounding' do
590
+ expect('<title>I compound</title>').to have_title('I dont compound').or have_title('I compound')
567
591
  end
568
592
  end
569
593
 
570
- describe "have_current_path matcher" do
571
- it "gives proper description" do
572
- expect(have_current_path('http://www.example.com').description).to eq("have current path \"http://www.example.com\"")
594
+ describe 'have_current_path matcher' do
595
+ it 'gives proper description' do
596
+ expect(have_current_path('http://www.example.com').description).to eq('have current path "http://www.example.com"')
573
597
  end
574
598
 
575
- context "on a page or node" do
576
- it "passes if there is such a current path" do
577
- visit('/with_js')
578
- expect(page).to have_current_path('/with_js')
599
+ context 'on a page or node' do
600
+ it 'passes if there is such a current path' do
601
+ session.visit('/with_js')
602
+ expect(session).to have_current_path('/with_js')
579
603
  end
580
604
 
581
- it "fails if there is no such current_path" do
605
+ it 'fails if there is no such current_path' do
582
606
  visit('/with_js')
583
607
  expect do
584
- expect(page).to have_current_path('/not_with_js')
585
- end.to raise_error('expected "/with_js" to equal "/not_with_js"')
608
+ expect(session).to have_current_path('/not_with_js')
609
+ end.to raise_error(%r{to equal "/not_with_js"})
586
610
  end
587
611
 
588
612
  context 'with wait' do
589
- before(:each) do
590
- @session = session
591
- @session.visit('/with_js')
613
+ before do
614
+ session.visit('/with_js')
592
615
  end
593
616
 
594
617
  it 'waits if wait time is more than timeout' do
595
- @session.click_link("Change page")
596
- using_wait_time 0 do
597
- expect(@session).to have_current_path('/with_html', wait: 1)
618
+ session.click_link('Change page')
619
+ session.using_wait_time 0 do
620
+ expect(session).to have_current_path('/with_html', wait: 2)
598
621
  end
599
622
  end
600
623
 
601
624
  it "doesn't wait if wait time is less than timeout" do
602
- @session.click_link("Change page")
603
- using_wait_time 0 do
604
- expect(@session).not_to have_current_path('/with_html')
625
+ session.click_link('Change page')
626
+ session.using_wait_time 0 do
627
+ expect(session).not_to have_current_path('/with_html')
605
628
  end
606
629
  end
607
630
  end
608
631
  end
609
632
 
610
- it "supports compounding" do
611
- visit('/with_html')
612
- expect(page).to have_current_path('/not_with_html').or have_current_path('/with_html')
633
+ it 'supports compounding' do
634
+ session.visit('/with_html')
635
+ expect(session).to have_current_path('/not_with_html').or have_current_path('/with_html')
613
636
  end
614
637
  end
615
638
 
616
- describe "have_button matcher" do
639
+ describe 'have_button matcher' do
617
640
  let(:html) { '<button>A button</button><input type="submit" value="Another button"/>' }
618
641
 
619
- it "gives proper description" do
620
- expect(have_button('A button').description).to eq("have visible button \"A button\"")
642
+ it 'gives proper description with no options' do
643
+ expect(have_button('A button').description).to eq('have visible button "A button" that is not disabled')
644
+ end
645
+
646
+ it 'gives proper description with disabled :any option' do
647
+ expect(have_button('A button', disabled: :all).description).to eq('have visible button "A button"')
621
648
  end
622
649
 
623
- it "passes if there is such a button" do
650
+ it 'passes if there is such a button' do
624
651
  expect(html).to have_button('A button')
625
652
  end
626
653
 
627
- it "fails if there is no such button" do
654
+ it 'fails if there is no such button' do
628
655
  expect do
629
656
  expect(html).to have_button('No such Button')
630
- end.to raise_error(/expected to find visible button "No such Button"/)
657
+ end.to raise_error(/expected to find button "No such Button"/)
631
658
  end
632
659
 
633
- it "supports compounding" do
660
+ it 'supports compounding' do
634
661
  expect(html).to have_button('Not this button').or have_button('A button')
635
662
  end
636
663
  end
637
664
 
638
- describe "have_field matcher" do
665
+ describe 'have_field matcher' do
639
666
  let(:html) { '<p><label>Text field<input type="text" value="some value"/></label></p>' }
640
667
 
641
- it "gives proper description" do
642
- expect(have_field('Text field').description).to eq("have visible field \"Text field\" that is not disabled")
668
+ it 'gives proper description' do
669
+ expect(have_field('Text field').description).to eq('have visible field "Text field" that is not disabled')
643
670
  end
644
671
 
645
- it "gives proper description for a given value" do
646
- expect(have_field('Text field', with: 'some value').description).to eq("have visible field \"Text field\" that is not disabled with value \"some value\"")
672
+ it 'gives proper description for a given value' do
673
+ expect(have_field('Text field', with: 'some value').description).to eq('have visible field "Text field" that is not disabled with value "some value"')
647
674
  end
648
675
 
649
- it "passes if there is such a field" do
676
+ it 'passes if there is such a field' do
650
677
  expect(html).to have_field('Text field')
651
678
  end
652
679
 
653
- it "passes if there is such a field with value" do
680
+ it 'passes if there is such a field with value' do
654
681
  expect(html).to have_field('Text field', with: 'some value')
655
682
  end
656
683
 
657
- it "fails if there is no such field" do
684
+ it 'fails if there is no such field' do
658
685
  expect do
659
686
  expect(html).to have_field('No such Field')
660
- end.to raise_error(/expected to find visible field "No such Field"/)
687
+ end.to raise_error(/expected to find field "No such Field"/)
661
688
  end
662
689
 
663
- it "fails if there is such field but with false value" do
690
+ it 'fails if there is such field but with false value' do
664
691
  expect do
665
692
  expect(html).to have_field('Text field', with: 'false value')
666
693
  end.to raise_error(/expected to find visible field "Text field"/)
667
694
  end
668
695
 
669
- it "treats a given value as a string" do
670
- class Foo
696
+ it 'treats a given value as a string' do
697
+ foo = Class.new do
671
698
  def to_s
672
- "some value"
699
+ 'some value'
673
700
  end
674
701
  end
675
- expect(html).to have_field('Text field', with: Foo.new)
702
+ expect(html).to have_field('Text field', with: foo.new)
676
703
  end
677
704
 
678
- it "supports compounding" do
705
+ it 'supports compounding' do
679
706
  expect(html).to have_field('Not this one').or have_field('Text field')
680
707
  end
681
708
  end
682
709
 
683
- describe "have_checked_field matcher" do
710
+ describe 'have_checked_field matcher' do
684
711
  let(:html) do
685
712
  '<label>it is checked<input type="checkbox" checked="checked"/></label>
686
713
  <label>unchecked field<input type="checkbox"/></label>'
687
714
  end
688
715
 
689
- it "gives proper description" do
690
- expect(have_checked_field('it is checked').description).to eq("have visible field \"it is checked\" that is checked and not disabled")
716
+ it 'gives proper description' do
717
+ expect(have_checked_field('it is checked').description).to eq('have visible field "it is checked" that is not disabled that is checked')
691
718
  end
692
719
 
693
- context "with should" do
694
- it "passes if there is such a field and it is checked" do
720
+ context 'with should' do
721
+ it 'passes if there is such a field and it is checked' do
695
722
  expect(html).to have_checked_field('it is checked')
696
723
  end
697
724
 
698
- it "fails if there is such a field but it is not checked" do
725
+ it 'fails if there is such a field but it is not checked' do
699
726
  expect do
700
727
  expect(html).to have_checked_field('unchecked field')
701
728
  end.to raise_error(/expected to find visible field "unchecked field"/)
702
729
  end
703
730
 
704
- it "fails if there is no such field" do
731
+ it 'fails if there is no such field' do
705
732
  expect do
706
733
  expect(html).to have_checked_field('no such field')
707
- end.to raise_error(/expected to find visible field "no such field"/)
734
+ end.to raise_error(/expected to find field "no such field"/)
708
735
  end
709
736
  end
710
737
 
711
- context "with should not" do
712
- it "fails if there is such a field and it is checked" do
738
+ context 'with should not' do
739
+ it 'fails if there is such a field and it is checked' do
713
740
  expect do
714
741
  expect(html).not_to have_checked_field('it is checked')
715
742
  end.to raise_error(/expected not to find visible field "it is checked"/)
716
743
  end
717
744
 
718
- it "passes if there is such a field but it is not checked" do
745
+ it 'passes if there is such a field but it is not checked' do
719
746
  expect(html).not_to have_checked_field('unchecked field')
720
747
  end
721
748
 
722
- it "passes if there is no such field" do
749
+ it 'passes if there is no such field' do
723
750
  expect(html).not_to have_checked_field('no such field')
724
751
  end
725
752
  end
726
753
 
727
- it "supports compounding" do
754
+ it 'supports compounding' do
728
755
  expect(html).to have_checked_field('not this one').or have_checked_field('it is checked')
729
756
  end
730
757
  end
731
758
 
732
- describe "have_unchecked_field matcher" do
759
+ describe 'have_unchecked_field matcher' do
733
760
  let(:html) do
734
761
  '<label>it is checked<input type="checkbox" checked="checked"/></label>
735
762
  <label>unchecked field<input type="checkbox"/></label>'
736
763
  end
737
764
 
738
- it "gives proper description" do
739
- expect(have_unchecked_field('unchecked field').description).to eq("have visible field \"unchecked field\" that is not checked and not disabled")
765
+ it 'gives proper description' do
766
+ expect(have_unchecked_field('unchecked field').description).to eq('have visible field "unchecked field" that is not disabled that is not checked')
740
767
  end
741
768
 
742
- context "with should" do
743
- it "passes if there is such a field and it is not checked" do
769
+ context 'with should' do
770
+ it 'passes if there is such a field and it is not checked' do
744
771
  expect(html).to have_unchecked_field('unchecked field')
745
772
  end
746
773
 
747
- it "fails if there is such a field but it is checked" do
774
+ it 'fails if there is such a field but it is checked' do
748
775
  expect do
749
776
  expect(html).to have_unchecked_field('it is checked')
750
777
  end.to raise_error(/expected to find visible field "it is checked"/)
751
778
  end
752
779
 
753
- it "fails if there is no such field" do
780
+ it 'fails if there is no such field' do
754
781
  expect do
755
782
  expect(html).to have_unchecked_field('no such field')
756
- end.to raise_error(/expected to find visible field "no such field"/)
783
+ end.to raise_error(/expected to find field "no such field"/)
757
784
  end
758
785
  end
759
786
 
760
- context "with should not" do
761
- it "fails if there is such a field and it is not checked" do
787
+ context 'with should not' do
788
+ it 'fails if there is such a field and it is not checked' do
762
789
  expect do
763
790
  expect(html).not_to have_unchecked_field('unchecked field')
764
791
  end.to raise_error(/expected not to find visible field "unchecked field"/)
765
792
  end
766
793
 
767
- it "passes if there is such a field but it is checked" do
794
+ it 'passes if there is such a field but it is checked' do
768
795
  expect(html).not_to have_unchecked_field('it is checked')
769
796
  end
770
797
 
771
- it "passes if there is no such field" do
798
+ it 'passes if there is no such field' do
772
799
  expect(html).not_to have_unchecked_field('no such field')
773
800
  end
774
801
  end
775
802
 
776
- it "supports compounding" do
803
+ it 'supports compounding' do
777
804
  expect(html).to have_unchecked_field('it is checked').or have_unchecked_field('unchecked field')
778
805
  end
779
806
  end
780
807
 
781
- describe "have_select matcher" do
808
+ describe 'have_select matcher' do
782
809
  let(:html) { '<label>Select Box<select></select></label>' }
783
810
 
784
- it "gives proper description" do
785
- expect(have_select('Select Box').description).to eq("have visible select box \"Select Box\" that is not disabled")
811
+ it 'gives proper description' do
812
+ expect(have_select('Select Box').description).to eq('have visible select box "Select Box" that is not disabled')
786
813
  end
787
814
 
788
- it "gives proper description for a given selected value" do
815
+ it 'gives proper description for a given selected value' do
789
816
  expect(have_select('Select Box', selected: 'some value').description).to eq('have visible select box "Select Box" that is not disabled with "some value" selected')
790
817
  end
791
818
 
792
- it "passes if there is such a select" do
819
+ it 'passes if there is such a select' do
793
820
  expect(html).to have_select('Select Box')
794
821
  end
795
822
 
796
- it "fails if there is no such select" do
823
+ it 'fails if there is no such select' do
797
824
  expect do
798
825
  expect(html).to have_select('No such Select box')
799
- end.to raise_error(/expected to find visible select box "No such Select box"/)
826
+ end.to raise_error(/expected to find select box "No such Select box"/)
800
827
  end
801
828
 
802
- it "supports compounding" do
829
+ it 'supports compounding' do
803
830
  expect(html).to have_select('Not this one').or have_select('Select Box')
804
831
  end
805
832
  end
806
833
 
807
- describe "have_table matcher" do
834
+ describe 'have_table matcher' do
808
835
  let(:html) { '<table><caption>Lovely table</caption></table>' }
809
836
 
810
- it "gives proper description" do
811
- expect(have_table('Lovely table').description).to eq("have visible table \"Lovely table\"")
837
+ it 'gives proper description' do
838
+ expect(have_table('Lovely table').description).to eq('have visible table "Lovely table"')
839
+ expect(have_table('Lovely table', caption: 'my caption').description).to eq('have visible table "Lovely table" with caption "my caption"')
812
840
  end
813
841
 
814
- it "gives proper description when :visible option passed" do
815
- expect(have_table('Lovely table', visible: true).description).to eq("have visible table \"Lovely table\"")
816
- expect(have_table('Lovely table', visible: :hidden).description).to eq("have non-visible table \"Lovely table\"")
817
- expect(have_table('Lovely table', visible: :all).description).to eq("have table \"Lovely table\"")
818
- expect(have_table('Lovely table', visible: false).description).to eq("have table \"Lovely table\"")
842
+ it 'gives proper description when :visible option passed' do
843
+ expect(have_table('Lovely table', visible: true).description).to eq('have visible table "Lovely table"') # rubocop:disable RSpec/Capybara/VisibilityMatcher
844
+ expect(have_table('Lovely table', visible: :hidden).description).to eq('have non-visible table "Lovely table"')
845
+ expect(have_table('Lovely table', visible: :all).description).to eq('have table "Lovely table"')
846
+ expect(have_table('Lovely table', visible: false).description).to eq('have table "Lovely table"') # rubocop:disable RSpec/Capybara/VisibilityMatcher
819
847
  end
820
848
 
821
- it "passes if there is such a select" do
849
+ it 'passes if there is such a table' do
822
850
  expect(html).to have_table('Lovely table')
823
851
  end
824
852
 
825
- it "fails if there is no such select" do
853
+ it 'fails if there is no such table' do
826
854
  expect do
827
855
  expect(html).to have_table('No such Table')
828
- end.to raise_error(/expected to find visible table "No such Table"/)
856
+ end.to raise_error(/expected to find table "No such Table"/)
829
857
  end
830
858
 
831
- it "supports compounding" do
859
+ it 'supports compounding' do
832
860
  expect(html).to have_table('nope').or have_table('Lovely table')
833
861
  end
834
862
  end
835
863
 
836
- context "compounding", requires: [:js] do
837
- before(:each) do
838
- @session = session
839
- @session.visit('/with_js')
840
- @el = @session.find(:css, '#reload-me')
864
+ context 'compounding timing' do
865
+ let(:session) { session }
866
+ let(:el) { session.find(:css, '#reload-me') }
867
+
868
+ before do
869
+ session.visit('/with_js')
841
870
  end
842
871
 
843
- context "#and" do
872
+ describe '#and' do
844
873
  it "should run 'concurrently'" do
845
- Capybara.using_wait_time(2) do
874
+ session.using_wait_time(2) do
846
875
  matcher = have_text('this is not there').and have_text('neither is this')
847
876
  expect(Benchmark.realtime do
848
877
  expect do
849
- expect(@el).to matcher
878
+ expect(el).to matcher
850
879
  end.to raise_error RSpec::Expectations::ExpectationNotMetError
851
880
  end).to be_between(2, 3)
852
881
  end
853
882
  end
854
883
 
855
884
  it "should run 'concurrently' and retry" do
856
- @session.click_link('reload-link')
857
- @session.using_wait_time(2) do
885
+ session.click_link('reload-link')
886
+ session.using_wait_time(2) do
858
887
  expect(Benchmark.realtime do
859
888
  expect do
860
- expect(@el).to have_text('waiting to be reloaded').and(have_text('has been reloaded'))
889
+ expect(el).to have_text('waiting to be reloaded').and(have_text('has been reloaded'))
861
890
  end.to raise_error RSpec::Expectations::ExpectationNotMetError, /expected to find text "waiting to be reloaded" in "has been reloaded"/
862
891
  end).to be_between(2, 3)
863
892
  end
864
893
  end
865
894
 
866
- it "should ignore :wait options" do
867
- @session.using_wait_time(2) do
895
+ it 'should ignore :wait options' do
896
+ session.using_wait_time(2) do
868
897
  matcher = have_text('this is not there', wait: 5).and have_text('neither is this', wait: 6)
869
898
  expect(Benchmark.realtime do
870
899
  expect do
871
- expect(@el).to matcher
900
+ expect(el).to matcher
872
901
  end.to raise_error RSpec::Expectations::ExpectationNotMetError
873
902
  end).to be_between(2, 3)
874
903
  end
875
904
  end
876
905
 
877
- it "should work on the session" do
878
- @session.using_wait_time(2) do
879
- @session.click_link('reload-link')
880
- expect(@session).to have_selector(:css, 'h1', text: 'FooBar').and have_text('has been reloaded')
906
+ it 'should work on the session' do
907
+ session.using_wait_time(2) do
908
+ session.click_link('reload-link')
909
+ expect(session).to have_selector(:css, 'h1', text: 'FooBar').and have_text('has been reloaded')
881
910
  end
882
911
  end
883
912
  end
884
913
 
885
- context "#and_then" do
886
- it "should run sequentially" do
887
- @session.click_link('reload-link')
888
- expect(@el).to have_text('waiting to be reloaded').and_then have_text('has been reloaded')
914
+ describe '#and_then' do
915
+ it 'should run sequentially' do
916
+ session.click_link('reload-link')
917
+ expect(el).to have_text('waiting to be reloaded').and_then have_text('has been reloaded')
889
918
  end
890
919
  end
891
920
 
892
- context "#or" do
921
+ describe '#or' do
893
922
  it "should run 'concurrently'" do
894
- @session.using_wait_time(3) do
923
+ session.using_wait_time(3) do
895
924
  expect(Benchmark.realtime do
896
- expect(@el).to have_text('has been reloaded').or have_text('waiting to be reloaded')
925
+ expect(el).to have_text('has been reloaded').or have_text('waiting to be reloaded')
897
926
  end).to be < 1
898
927
  end
899
928
  end
900
929
 
901
- it "should retry" do
902
- @session.using_wait_time(3) do
930
+ it 'should retry' do
931
+ session.using_wait_time(3) do
903
932
  expect(Benchmark.realtime do
904
933
  expect do
905
- expect(@el).to have_text('has been reloaded').or have_text('random stuff')
934
+ expect(el).to have_text('has been reloaded').or have_text('random stuff')
906
935
  end.to raise_error RSpec::Expectations::ExpectationNotMetError
907
936
  end).to be > 3
908
937
  end
909
938
  end
910
939
 
911
- it "should ignore :wait options" do
912
- @session.using_wait_time(2) do
940
+ it 'should ignore :wait options' do
941
+ session.using_wait_time(2) do
913
942
  expect(Benchmark.realtime do
914
943
  expect do
915
- expect(@el).to have_text('this is not there', wait: 10).or have_text('neither is this', wait: 15)
944
+ expect(el).to have_text('this is not there', wait: 10).or have_text('neither is this', wait: 15)
916
945
  end.to raise_error RSpec::Expectations::ExpectationNotMetError
917
946
  end).to be_between(2, 3)
918
947
  end
919
948
  end
920
949
 
921
- it "should work on the session" do
922
- @session.using_wait_time(2) do
923
- @session.click_link('reload-link')
924
- expect(@session).to have_selector(:css, 'h1', text: 'Not on the page').or have_text('has been reloaded')
950
+ it 'should work on the session' do
951
+ session.using_wait_time(2) do
952
+ session.click_link('reload-link')
953
+ expect(session).to have_selector(:css, 'h1', text: 'Not on the page').or have_text('has been reloaded')
925
954
  end
926
955
  end
927
956
  end
928
957
  end
929
958
  end
959
+ # rubocop:enable RSpec/ExpectActual