capybara 2.6.2 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +40 -15
  3. data/README.md +45 -38
  4. data/lib/capybara.rb +86 -10
  5. data/lib/capybara/cucumber.rb +1 -0
  6. data/lib/capybara/driver/base.rb +5 -2
  7. data/lib/capybara/driver/node.rb +1 -0
  8. data/lib/capybara/dsl.rb +1 -0
  9. data/lib/capybara/helpers.rb +3 -2
  10. data/lib/capybara/node/actions.rb +6 -0
  11. data/lib/capybara/node/base.rb +1 -0
  12. data/lib/capybara/node/document.rb +1 -0
  13. data/lib/capybara/node/document_matchers.rb +1 -0
  14. data/lib/capybara/node/element.rb +1 -0
  15. data/lib/capybara/node/finders.rb +3 -2
  16. data/lib/capybara/node/matchers.rb +72 -2
  17. data/lib/capybara/node/simple.rb +6 -3
  18. data/lib/capybara/queries/base_query.rb +1 -0
  19. data/lib/capybara/queries/current_path_query.rb +1 -0
  20. data/lib/capybara/queries/match_query.rb +21 -0
  21. data/lib/capybara/queries/selector_query.rb +138 -0
  22. data/lib/capybara/queries/text_query.rb +1 -0
  23. data/lib/capybara/queries/title_query.rb +1 -0
  24. data/lib/capybara/query.rb +3 -131
  25. data/lib/capybara/rack_test/browser.rb +1 -0
  26. data/lib/capybara/rack_test/css_handlers.rb +1 -0
  27. data/lib/capybara/rack_test/driver.rb +6 -4
  28. data/lib/capybara/rack_test/form.rb +1 -0
  29. data/lib/capybara/rack_test/node.rb +1 -0
  30. data/lib/capybara/rails.rb +2 -1
  31. data/lib/capybara/result.rb +1 -0
  32. data/lib/capybara/rspec.rb +1 -0
  33. data/lib/capybara/rspec/features.rb +1 -0
  34. data/lib/capybara/rspec/matchers.rb +54 -3
  35. data/lib/capybara/selector.rb +175 -75
  36. data/lib/capybara/selector/filter.rb +48 -0
  37. data/lib/capybara/selenium/driver.rb +24 -7
  38. data/lib/capybara/selenium/node.rb +1 -0
  39. data/lib/capybara/server.rb +38 -6
  40. data/lib/capybara/session.rb +30 -14
  41. data/lib/capybara/session/matchers.rb +2 -1
  42. data/lib/capybara/spec/public/test.js +6 -0
  43. data/lib/capybara/spec/session/accept_alert_spec.rb +2 -1
  44. data/lib/capybara/spec/session/accept_confirm_spec.rb +2 -1
  45. data/lib/capybara/spec/session/accept_prompt_spec.rb +2 -1
  46. data/lib/capybara/spec/session/all_spec.rb +1 -0
  47. data/lib/capybara/spec/session/assert_current_path.rb +1 -0
  48. data/lib/capybara/spec/session/assert_selector.rb +1 -0
  49. data/lib/capybara/spec/session/assert_text.rb +1 -0
  50. data/lib/capybara/spec/session/assert_title.rb +1 -0
  51. data/lib/capybara/spec/session/attach_file_spec.rb +1 -0
  52. data/lib/capybara/spec/session/body_spec.rb +1 -0
  53. data/lib/capybara/spec/session/check_spec.rb +1 -0
  54. data/lib/capybara/spec/session/choose_spec.rb +1 -0
  55. data/lib/capybara/spec/session/click_button_spec.rb +1 -0
  56. data/lib/capybara/spec/session/click_link_or_button_spec.rb +1 -0
  57. data/lib/capybara/spec/session/click_link_spec.rb +1 -0
  58. data/lib/capybara/spec/session/current_scope_spec.rb +2 -1
  59. data/lib/capybara/spec/session/current_url_spec.rb +1 -0
  60. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +2 -1
  61. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -1
  62. data/lib/capybara/spec/session/element/assert_match_selector.rb +31 -0
  63. data/lib/capybara/spec/session/element/match_css_spec.rb +17 -0
  64. data/lib/capybara/spec/session/element/match_xpath_spec.rb +23 -0
  65. data/lib/capybara/spec/session/element/matches_selector_spec.rb +63 -0
  66. data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -0
  67. data/lib/capybara/spec/session/execute_script_spec.rb +1 -0
  68. data/lib/capybara/spec/session/fill_in_spec.rb +1 -0
  69. data/lib/capybara/spec/session/find_button_spec.rb +1 -0
  70. data/lib/capybara/spec/session/find_by_id_spec.rb +1 -0
  71. data/lib/capybara/spec/session/find_field_spec.rb +1 -0
  72. data/lib/capybara/spec/session/find_link_spec.rb +1 -0
  73. data/lib/capybara/spec/session/find_spec.rb +1 -0
  74. data/lib/capybara/spec/session/first_spec.rb +1 -0
  75. data/lib/capybara/spec/session/go_back_spec.rb +1 -0
  76. data/lib/capybara/spec/session/go_forward_spec.rb +1 -0
  77. data/lib/capybara/spec/session/has_button_spec.rb +1 -0
  78. data/lib/capybara/spec/session/has_css_spec.rb +1 -0
  79. data/lib/capybara/spec/session/has_current_path_spec.rb +1 -0
  80. data/lib/capybara/spec/session/has_field_spec.rb +13 -0
  81. data/lib/capybara/spec/session/has_link_spec.rb +1 -0
  82. data/lib/capybara/spec/session/has_select_spec.rb +19 -0
  83. data/lib/capybara/spec/session/has_selector_spec.rb +6 -0
  84. data/lib/capybara/spec/session/has_table_spec.rb +1 -0
  85. data/lib/capybara/spec/session/has_text_spec.rb +1 -0
  86. data/lib/capybara/spec/session/has_title_spec.rb +1 -0
  87. data/lib/capybara/spec/session/has_xpath_spec.rb +1 -0
  88. data/lib/capybara/spec/session/headers.rb +1 -0
  89. data/lib/capybara/spec/session/html_spec.rb +1 -0
  90. data/lib/capybara/spec/session/node_spec.rb +29 -0
  91. data/lib/capybara/spec/session/reset_session_spec.rb +35 -1
  92. data/lib/capybara/spec/session/response_code.rb +1 -0
  93. data/lib/capybara/spec/session/save_and_open_page_spec.rb +1 -0
  94. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +3 -2
  95. data/lib/capybara/spec/session/save_page_spec.rb +34 -2
  96. data/lib/capybara/spec/session/save_screenshot_spec.rb +31 -1
  97. data/lib/capybara/spec/session/screenshot_spec.rb +3 -1
  98. data/lib/capybara/spec/session/select_spec.rb +1 -0
  99. data/lib/capybara/spec/session/selectors_spec.rb +35 -0
  100. data/lib/capybara/spec/session/text_spec.rb +1 -0
  101. data/lib/capybara/spec/session/title_spec.rb +2 -1
  102. data/lib/capybara/spec/session/uncheck_spec.rb +1 -0
  103. data/lib/capybara/spec/session/unselect_spec.rb +1 -0
  104. data/lib/capybara/spec/session/visit_spec.rb +1 -0
  105. data/lib/capybara/spec/session/window/become_closed_spec.rb +1 -0
  106. data/lib/capybara/spec/session/window/current_window_spec.rb +1 -0
  107. data/lib/capybara/spec/session/window/open_new_window_spec.rb +1 -0
  108. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +1 -0
  109. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +1 -0
  110. data/lib/capybara/spec/session/window/window_spec.rb +1 -8
  111. data/lib/capybara/spec/session/window/windows_spec.rb +1 -0
  112. data/lib/capybara/spec/session/window/within_window_spec.rb +2 -3
  113. data/lib/capybara/spec/session/within_frame_spec.rb +1 -0
  114. data/lib/capybara/spec/session/within_spec.rb +1 -0
  115. data/lib/capybara/spec/spec_helper.rb +2 -0
  116. data/lib/capybara/spec/test_app.rb +1 -0
  117. data/lib/capybara/spec/views/buttons.erb +1 -0
  118. data/lib/capybara/spec/views/fieldsets.erb +2 -1
  119. data/lib/capybara/spec/views/form.erb +24 -0
  120. data/lib/capybara/spec/views/frame_child.erb +2 -1
  121. data/lib/capybara/spec/views/frame_one.erb +2 -1
  122. data/lib/capybara/spec/views/frame_parent.erb +2 -1
  123. data/lib/capybara/spec/views/frame_two.erb +2 -1
  124. data/lib/capybara/spec/views/header_links.erb +1 -0
  125. data/lib/capybara/spec/views/host_links.erb +1 -0
  126. data/lib/capybara/spec/views/path.erb +1 -0
  127. data/lib/capybara/spec/views/popup_one.erb +1 -0
  128. data/lib/capybara/spec/views/popup_two.erb +1 -0
  129. data/lib/capybara/spec/views/postback.erb +2 -1
  130. data/lib/capybara/spec/views/tables.erb +1 -0
  131. data/lib/capybara/spec/views/with_base_tag.erb +1 -0
  132. data/lib/capybara/spec/views/with_count.erb +2 -1
  133. data/lib/capybara/spec/views/with_hover.erb +2 -1
  134. data/lib/capybara/spec/views/with_html.erb +3 -0
  135. data/lib/capybara/spec/views/with_html_entities.erb +1 -0
  136. data/lib/capybara/spec/views/with_js.erb +5 -0
  137. data/lib/capybara/spec/views/with_scope.erb +1 -0
  138. data/lib/capybara/spec/views/with_simple_html.erb +2 -1
  139. data/lib/capybara/spec/views/with_slow_unload.erb +17 -0
  140. data/lib/capybara/spec/views/with_title.erb +2 -1
  141. data/lib/capybara/spec/views/with_unload_alert.erb +12 -0
  142. data/lib/capybara/spec/views/with_windows.erb +1 -0
  143. data/lib/capybara/spec/views/within_frames.erb +2 -1
  144. data/lib/capybara/version.rb +2 -1
  145. data/lib/capybara/window.rb +1 -0
  146. data/spec/basic_node_spec.rb +1 -0
  147. data/spec/capybara_spec.rb +28 -1
  148. data/spec/dsl_spec.rb +1 -0
  149. data/spec/fixtures/selenium_driver_rspec_failure.rb +1 -0
  150. data/spec/fixtures/selenium_driver_rspec_success.rb +1 -0
  151. data/spec/rack_test_spec.rb +1 -0
  152. data/spec/result_spec.rb +1 -0
  153. data/spec/rspec/features_spec.rb +1 -0
  154. data/spec/rspec/matchers_spec.rb +1 -0
  155. data/spec/rspec/scenarios_spec.rb +1 -0
  156. data/spec/rspec/views_spec.rb +1 -0
  157. data/spec/rspec_spec.rb +1 -0
  158. data/spec/selector_spec.rb +55 -1
  159. data/spec/selenium_spec.rb +6 -2
  160. data/spec/selenium_spec_chrome.rb +1 -0
  161. data/spec/server_spec.rb +101 -13
  162. data/spec/spec_helper.rb +1 -0
  163. metadata +16 -6
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "capybara/spec/test_app"
2
3
 
