capybara 2.7.0 → 3.35.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,10 +1,17 @@
1
1
  # frozen_string_literal: true
2
+
3
+ # NOTE: This file uses `sleep` to sync up parts of the tests. This is only implemented like this
4
+ # because of the methods being tested. In tests using Capybara this type of behavior should be implemented
5
+ # using Capybara provided assertions with builtin waiting behavior.
6
+
2
7
  Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
3
- before(:each) do
8
+ before do
4
9
  @window = @session.current_window
5
10
  @session.visit('/with_windows')
11
+ @session.assert_selector(:css, 'body.loaded')
6
12
  end
7
- after(:each) do
13
+
14
+ after do
8
15
  (@session.windows - [@window]).each do |w|
9
16
  @session.switch_to_window w
10
17
  w.close
@@ -12,21 +19,21 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
12
19
  @session.switch_to_window(@window)
13
20
  end
14
21
 
15
- let(:zero_windows_message) { "block passed to #window_opened_by opened 0 windows instead of 1" }
16
- let(:two_windows_message) { "block passed to #window_opened_by opened 2 windows instead of 1" }
22
+ let(:zero_windows_message) { 'block passed to #window_opened_by opened 0 windows instead of 1' }
23
+ let(:two_windows_message) { 'block passed to #window_opened_by opened 2 windows instead of 1' }
17
24
 
18
25
  context 'with :wait option' do
19
26
  it 'should raise error if value of :wait is less than timeout' do
20
27
  # So large value is used as `driver.window_handles` takes up to 800 ms on Travis
21
28
  Capybara.using_wait_time 2 do
22
- button=@session.find(:css, '#openWindowWithLongerTimeout')
29
+ button = @session.find(:css, '#openWindowWithLongerTimeout')
23
30
  expect do
24
- @session.window_opened_by(wait: 0.8) do
31
+ @session.window_opened_by(wait: 0.3) do
25
32
  button.click
26
33
  end
27
34
  end.to raise_error(Capybara::WindowError, zero_windows_message)
28
35
  end
29
- @session.document.synchronize(2, errors: [Capybara::CapybaraError]) do
36
+ @session.document.synchronize(5, errors: [Capybara::CapybaraError]) do
30
37
  raise Capybara::CapybaraError if @session.windows.size != 2
31
38
  end
32
39
  end
@@ -45,7 +52,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
45
52
  context 'without :wait option' do
46
53
  it 'should raise error if default_max_wait_time is less than timeout' do
47
54
  button = @session.find(:css, '#openWindowWithTimeout')
48
- Capybara.using_wait_time 0.4 do
55
+ Capybara.using_wait_time 0.1 do
49
56
  expect do
50
57
  @session.window_opened_by do
51
58
  button.click
@@ -59,7 +66,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
59
66
 
60
67
  it 'should find window if default_max_wait_time is more than timeout' do
61
68
  button = @session.find(:css, '#openWindowWithTimeout')
62
- Capybara.using_wait_time 1.5 do
69
+ Capybara.using_wait_time 5 do
63
70
  window = @session.window_opened_by do
64
71
  button.click
65
72
  end
@@ -73,7 +80,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
73
80
  expect do
74
81
  @session.window_opened_by do
75
82
  button.click
76
- sleep 0.1 # It's possible for window_opened_by to be fullfilled before the second window opens
83
+ sleep 1 # It's possible for window_opened_by to be fullfilled before the second window opens
77
84
  end
78
85
  end.to raise_error(Capybara::WindowError, two_windows_message)
79
86
  @session.document.synchronize(2, errors: [Capybara::CapybaraError]) do
@@ -1,155 +1,203 @@
1
1
  # frozen_string_literal: true
2
+
3
+ # NOTE: This file uses `sleep` to sync up parts of the tests. This is only implemented like this
4
+ # because of the methods being tested. In tests using Capybara this type of behavior should be implemented
5
+ # using Capybara provided assertions with builtin waiting behavior.
6
+
2
7
  Capybara::SpecHelper.spec Capybara::Window, requires: [:windows] do
3
- before(:each) do
4
- @window = @session.current_window
8
+ let!(:orig_window) { @session.current_window }
9
+ before do
5
10
  @session.visit('/with_windows')
6
11
  end
7
- after(:each) do
8
- (@session.windows - [@window]).each do |w|
12
+
13
+ after do
14
+ (@session.windows - [orig_window]).each do |w|
9
15
  @session.switch_to_window w
10
16
  w.close
11
17
  end
12
- @session.switch_to_window(@window)
18
+ @session.switch_to_window(orig_window)
13
19
  end
14
20
 
15
21
  describe '#exists?' do
16
- before(:each) do
17
- @other_window = @session.window_opened_by do
22
+ it 'should become false after window was closed' do
23
+ other_window = @session.window_opened_by do
18
24
  @session.find(:css, '#openWindow').click
19
25
  end
20
- end
21
26
 
22
- it "should become false after window was closed" do
23
27
  expect do
24
- @session.switch_to_window @other_window
25
- @other_window.close
26
- end.to change { @other_window.exists? }.from(true).to(false)
28
+ @session.switch_to_window other_window
29
+ other_window.close
30
+ end.to change(other_window, :exists?).from(true).to(false)
27
31
  end
28
32
  end
29
33
 
30
34
  describe '#closed?' do
31
- it "should become true after window was closed" do
32
- @other_window = @session.window_opened_by do
35
+ it 'should become true after window was closed' do
36
+ other_window = @session.window_opened_by do
33
37
  @session.find(:css, '#openWindow').click
34
38
  end
35
39
  expect do
36
- @session.switch_to_window @other_window
37
- @other_window.close
38
- end.to change { @other_window.closed? }.from(false).to(true)
40
+ @session.switch_to_window other_window
41
+ other_window.close
42
+ end.to change { other_window.closed? }.from(false).to(true)
39
43
  end
40
44
  end
41
45
 
42
46
  describe '#current?' do
43
- before(:each) do
44
- @other_window = @session.window_opened_by do
47
+ let(:other_window) do
48
+ @session.window_opened_by do
45
49
  @session.find(:css, '#openWindow').click
46
50
  end
47
51
  end
48
52
 
49
53
  it 'should become true after switching to window' do
50
54
  expect do
51
- @session.switch_to_window(@other_window)
52
- end.to change { @other_window.current? }.from(false).to(true)
55
+ @session.switch_to_window(other_window)
56
+ end.to change(other_window, :current?).from(false).to(true)
53
57
  end
54
58
 
55
59
  it 'should return false if window is closed' do
56
- @session.switch_to_window(@other_window)
57
- @other_window.close
58
- expect(@other_window.current?).to eq(false)
60
+ @session.switch_to_window(other_window)
61
+ other_window.close
62
+ expect(other_window.current?).to eq(false)
59
63
  end
60
64
  end
61
65
 
62
66
  describe '#close' do
63
- before(:each) do
64
- @other_window = @session.window_opened_by do
67
+ let!(:other_window) do
68
+ @session.window_opened_by do
65
69
  @session.find(:css, '#openWindow').click
66
70
  end
67
71
  end
68
72
 
69
73
  it 'should switch to original window if invoked not for current window' do
70
74
  expect(@session.windows.size).to eq(2)
71
- expect(@session.current_window).to eq(@window)
72
- @other_window.close
75
+ expect(@session.current_window).to eq(orig_window)
76
+ other_window.close
73
77
  expect(@session.windows.size).to eq(1)
74
- expect(@session.current_window).to eq(@window)
78
+ expect(@session.current_window).to eq(orig_window)
75
79
  end
76
80
 
77
81
  it 'should make subsequent invocations of other methods raise no_such_window_error if invoked for current window' do
78
- @session.switch_to_window(@other_window)
79
- expect(@session.current_window).to eq(@other_window)
80
- @other_window.close
82
+ @session.switch_to_window(other_window)
83
+ expect(@session.current_window).to eq(other_window)
84
+ other_window.close
81
85
  expect do
82
86
  @session.find(:css, '#some_id')
83
87
  end.to raise_error(@session.driver.no_such_window_error)
84
- @session.switch_to_window(@window)
88
+ @session.switch_to_window(orig_window)
85
89
  end
86
90
  end
87
91
 
88
92
  describe '#size' do
89
- it 'should return size of whole window', requires: [:windows, :js] do
90
- expect(@session.current_window.size).to eq @session.evaluate_script("[window.outerWidth, window.outerHeight];")
93
+ def win_size
94
+ @session.evaluate_script('[window.outerWidth || window.innerWidth, window.outerHeight || window.innerHeight]')
95
+ end
96
+
97
+ it 'should return size of whole window', requires: %i[windows js] do
98
+ expect(@session.current_window.size).to eq win_size
91
99
  end