3
4
  Capybara::SpecHelper.spec '#current_url, #current_path, #current_host' do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#dismiss_confirm', :requires => [:modals] do
2
3
  before do
3
4
  @session.visit('/with_js')
@@ -32,4 +33,4 @@ Capybara::SpecHelper.spec '#dismiss_confirm', :requires => [:modals] do
32
33
  end
33
34
  expect(message).to eq('Confirm opened')
34
35
  end
35
- end
36
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#dismiss_prompt', :requires => [:modals] do
2
3
  before do
3
4
  @session.visit('/with_js')
@@ -16,4 +17,4 @@ Capybara::SpecHelper.spec '#dismiss_prompt', :requires => [:modals] do
16
17
  end
17
18
  expect(message).to eq('Prompt opened')
18
19
  end
19
- end
20
+ end
@@ -0,0 +1,31 @@
1
+ Capybara::SpecHelper.spec '#assert_matches_selector' do
2
+ before do
3
+ @session.visit('/with_html')
4
+ @element = @session.find(:css, 'span', text: '42')
5
+ end
6
+
7
+ it "should be true if the given selector matches the element" do
8
+ expect(@element.assert_matches_selector(:css, '.number')).to be true
9
+ end
10
+
11
+ it "should be false if the given selector does not match the element" do
12
+ expect { @element.assert_matches_selector(:css, '.not_number') }.to raise_error(Capybara::ElementNotFound)
13
+ end
14
+
15
+ it "should not be callable on the session" do
16
+ expect { @session.assert_matches_selector(:css, '.number') }.to raise_error(NoMethodError)
17
+ end
18
+
19
+ it "should wait for match to occur", requires: [:js] do
20
+ @session.visit('/with_js')
21
+ input = @session.find(:css, '#disable-on-click')
22
+
23
+ expect(input.assert_matches_selector(:css, 'input:enabled')).to be true
24
+ input.click
25
+ expect(input.assert_matches_selector(:css, 'input:disabled')).to be true
26
+ end
27
+
28
+ it "should not accept count options" do
29
+ expect { @element.assert_matches_selector(:css, '.number', count: 1) }.to raise_error(ArgumentError)
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ Capybara::SpecHelper.spec '#match_css?' do
2
+ before do
3
+ @session.visit('/with_html')
4
+ @element = @session.find(:css, 'span', text: '42')
5
+ end
6
+
7
+ it "should be true if the given selector matches the element" do
8
+ expect(@element).to match_css("span")
9
+ expect(@element).to match_css("span.number")
10
+ end
11
+
12
+ it "should be false if the given selector does not match" do
13
+ expect(@element).not_to match_css("div")
14
+ expect(@element).not_to match_css("p a#doesnotexist")
15
+ expect(@element).not_to match_css("p.nosuchclass")
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ Capybara::SpecHelper.spec '#match_xpath?' do
2
+ before do
3
+ @session.visit('/with_html')
4
+ @element = @session.find(:css, 'span.number')
5
+ end
6
+
7
+ it "should be true if the given selector is on the page" do
8
+ expect(@element).to match_xpath("//span")
9
+ expect(@element).to match_xpath("//span[@class='number']")
10
+ end
11
+
12
+ it "should be false if the given selector is not on the page" do
13
+ expect(@element).not_to match_xpath("//abbr")
14
+ expect(@element).not_to match_xpath("//div")
15
+ expect(@element).not_to match_xpath("//span[@class='not_a_number']")
16
+ end
17
+
18
+ it "should use xpath even if default selector is CSS" do
19
+ Capybara.default_selector = :css
20
+ expect(@element).not_to have_xpath("//span[@class='not_a_number']")
21
+ expect(@element).not_to have_xpath("//div[@class='number']")
22
+ end
23
+ end
@@ -0,0 +1,63 @@
1
+ Capybara::SpecHelper.spec '#match_xpath?' do
2
+ before do
3
+ @session.visit('/with_html')
4
+ @element = @session.find('//span', text: '42')
5
+ end
6
+
7
+ it "should be true if the element matches the given selector" do
8
+ expect(@element).to match_selector(:xpath, "//span")
9
+ expect(@element).to match_selector(:css, 'span.number')
10
+ expect(@element.matches_selector?(:css, 'span.number')).to be true
11
+ end
12
+
13
+ it "should be false if the element does not match the given selector" do
14
+ expect(@element).not_to match_selector(:xpath, "//div")
15
+ expect(@element).not_to match_selector(:css, "span.not_a_number")
16
+ expect(@element.matches_selector?(:css, "span.not_a_number")).to be false
17
+ end
18
+
19
+ it "should use default selector" do
20
+ Capybara.default_selector = :css
21
+ expect(@element).not_to match_selector("span.not_a_number")
22
+ expect(@element).to match_selector("span.number")
23
+ end
24
+
25
+ context "with text" do
26
+ it "should discard all matches where the given string is not contained" do
27
+ expect(@element).to match_selector("//span", :text => "42")
28
+ expect(@element).not_to match_selector("//span", :text => "Doesnotexist")
29
+ end
30
+ end
31
+ end
32
+
33
+ Capybara::SpecHelper.spec '#not_matches_selector?' do
34
+ before do
35
+ @session.visit('/with_html')
36
+ @element = @session.find(:css, "span", text: 42)
37
+ end
38
+
39
+ it "should be false if the given selector matches the element" do
40
+ expect(@element).not_to not_match_selector(:xpath, "//span")
41
+ expect(@element).not_to not_match_selector(:css, "span.number")
42
+ expect(@element.not_matches_selector?(:css, "span.number")).to be false
43
+ end
44
+
45
+ it "should be true if the given selector does not match the element" do
46
+ expect(@element).to not_match_selector(:xpath, "//abbr")
47
+ expect(@element).to not_match_selector(:css, "p a#doesnotexist")
48
+ expect(@element.not_matches_selector?(:css, "p a#doesnotexist")).to be true
49
+ end
50
+
51
+ it "should use default selector" do
52
+ Capybara.default_selector = :css
53
+ expect(@element).to not_match_selector("p a#doesnotexist")
54
+ expect(@element).not_to not_match_selector("span.number")
55
+ end
56
+
57
+ context "with text" do
58
+ it "should discard all matches where the given string is contained" do
59
+ expect(@element).not_to not_match_selector(:css, "span.number", :text => "42")
60
+ expect(@element).to not_match_selector(:css, "span.number", :text => "Doesnotexist")
61
+ end
62
+ end
63
+ end if Gem::Version.new(RSpec::Expectations::Version::STRING) >= Gem::Version.new('3.1')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec "#evaluate_script", :requires => [:js] do
2
3
  it "should evaluate the given script and return whatever it produces" do