92
100
 
93
101
  it 'should switch to original window if invoked not for current window' do
94
- @other_window = @session.window_opened_by do
102
+ other_window = @session.window_opened_by do
95
103
  @session.find(:css, '#openWindow').click
96
104
  end
97
- size =
98
- @session.within_window @other_window do
99
- @session.evaluate_script("[window.outerWidth, window.outerHeight];")
100
- end
101
- expect(@other_window.size).to eq(size)
102
- expect(@session.current_window).to eq(@window)
105
+ sleep 1
106
+ size = @session.within_window(other_window) do
107
+ win_size
108
+ end
109
+ expect(other_window.size).to eq(size)
110
+ expect(@session.current_window).to eq(orig_window)
103
111
  end
104
112
  end
105
113
 
106
114
  describe '#resize_to' do
107
- it 'should be able to resize window', requires: [:windows, :js] do
115
+ let!(:initial_size) { @session.current_window.size }
108
116
 
109
- width, height = @session.evaluate_script("[window.outerWidth, window.outerHeight];")
110
- @session.current_window.resize_to(width-10, height-10)
111
- expect(@session.evaluate_script("[window.outerWidth, window.outerHeight];")).to eq([width-10, height-10])
117
+ after do
118
+ @session.current_window.resize_to(*initial_size)
119
+ sleep 1
112
120
  end
113
121
 
114
- it 'should stay on current window if invoked not for current window', requires: [:windows, :js] do
122
+ it 'should be able to resize window', requires: %i[windows js] do
123
+ width, height = initial_size
124
+ @session.current_window.resize_to(width - 100, height - 100)
125
+ sleep 1
126
+ expect(@session.current_window.size).to eq([width - 100, height - 100])
127
+ end
115
128
 
116
- @other_window = @session.window_opened_by do
129
+ it 'should stay on current window if invoked not for current window', requires: %i[windows js] do
130
+ other_window = @session.window_opened_by do
117
131
  @session.find(:css, '#openWindow').click
118
132
  end
119
- @other_window.resize_to(400, 300)
120
- expect(@session.current_window).to eq(@window)
121
133
 
122
- # #size returns values larger than availWidth, availHeight with Chromedriver
123
- # expect(@other_window.size).to eq([400, 300])
124
- @session.within_window(@other_window) do
125
- expect(@session.evaluate_script("[window.outerWidth, window.outerHeight]")).to eq([400,300])
134
+ other_window.resize_to(600, 400)
135
+ expect(@session.current_window).to eq(orig_window)
136
+
137
+ @session.within_window(other_window) do
138
+ expect(@session.current_window.size).to eq([600, 400])
126
139
  end
127
140
  end
128
141
  end
129
142
 
130
143
  describe '#maximize' do
131
- it 'should be able to maximize window', requires: [:windows, :js] do
132
- screen_width, screen_height = @session.evaluate_script("[window.screen.availWidth, window.screen.availHeight];")
133
- window = @session.current_window
134
- window.resize_to(screen_width-100, screen_height-100)
135
- expect(@session.evaluate_script("[window.outerWidth, window.outerHeight];")).to eq([screen_width-100, screen_height-100])
136
- window.maximize
137
- sleep 0.5 # The timing on maximize is finicky on Travis -- wait a bit for maximize to occur
138
- expect(@session.evaluate_script("[window.outerWidth, window.outerHeight];")).to eq([screen_width, screen_height])
139
- end
140
-
141
- it 'should stay on current window if invoked not for current window', requires: [:windows, :js] do
142
- @other_window = @session.window_opened_by do
144
+ let! :initial_size do
145
+ @session.current_window.size
146
+ end
147
+
148
+ after do
149
+ @session.current_window.resize_to(*initial_size)
150
+ sleep 0.5
151
+ end
152
+
153
+ it 'should be able to maximize window', requires: %i[windows js] do
154
+ start_width, start_height = 400, 300
155
+ @session.current_window.resize_to(start_width, start_height)
156
+ sleep 0.5
157
+
158
+ @session.current_window.maximize
159
+ sleep 0.5 # The timing on maximize is finicky on Travis -- wait a bit for maximize to occur
160
+
161
+ max_width, max_height = @session.current_window.size
162
+
163
+ # maximize behavior is window manage dependant, so just make sure it increases in size
164
+ expect(max_width).to be > start_width
165
+ expect(max_height).to be > start_height
166
+ end
167
+
168
+ it 'should stay on current window if invoked not for current window', requires: %i[windows js] do
169
+ other_window = @session.window_opened_by do
143
170
  @session.find(:css, '#openWindow').click