3
4
  @session.visit('/with_js')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec "#execute_script", :requires => [:js] do
2
3
  it "should execute the given script and return nothing" do
3
4
  @session.visit('/with_js')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec "#fill_in" do
2
3
  before do
3
4
  @session.visit('/form')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#find_button' do
2
3
  before do
3
4
  @session.visit('/form')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#find_by_id' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#find_field' do
2
3
  before do
3
4
  @session.visit('/form')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#find_link' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#find' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#first' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#go_back', :requires => [:js] do
2
3
  it "should fetch a response from the driver from the previous page" do
3
4
  @session.visit('/')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#go_forward', :requires => [:js] do
2
3
  it "should fetch a response from the driver from the previous page" do
3
4
  @session.visit('/')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_button?' do
2
3
  before do
3
4
  @session.visit('/form')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_css?' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_current_path?' do
2
3
  before do
3
4
  @session.visit('/with_js')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_field' do
2
3
  before { @session.visit('/form') }
3
4
 
@@ -41,6 +42,7 @@ Capybara::SpecHelper.spec '#has_field' do
41
42
  it "should be true if a field with the given type is on the page" do
42
43
  expect(@session).to have_field('First Name', :type => 'text')
43
44
  expect(@session).to have_field('Html5 Email', :type => 'email')
45
+ expect(@session).to have_field('Html5 Multiple Email', :type => 'email')
44
46
  expect(@session).to have_field('Html5 Tel', :type => 'tel')
45
47
  expect(@session).to have_field('Description', :type => 'textarea')
46
48
  expect(@session).to have_field('Languages', :type => 'select')
@@ -49,11 +51,22 @@ Capybara::SpecHelper.spec '#has_field' do
49
51
  it "should be false if the given field is not on the page" do
50
52
  expect(@session).not_to have_field('First Name', :type => 'textarea')
51
53
  expect(@session).not_to have_field('Html5 Email', :type => 'tel')
54
+ expect(@session).not_to have_field('Html5 Multiple Email', :type => 'tel')
52
55
  expect(@session).not_to have_field('Description', :type => '')
53
56
  expect(@session).not_to have_field('Description', :type => 'email')
54
57
  expect(@session).not_to have_field('Languages', :type => 'textarea')
55
58
  end
56
59
  end
60
+
61
+ context 'with multiple' do
62
+ it "should be true if a field with the multiple attribute is on the page" do
63
+ expect(@session).to have_field('Html5 Multiple Email', multiple: true)
64
+ end
65
+
66
+ it "should be false if a field without the multiple attribute is not on the page" do
67
+ expect(@session).not_to have_field('Html5 Multiple Email', multiple: false)
68
+ end
69
+ end
57
70
  end