144
171
  end
145
- @other_window.maximize
172
+ other_window.resize_to(400, 300)
173
+ sleep 0.5
174
+ other_window.maximize
146
175
  sleep 0.5 # The timing on maximize is finicky on Travis -- wait a bit for maximize to occur
147
- expect(@session.current_window).to eq(@window)
148
- # #size returns values larger than availWidth, availHeight with Chromedriver
149
- # expect(@other_window.size).to eq(@session.evaluate_script("[window.screen.availWidth, window.screen.availHeight];"))
150
- @session.within_window(@other_window) do
151
- expect(@session.evaluate_script("[window.outerWidth, window.outerHeight]")).to eq(@session.evaluate_script("[window.screen.availWidth, window.screen.availHeight];"))
152
- end
176
+
177
+ expect(@session.current_window).to eq(orig_window)
178
+ # Maximizing the browser affects all tabs so this may not be valid in real browsers
179
+ # expect(@session.current_window.size).to eq(initial_size)
180
+
181
+ ow_width, ow_height = other_window.size
182
+ expect(ow_width).to be > 400
183
+ expect(ow_height).to be > 300
184
+ end
185
+ end
186
+
187
+ describe '#fullscreen' do
188
+ let! :initial_size do
189
+ @session.current_window.size
190
+ end
191
+
192
+ after do
193
+ @session.current_window.resize_to(*initial_size)
194
+ sleep 1
195
+ end
196
+
197
+ it 'should be able to fullscreen the window' do
198
+ expect do
199
+ @session.current_window.fullscreen
200
+ end.not_to raise_error
153
201
  end
154
202
  end
155
203
  end
@@ -1,6 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
3
+ # NOTE: This file uses `sleep` to sync up parts of the tests. This is only implemented like this
4
+ # because of the methods being tested. In tests using Capybara this type of behavior should be implemented
5
+ # using Capybara provided assertions with builtin waiting behavior.
6
+
2
7
  Capybara::SpecHelper.spec '#windows', requires: [:windows] do
3
- before(:each) do
8
+ before do
4
9
  @window = @session.current_window
5
10
  @session.visit('/with_windows')
6
11
  @session.find(:css, '#openTwoWindows').click
@@ -9,11 +14,9 @@ Capybara::SpecHelper.spec '#windows', requires: [:windows] do
9
14
  raise Capybara::CapybaraError if @session.windows.size != 3
10
15
  end
11
16
  end
12
- after(:each) do
13
- (@session.windows - [@window]).each do |w|
14
- @session.switch_to_window w
15
- w.close
16
- end
17
+
18
+ after do
19
+ (@session.windows - [@window]).each(&:close)
17
20
  @session.switch_to_window(@window)
18
21
  end
19
22
 
@@ -21,12 +24,11 @@ Capybara::SpecHelper.spec '#windows', requires: [:windows] do
21
24
  expect(@session.windows.map { |window| window.instance_of?(Capybara::Window) }).to eq([true] * 3)
22
25
  end
23
26
 
24
- it 'should switchable windows' do
27
+ it 'should be able to switch to windows' do
28
+ sleep 1 # give windows enough time to fully load
25
29
  titles = @session.windows.map do |window|
26
30
  @session.within_window(window) { @session.title }
27
31
  end
28
- expect(titles).to match_array([
29
- 'With Windows', 'Title of the first popup', 'Title of popup two'
30
- ])
32
+ expect(titles).to match_array(['With Windows', 'Title of the first popup', 'Title of popup two'])
31
33
  end
32
34
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
3
- before(:each) do
4
+ before do
4
5
  @window = @session.current_window
5
6
  @session.visit('/with_windows')
6
7
  @session.find(:css, '#openTwoWindows').click
@@ -9,7 +10,8 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
9
10
  raise Capybara::CapybaraError if @session.windows.size != 3
10
11
  end
11
12
  end
12
- after(:each) do
13
+
14
+ after do
13
15
  (@session.windows - [@window]).each do |w|
14
16
  @session.switch_to_window w
15
17
  w.close
@@ -17,33 +19,32 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
17
19
  @session.switch_to_window(@window)
18
20
  end
19
21
 
20
- context "with an instance of Capybara::Window" do
21
- it "should not invoke driver#switch_to_window when given current window" do
22
- # switch_to_window is invoked in after hook
23
- expect(@session.driver).to receive(:switch_to_window).exactly(3).times.and_call_original
22
+ context 'with an instance of Capybara::Window' do
23
+ it 'should not invoke driver#switch_to_window when given current window' do
24
+ allow(@session.driver).to receive(:switch_to_window).and_call_original
24
25
  @session.within_window @window do
25
26
  expect(@session.title).to eq('With Windows')
26
27
  end
28
+ expect(@session.driver).not_to have_received(:switch_to_window)
27
29
  end
28
30
 
29
- it "should be able to switch to another window" do
31
+ it 'should be able to switch to another window' do
30
32
  window = (@session.windows - [@window]).first
31
- expect(@session.driver).to receive(:switch_to_window).exactly(5).times.and_call_original
32
33
  @session.within_window window do
33
- expect(['Title of the first popup', 'Title of popup two']).to include(@session.title)
34
+ expect(@session).to have_title(/Title of the first popup|Title of popup two/)
34
35
  end
35
36
  expect(@session.title).to eq('With Windows')
36
37
  end
37
38
 
38
- it "returns value from the block" do
39
+ it 'returns value from the block' do
39
40
  window = (@session.windows - [@window]).first
40
41
  value = @session.within_window window do
41
- 43252003274489856000
42
- end
42
+ 43252003274489856000
43
+ end
43
44
  expect(value).to eq(43252003274489856000)
44
45
  end
45
46
 
46
- it "should switch back if exception was raised inside block" do
47
+ it 'should switch back if exception was raised inside block' do
47
48
  window = (@session.windows - [@window]).first
48
49
  expect do
49
50
  @session.within_window(window) do
@@ -57,10 +58,10 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
57
58
  expect(@session.send(:scopes)).to eq([nil])
58
59
  end
59
60
 
60
- it "should leave correct scopes after execution in case of error" do
61
+ it 'should leave correct scopes after execution in case of error', requires: %i[windows frames] do
61
62
  window = (@session.windows - [@window]).first
62
63
  expect do
63
- @session.within 'html' do
64
+ @session.within_frame 'frameOne' do
64
65
  @session.within_window(window) {}
65
66
  end
66
67
  end.to raise_error(Capybara::ScopeError)
@@ -85,103 +86,72 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
85
86
  end
86
87
  end
87
88
 
88
- context "with lambda" do
89
- it "should find the div in another window" do
90
- @session.within_window(->{ @session.title == 'Title of the first popup'}) do
89
+ context 'with lambda' do
90
+ it 'should find the div in another window' do
91
+ @session.within_window(-> { @session.title == 'Title of the first popup' }) do
91
92
  expect(@session).to have_css('#divInPopupOne')
92
93
  end
93
94
  end
94
95
 
95
- it "should find divs in both windows" do
96
- @session.within_window(->{ @session.title == 'Title of popup two'}) do
96
+ it 'should find divs in both windows' do
97
+ @session.within_window(-> { @session.title == 'Title of popup two' }) do
97
98
  expect(@session).to have_css('#divInPopupTwo')
98
99
  end
99
- @session.within_window(->{ @session.title == 'Title of the first popup'}) do
100
+ @session.within_window(-> { @session.title == 'Title of the first popup' }) do
100
101
  expect(@session).to have_css('#divInPopupOne')
101
102
  end
102
103
  expect(@session.title).to eq('With Windows')
103
104
  end
104
105
 
105
- it "should raise error if window wasn't found" do
106
- expect do
107
- @session.within_window(->{ @session.title == 'Invalid title'}) do
106
+ it 'should be able to nest within_window' do
107
+ @session.within_window(-> { @session.title == 'Title of popup two' }) do
108
+ expect(@session).to have_css('#divInPopupTwo')
109
+ @session.within_window(-> { @session.title == 'Title of the first popup' }) do
108
110
  expect(@session).to have_css('#divInPopupOne')
109
111
  end