58
71
 
59
72
  Capybara::SpecHelper.spec '#has_no_field' do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_link?' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_select?' do
2
3
  before { @session.visit('/form') }
3
4
 
@@ -102,6 +103,24 @@ Capybara::SpecHelper.spec '#has_select?' do
102
103
  expect(@session).to have_select("Icecream", :visible => false, :with_options => ['Vanilla', 'Strawberry'])
103
104
  end
104
105
  end
106
+
107
+ context 'with multiple option' do
108
+ it "should find multiple selects if true" do
109
+ expect(@session).to have_select('form_languages', multiple: true)
110
+ expect(@session).not_to have_select('form_other_title', multiple: true)
111
+ end
112
+
113
+ it "should not find multiple selects if false" do
114
+ expect(@session).not_to have_select('form_languages', multiple: false)
115
+ expect(@session).to have_select('form_other_title', multiple: false)
116
+ end
117
+
118
+ it "should find both if not specified" do
119
+ expect(@session).to have_select('form_languages')
120
+ expect(@session).to have_select('form_other_title')
121
+ end
122
+ end
123
+
105
124
  end
106
125
 
107
126
  Capybara::SpecHelper.spec '#has_no_select?' do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_selector?' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -66,6 +67,11 @@ Capybara::SpecHelper.spec '#has_selector?' do