110
- end.to raise_error(Capybara::WindowError, "Could not find a window matching block/lambda")
111
- expect(@session.current_window).to eq(@window)
112
- expect(@session).to have_css('#doesNotOpenWindows')
113
- expect(@session.send(:scopes)).to eq([nil])
112
+ expect(@session).to have_css('#divInPopupTwo')
113
+ expect(@session).not_to have_css('divInPopupOne')
114
+ end
115
+ expect(@session).not_to have_css('#divInPopupTwo')
116
+ expect(@session).not_to have_css('divInPopupOne')
117
+ expect(@session.title).to eq('With Windows')
114
118
  end
115
119
 
116
- it "returns value from the block" do
117
- value = @session.within_window(->{ @session.title == 'Title of popup two'}) do
118
- 42
119
- end
120
- expect(value).to eq(42)
120
+ it 'should work inside a normal scope' do
121
+ expect(@session).to have_css('#openWindow')
122
+ @session.within(:css, '#scope') do
123
+ @session.within_window(-> { @session.title == 'Title of the first popup' }) do
124
+ expect(@session).to have_css('#divInPopupOne')
125
+ end
126
+ expect(@session).to have_content('My scoped content')
127
+ expect(@session).not_to have_css('#openWindow')
128
+ end
121
129
  end
122
130
 
123
- it "should switch back if exception was raised inside block" do
131
+ it "should raise error if window wasn't found" do
124
132
  expect do
125
- @session.within_window(->{ @session.title == 'Title of popup two'}) do
126
- raise 'some error'
133
+ @session.within_window(-> { @session.title == 'Invalid title' }) do
134
+ expect(@session).to have_css('#divInPopupOne')
127
135
  end
128
- end.to raise_error(StandardError, 'some error')
136
+ end.to raise_error(Capybara::WindowError, 'Could not find a window matching block/lambda')
129
137
  expect(@session.current_window).to eq(@window)
138
+ expect(@session).to have_css('#doesNotOpenWindows')
130
139
  expect(@session.send(:scopes)).to eq([nil])
131
140
  end
132
- end
133
141
 
134
- context "with string" do
135
- it "should warn" do
136
- expect(@session).to receive(:warn).with(/DEPRECATION WARNING/).and_call_original
137
- @session.within_window('firstPopup') {}
138
- end
139
-
140
- it "should find window by handle" do
141
- window = (@session.windows - [@window]).first
142
- @session.within_window window.handle do
143
- expect(['Title of the first popup', 'Title of popup two']).to include(@session.title)
144
- end
142
+ it 'returns value from the block' do
143
+ value = @session.within_window(-> { @session.title == 'Title of popup two' }) { 42 }
144
+ expect(value).to eq(42)
145
145
  end
146
146
 
147
- it "should find the div in firstPopup" do
148
- @session.within_window("firstPopup") do
149
- expect(@session.find("//*[@id='divInPopupOne']").text).to eq 'This is the text of divInPopupOne'
150
- end
151
- end
152
- it "should find the div in secondPopup" do
153
- @session.within_window("secondPopup") do
154
- expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
155
- end
156
- end
157
- it "should find the divs in both popups" do
158
- @session.within_window("secondPopup") do
159
- expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
160
- end
161
- @session.within_window("firstPopup") do
162
- expect(@session.find("//*[@id='divInPopupOne']").text).to eq 'This is the text of divInPopupOne'
163
- end
164
- end
165
- it "should find the div in the main window after finding a div in a popup" do
166
- @session.within_window("secondPopup") do
167
- expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
168
- end
169
- expect(@session.find("//*[@id='doesNotOpenWindows']").text).to eq 'Does not open windows'
170
- end
171
- it "should reset scope when switching windows" do
172
- @session.within(:css, '#doesNotOpenWindows') do
173
- @session.within_window("secondPopup") do
174
- expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
175
- end
176
- end
177
- end
178
- it "should switch back if exception was raised inside block" do
147
+ it 'should switch back if exception was raised inside block' do
179
148
  expect do
180
- @session.within_window('secondPopup') do
149
+ @session.within_window(-> { @session.title == 'Title of popup two' }) do
181
150
  raise 'some error'
182
151
  end
183
152
  end.to raise_error(StandardError, 'some error')
184
153
  expect(@session.current_window).to eq(@window)
154
+ expect(@session.send(:scopes)).to eq([nil])
185
155
  end
186
156
  end
187
157
  end