66
67
  expect(@session).to have_selector("//p//a", :text => /re[dab]i/i, :count => 1)
67
68
  expect(@session).not_to have_selector("//p//a", :text => /Red$/)
68
69
  end
70
+
71
+ it "should warn when extra parameters passed" do
72
+ expect_any_instance_of(Kernel).to receive(:warn).with(/extra/)
73
+ expect(@session).to have_selector(:css, "p a#foo", 'extra')
74
+ end
69
75
  end
70
76
  end
71
77
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_table?' do
2
3
  before do
3
4
  @session.visit('/tables')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_text?' do
2
3
  it "should be true if the given text is on the page at least once" do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_title?' do
2
3
  before do
3
4
  @session.visit('/with_js')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#has_xpath?' do
2
3
  before do
3
4
  @session.visit('/with_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#response_headers' do
2
3
  it "should return response headers", :requires => [:response_headers] do
3
4
  @session.visit('/with_simple_html')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#html' do
2
3
  it "should return the unmodified page body" do
3
4
  @session.visit('/')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  Capybara::SpecHelper.spec "node" do
3
4
  before do
@@ -159,6 +160,13 @@ Capybara::SpecHelper.spec "node" do
159
160
  expect(@session.find('//select[@id="form_disabled_select"]/option')).to be_disabled
160
161
  expect(@session.find('//select[@id="form_title"]/option[1]')).not_to be_disabled
161
162
  end
163
+
164
+ it "should be boolean" do
165
+ @session.visit('/form')
166
+ expect(@session.find('//select[@id="form_disabled_select"]/option').disabled?).to be true
167
+ expect(@session.find('//select[@id="form_disabled_select2"]/option').disabled?).to be true
168
+ expect(@session.find('//select[@id="form_title"]/option[1]').disabled?).to be false
169
+ end
162
170
  end
163
171
 
164
172
  describe "#visible?" do
@@ -170,6 +178,13 @@ Capybara::SpecHelper.spec "node" do
170
178
  expect(@session.find('//div[@id="hidden_via_ancestor"]')).not_to be_visible
171
179
  expect(@session.find('//div[@id="hidden_attr"]')).not_to be_visible
172
180
  expect(@session.find('//a[@id="hidden_attr_via_ancestor"]')).not_to be_visible
181
+ expect(@session.find('//input[@id="hidden_input"]')).not_to be_visible
182
+ end
183
+
184
+ it "should be boolean" do
185
+ Capybara.ignore_hidden_elements = false
186
+ expect(@session.first('//a').visible?).to be true
187
+ expect(@session.find('//div[@id="hidden"]').visible?).to be false
173
188
  end
174
189
  end
175
190
 
@@ -180,6 +195,13 @@ Capybara::SpecHelper.spec "node" do
180
195
  expect(@session.find('//input[@id="gender_male"]')).not_to be_checked
181
196
  expect(@session.first('//h1')).not_to be_checked
182
197
  end
198
+
199
+ it "should be boolean" do
200
+ @session.visit('/form')
201
+ expect(@session.find('//input[@id="gender_female"]').checked?).to be true
202
+ expect(@session.find('//input[@id="gender_male"]').checked?).to be false
203
+ expect(@session.find('//input[@id="no_attr_value_checked"]').checked?).to be true
204
+ end
183
205
  end
184
206
 
185
207
  describe "#selected?" do
@@ -189,6 +211,13 @@ Capybara::SpecHelper.spec "node" do
189
211
  expect(@session.find('//option[@value="sv"]')).not_to be_selected
190
212
  expect(@session.first('//h1')).not_to be_selected
191
213
  end
214
+
215
+ it "should be boolean" do
216
+ @session.visit('/form')
217
+ expect(@session.find('//option[@value="en"]').selected?).to be true
218
+ expect(@session.find('//option[@value="sv"]').selected?).to be false
219
+ expect(@session.first('//h1').selected?).to be false
220
+ end
192
221
  end
193
222
 
194
223
  describe "#==" do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Capybara::SpecHelper.spec '#reset_session!' do
2
3
  it "removes cookies" do
3
4
  @session.visit('/set_cookie')
@@ -32,11 +33,19 @@ Capybara::SpecHelper.spec '#reset_session!' do
32
33
  end
33
34
 
34
35
  it "is synchronous" do
35
- @session.visit("/with_html")
36
+ @session.visit("/with_slow_unload")
37
+ expect(@session).to have_selector(:css, 'div')
36
38
  @session.reset_session!
37
39
  expect(@session).to have_no_selector :xpath, "/html/body/*", wait: false
38
40
  end
39
41
 
42
+ it "handles modals during unload" do
43
+ @session.visit('/with_unload_alert')
44
+ expect(@session).to have_selector(:css, 'div')
45
+ expect { @session.reset_session! }.not_to raise_error
46
+ expect(@session).to have_no_selector :xpath, "/html/body/*", wait: false
47
+ end
48
+
40
49
  it "raises any standard errors caught inside the server", :requires => [:server] do
41
50
  quietly { @session.visit("/error") }
42
51
  expect do
@@ -46,6 +55,31 @@ Capybara::SpecHelper.spec '#reset_session!' do
46
55
  expect(@session.current_path).to eq("/")
47
56
  end
48
57
 
58
+ context "When reuse_server == false" do
59
+ before do
60
+ @reuse_server = Capybara.reuse_server
61
+ Capybara.reuse_server = false
62
+ end
63
+
64
+ it "raises any standard errors caught inside the server during a second session", :requires => [:server] do
65
+ Capybara.using_driver(@session.mode) do
66
+ Capybara.using_session(:another_session) do
67
+ @another_session = Capybara.current_session
68
+ quietly { @another_session.visit("/error") }
69
+ expect do
70
+ @another_session.reset_session!
71
+ end.to raise_error(TestApp::TestAppError)
72
+ @another_session.visit("/")
73
+ expect(@another_session.current_path).to eq("/")
74
+ end
75
+ end
76
+ end
77
+
78
+ after do
79
+ Capybara.reuse_server = @reuse_server
80
+ end
81
+ end
82
+
49
83
  it "raises configured errors caught inside the server", :requires => [:server] do
50
84
  prev_errors = Capybara.server_errors
51
85