capybara 2.9.0 → 2.10.0

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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +23 -0
  3. data/README.md +37 -30
  4. data/lib/capybara/node/actions.rb +18 -15
  5. data/lib/capybara/node/base.rb +2 -2
  6. data/lib/capybara/node/element.rb +1 -1
  7. data/lib/capybara/node/finders.rb +37 -32
  8. data/lib/capybara/node/matchers.rb +187 -171
  9. data/lib/capybara/queries/match_query.rb +1 -3
  10. data/lib/capybara/queries/selector_query.rb +48 -19
  11. data/lib/capybara/rack_test/driver.rb +3 -3
  12. data/lib/capybara/rails.rb +1 -1
  13. data/lib/capybara/rspec/features.rb +1 -1
  14. data/lib/capybara/rspec/matchers.rb +31 -22
  15. data/lib/capybara/selector/css.rb +30 -0
  16. data/lib/capybara/selector/selector.rb +24 -1
  17. data/lib/capybara/selector.rb +22 -23
  18. data/lib/capybara/session.rb +4 -4
  19. data/lib/capybara/spec/session/accept_alert_spec.rb +4 -4
  20. data/lib/capybara/spec/session/accept_confirm_spec.rb +1 -1
  21. data/lib/capybara/spec/session/accept_prompt_spec.rb +5 -5
  22. data/lib/capybara/spec/session/all_spec.rb +27 -27
  23. data/lib/capybara/spec/session/assert_current_path.rb +2 -2
  24. data/lib/capybara/spec/session/assert_selector.rb +28 -28
  25. data/lib/capybara/spec/session/assert_text.rb +20 -20
  26. data/lib/capybara/spec/session/assert_title.rb +2 -2
  27. data/lib/capybara/spec/session/attach_file_spec.rb +2 -2
  28. data/lib/capybara/spec/session/check_spec.rb +19 -10
  29. data/lib/capybara/spec/session/choose_spec.rb +4 -4
  30. data/lib/capybara/spec/session/click_button_spec.rb +18 -5
  31. data/lib/capybara/spec/session/click_link_or_button_spec.rb +6 -6
  32. data/lib/capybara/spec/session/click_link_spec.rb +13 -13
  33. data/lib/capybara/spec/session/current_url_spec.rb +2 -2
  34. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +1 -1
  35. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +1 -1
  36. data/lib/capybara/spec/session/element/matches_selector_spec.rb +21 -8
  37. data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -1
  38. data/lib/capybara/spec/session/execute_script_spec.rb +2 -2
  39. data/lib/capybara/spec/session/fill_in_spec.rb +30 -30
  40. data/lib/capybara/spec/session/find_button_spec.rb +5 -5
  41. data/lib/capybara/spec/session/find_by_id_spec.rb +2 -2
  42. data/lib/capybara/spec/session/find_field_spec.rb +11 -7
  43. data/lib/capybara/spec/session/find_link_spec.rb +2 -2
  44. data/lib/capybara/spec/session/find_spec.rb +57 -48
  45. data/lib/capybara/spec/session/first_spec.rb +9 -9
  46. data/lib/capybara/spec/session/go_back_spec.rb +1 -1
  47. data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
  48. data/lib/capybara/spec/session/has_button_spec.rb +12 -12
  49. data/lib/capybara/spec/session/has_css_spec.rb +73 -73
  50. data/lib/capybara/spec/session/has_current_path_spec.rb +2 -2
  51. data/lib/capybara/spec/session/has_field_spec.rb +78 -68
  52. data/lib/capybara/spec/session/has_link_spec.rb +8 -8
  53. data/lib/capybara/spec/session/has_select_spec.rb +70 -61
  54. data/lib/capybara/spec/session/has_selector_spec.rb +28 -28
  55. data/lib/capybara/spec/session/has_text_spec.rb +6 -6
  56. data/lib/capybara/spec/session/has_title_spec.rb +2 -2
  57. data/lib/capybara/spec/session/has_xpath_spec.rb +26 -26
  58. data/lib/capybara/spec/session/headers.rb +1 -1
  59. data/lib/capybara/spec/session/html_spec.rb +3 -3
  60. data/lib/capybara/spec/session/node_spec.rb +15 -15
  61. data/lib/capybara/spec/session/reset_session_spec.rb +4 -4
  62. data/lib/capybara/spec/session/response_code.rb +1 -1
  63. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +3 -3
  64. data/lib/capybara/spec/session/screenshot_spec.rb +1 -1
  65. data/lib/capybara/spec/session/select_spec.rb +30 -30
  66. data/lib/capybara/spec/session/selectors_spec.rb +6 -2
  67. data/lib/capybara/spec/session/uncheck_spec.rb +2 -2
  68. data/lib/capybara/spec/session/unselect_spec.rb +14 -14
  69. data/lib/capybara/spec/session/visit_spec.rb +2 -2
  70. data/lib/capybara/spec/session/within_frame_spec.rb +2 -2
  71. data/lib/capybara/spec/session/within_spec.rb +6 -6
  72. data/lib/capybara/spec/spec_helper.rb +1 -1
  73. data/lib/capybara/spec/test_app.rb +1 -1
  74. data/lib/capybara/spec/views/form.erb +6 -3
  75. data/lib/capybara/version.rb +1 -1
  76. data/lib/capybara.rb +2 -2
  77. data/spec/basic_node_spec.rb +5 -5
  78. data/spec/capybara_spec.rb +1 -1
  79. data/spec/dsl_spec.rb +1 -1
  80. data/spec/rack_test_spec.rb +7 -7
  81. data/spec/rspec/matchers_spec.rb +6 -6
  82. data/spec/rspec_spec.rb +1 -1
  83. data/spec/selector_spec.rb +94 -3
  84. data/spec/selenium_firefox_spec.rb +1 -1
  85. data/spec/selenium_spec_chrome.rb +1 -1
  86. data/spec/shared_selenium_session.rb +10 -10
  87. metadata +3 -2
@@ -22,7 +22,7 @@ Capybara::SpecHelper.spec "#all" do
22
22
  end
23
23
 
24
24
  it "should raise an error when given invalid options" do
25
- expect { @session.all('//p', :schmoo => "foo") }.to raise_error(ArgumentError)
25
+ expect { @session.all('//p', schmoo: "foo") }.to raise_error(ArgumentError)
26
26
  end
27
27
 
28
28
  context "with css selectors" do
@@ -53,11 +53,11 @@ Capybara::SpecHelper.spec "#all" do
53
53
 
54
54
  context "with visible filter" do
55
55
  it "should only find visible nodes when true" do
56
- expect(@session.all(:css, "a.simple", :visible => true).size).to eq(1)
56
+ expect(@session.all(:css, "a.simple", visible: true).size).to eq(1)
57
57
  end
58
58
 
59
59
  it "should find nodes regardless of whether they are invisible when false" do
60
- expect(@session.all(:css, "a.simple", :visible => false).size).to eq(2)
60
+ expect(@session.all(:css, "a.simple", visible: false).size).to eq(2)
61
61
  end
62
62
 
63
63
  it "should default to Capybara.ignore_hidden_elements" do
@@ -71,68 +71,68 @@ Capybara::SpecHelper.spec "#all" do
71
71
  context 'with element count filters' do
72
72
  context ':count' do
73
73
  it 'should succeed when the number of elements founds matches the expectation' do
74
- expect { @session.all(:css, 'h1, p', :count => 4) }.to_not raise_error
74
+ expect { @session.all(:css, 'h1, p', count: 4) }.to_not raise_error
75
75
  end
76
76
  it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
77
- expect { @session.all(:css, 'h1, p', :count => 5) }.to raise_error(Capybara::ExpectationNotMet)
77
+ expect { @session.all(:css, 'h1, p', count: 5) }.to raise_error(Capybara::ExpectationNotMet)
78
78
  end
79
79
  end
80
80
  context ':minimum' do
81
81
  it 'should succeed when the number of elements founds matches the expectation' do
82
- expect { @session.all(:css, 'h1, p', :minimum => 0) }.to_not raise_error
82
+ expect { @session.all(:css, 'h1, p', minimum: 0) }.to_not raise_error
83
83
  end
84
84
  it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
85
- expect { @session.all(:css, 'h1, p', :minimum => 5) }.to raise_error(Capybara::ExpectationNotMet)
85
+ expect { @session.all(:css, 'h1, p', minimum: 5) }.to raise_error(Capybara::ExpectationNotMet)
86
86
  end
87
87
  end
88
88
  context ':maximum' do
89
89
  it 'should succeed when the number of elements founds matches the expectation' do
90
- expect { @session.all(:css, 'h1, p', :maximum => 4) }.to_not raise_error
90
+ expect { @session.all(:css, 'h1, p', maximum: 4) }.to_not raise_error
91
91
  end
92
92
  it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
93
- expect { @session.all(:css, 'h1, p', :maximum => 0) }.to raise_error(Capybara::ExpectationNotMet)
93
+ expect { @session.all(:css, 'h1, p', maximum: 0) }.to raise_error(Capybara::ExpectationNotMet)
94
94
  end
95
95
  end
96
96
  context ':between' do
97
97
  it 'should succeed when the number of elements founds matches the expectation' do
98
- expect { @session.all(:css, 'h1, p', :between => 2..7) }.to_not raise_error
98
+ expect { @session.all(:css, 'h1, p', between: 2..7) }.to_not raise_error
99
99
  end
100
100
  it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
101
- expect { @session.all(:css, 'h1, p', :between => 0..3) }.to raise_error(Capybara::ExpectationNotMet)
101
+ expect { @session.all(:css, 'h1, p', between: 0..3) }.to raise_error(Capybara::ExpectationNotMet)
102
102
  end
103
103
  end
104
104
 
105
105
  context 'with multiple count filters' do
106
106
  it 'ignores other filters when :count is specified' do
107
- o = {:count => 4,
108
- :minimum => 5,
109
- :maximum => 0,
110
- :between => 0..3}
107
+ o = {count: 4,
108
+ minimum: 5,
109
+ maximum: 0,
110
+ between: 0..3}
111
111
  expect { @session.all(:css, 'h1, p', o) }.to_not raise_error
112
112
  end
113
113
  context 'with no :count expectation' do
114
114
  it 'fails if :minimum is not met' do
115
- o = {:minimum => 5,
116
- :maximum => 4,
117
- :between => 2..7}
115
+ o = {minimum: 5,
116
+ maximum: 4,
117
+ between: 2..7}
118
118
  expect { @session.all(:css, 'h1, p', o) }.to raise_error(Capybara::ExpectationNotMet)
119
119
  end
120
120
  it 'fails if :maximum is not met' do
121
- o = {:minimum => 0,
122
- :maximum => 0,
123
- :between => 2..7}
121
+ o = {minimum: 0,
122
+ maximum: 0,
123
+ between: 2..7}
124
124
  expect { @session.all(:css, 'h1, p', o) }.to raise_error(Capybara::ExpectationNotMet)
125
125
  end
126
126
  it 'fails if :between is not met' do
127
- o = {:minimum => 0,
128
- :maximum => 4,
129
- :between => 0..3}
127
+ o = {minimum: 0,
128
+ maximum: 4,
129
+ between: 0..3}
130
130
  expect { @session.all(:css, 'h1, p', o) }.to raise_error(Capybara::ExpectationNotMet)
131
131
  end
132
132
  it 'succeeds if all combineable expectations are met' do
133
- o = {:minimum => 0,
134
- :maximum => 4,
135
- :between => 2..7}
133
+ o = {minimum: 0,
134
+ maximum: 4,
135
+ between: 2..7}
136
136
  expect { @session.all(:css, 'h1, p', o) }.to_not raise_error
137
137
  end
138
138
  end
@@ -12,7 +12,7 @@ Capybara::SpecHelper.spec '#assert_current_path' do
12
12
  expect { @session.assert_current_path(/w[a-z]{3}_js/) }.not_to raise_error
13
13
  end
14
14
 
15
- it "should wait for current_path", :requires => [:js] do
15
+ it "should wait for current_path", requires: [:js] do
16
16
  @session.click_link("Change page")
17
17
  expect { @session.assert_current_path("/with_html") }.not_to raise_error
18
18
  end
@@ -49,7 +49,7 @@ Capybara::SpecHelper.spec '#assert_no_current_path?' do
49
49
  expect{@session.assert_no_current_path(/monkey/)}.not_to raise_error
50
50
  end
51
51
 
52
- it "should wait for current_path to disappear", :requires => [:js] do
52
+ it "should wait for current_path to disappear", requires: [:js] do
53
53
  @session.click_link("Change page")
54
54
  expect{@session.assert_no_current_path('/with_js')}.not_to raise_error
55
55
  end
@@ -31,41 +31,41 @@ Capybara::SpecHelper.spec '#assert_selector' do
31
31
 
32
32
  context "with count" do
33
33
  it "should be true if the content is on the page the given number of times" do
34
- @session.assert_selector("//p", :count => 3)
35
- @session.assert_selector("//p//a[@id='foo']", :count => 1)
36
- @session.assert_selector("//p[contains(.,'est')]", :count => 1)
34
+ @session.assert_selector("//p", count: 3)
35
+ @session.assert_selector("//p//a[@id='foo']", count: 1)
36
+ @session.assert_selector("//p[contains(.,'est')]", count: 1)
37
37
  end
38
38
 
39
39
  it "should be false if the content is on the page the given number of times" do
40
- expect { @session.assert_selector("//p", :count => 6) }.to raise_error(Capybara::ElementNotFound)
41
- expect { @session.assert_selector("//p//a[@id='foo']", :count => 2) }.to raise_error(Capybara::ElementNotFound)
42
- expect { @session.assert_selector("//p[contains(.,'est')]", :count => 5) }.to raise_error(Capybara::ElementNotFound)
40
+ expect { @session.assert_selector("//p", count: 6) }.to raise_error(Capybara::ElementNotFound)
41
+ expect { @session.assert_selector("//p//a[@id='foo']", count: 2) }.to raise_error(Capybara::ElementNotFound)
42
+ expect { @session.assert_selector("//p[contains(.,'est')]", count: 5) }.to raise_error(Capybara::ElementNotFound)
43
43
  end
44
44
 
45
45
  it "should be false if the content isn't on the page at all" do
46
- expect { @session.assert_selector("//abbr", :count => 2) }.to raise_error(Capybara::ElementNotFound)
47
- expect { @session.assert_selector("//p//a[@id='doesnotexist']", :count => 1) }.to raise_error(Capybara::ElementNotFound)
46
+ expect { @session.assert_selector("//abbr", count: 2) }.to raise_error(Capybara::ElementNotFound)
47
+ expect { @session.assert_selector("//p//a[@id='doesnotexist']", count: 1) }.to raise_error(Capybara::ElementNotFound)
48
48
  end
49
49
  end
50
50
 
51
51
  context "with text" do
52
52
  it "should discard all matches where the given string is not contained" do
53
- @session.assert_selector("//p//a", :text => "Redirect", :count => 1)
54
- expect { @session.assert_selector("//p", :text => "Doesnotexist") }.to raise_error(Capybara::ElementNotFound)
53
+ @session.assert_selector("//p//a", text: "Redirect", count: 1)
54
+ expect { @session.assert_selector("//p", text: "Doesnotexist") }.to raise_error(Capybara::ElementNotFound)
55
55
  end
56
56
 
57
57
  it "should discard all matches where the given regexp is not matched" do
58
- @session.assert_selector("//p//a", :text => /re[dab]i/i, :count => 1)
59
- expect { @session.assert_selector("//p//a", :text => /Red$/) }.to raise_error(Capybara::ElementNotFound)
58
+ @session.assert_selector("//p//a", text: /re[dab]i/i, count: 1)
59
+ expect { @session.assert_selector("//p//a", text: /Red$/) }.to raise_error(Capybara::ElementNotFound)
60
60
  end
61
61
  end
62
62
 
63
- context "with wait", :requires => [:js] do
63
+ context "with wait", requires: [:js] do
64
64
  it "should find element if it appears before given wait duration" do
65
65
  Capybara.using_wait_time(0.1) do
66
66
  @session.visit('/with_js')
67
67
  @session.click_link('Click me')
68
- @session.assert_selector(:css, "a#has-been-clicked", :text => "Has been clicked", :wait => 0.9)
68
+ @session.assert_selector(:css, "a#has-been-clicked", text: "Has been clicked", wait: 0.9)
69
69
  end
70
70
  end
71
71
  end
@@ -109,40 +109,40 @@ Capybara::SpecHelper.spec '#assert_no_selector' do
109
109
 
110
110
  context "with count" do
111
111
  it "should be false if the content is on the page the given number of times" do
112
- expect { @session.assert_no_selector("//p", :count => 3) }.to raise_error(Capybara::ElementNotFound)
113
- expect { @session.assert_no_selector("//p//a[@id='foo']", :count => 1) }.to raise_error(Capybara::ElementNotFound)
114
- expect { @session.assert_no_selector("//p[contains(.,'est')]", :count => 1) }.to raise_error(Capybara::ElementNotFound)
112
+ expect { @session.assert_no_selector("//p", count: 3) }.to raise_error(Capybara::ElementNotFound)
113
+ expect { @session.assert_no_selector("//p//a[@id='foo']", count: 1) }.to raise_error(Capybara::ElementNotFound)
114
+ expect { @session.assert_no_selector("//p[contains(.,'est')]", count: 1) }.to raise_error(Capybara::ElementNotFound)
115
115
  end
116
116
 
117
117
  it "should be true if the content is on the page the wrong number of times" do
118
- @session.assert_no_selector("//p", :count => 6)
119
- @session.assert_no_selector("//p//a[@id='foo']", :count => 2)
120
- @session.assert_no_selector("//p[contains(.,'est')]", :count => 5)
118
+ @session.assert_no_selector("//p", count: 6)
119
+ @session.assert_no_selector("//p//a[@id='foo']", count: 2)
120
+ @session.assert_no_selector("//p[contains(.,'est')]", count: 5)
121
121
  end
122
122
 
123
123
  it "should be true if the content isn't on the page at all" do
124
- @session.assert_no_selector("//abbr", :count => 2)
125
- @session.assert_no_selector("//p//a[@id='doesnotexist']", :count => 1)
124
+ @session.assert_no_selector("//abbr", count: 2)
125
+ @session.assert_no_selector("//p//a[@id='doesnotexist']", count: 1)
126
126
  end
127
127
  end
128
128
 
129
129
  context "with text" do
130
130
  it "should discard all matches where the given string is contained" do
131
- expect { @session.assert_no_selector("//p//a", :text => "Redirect", :count => 1) }.to raise_error(Capybara::ElementNotFound)
132
- @session.assert_no_selector("//p", :text => "Doesnotexist")
131
+ expect { @session.assert_no_selector("//p//a", text: "Redirect", count: 1) }.to raise_error(Capybara::ElementNotFound)
132
+ @session.assert_no_selector("//p", text: "Doesnotexist")
133
133
  end
134
134
 
135
135
  it "should discard all matches where the given regexp is matched" do
136
- expect { @session.assert_no_selector("//p//a", :text => /re[dab]i/i, :count => 1) }.to raise_error(Capybara::ElementNotFound)
137
- @session.assert_no_selector("//p//a", :text => /Red$/)
136
+ expect { @session.assert_no_selector("//p//a", text: /re[dab]i/i, count: 1) }.to raise_error(Capybara::ElementNotFound)
137
+ @session.assert_no_selector("//p//a", text: /Red$/)
138
138
  end
139
139
  end
140
140
 
141
- context "with wait", :requires => [:js] do
141
+ context "with wait", requires: [:js] do
142
142
  it "should not find element if it appears after given wait duration" do
143
143
  @session.visit('/with_js')
144
144
  @session.click_link('Click me')
145
- @session.assert_no_selector(:css, "a#has-been-clicked", :text => "Has been clicked", :wait => 0.1)
145
+ @session.assert_no_selector(:css, "a#has-been-clicked", text: "Has been clicked", wait: 0.1)
146
146
  end
147
147
  end
148
148
  end
@@ -78,7 +78,7 @@ Capybara::SpecHelper.spec '#assert_text' do
78
78
  end.to raise_error(Capybara::ExpectationNotMet)
79
79
  end
80
80
 
81
- it "should wait for text to appear", :requires => [:js] do
81
+ it "should wait for text to appear", requires: [:js] do
82
82
  @session.visit('/with_js')
83
83
  @session.click_link('Click me')
84
84
  expect(@session.assert_text('Has been clicked')).to eq(true)
@@ -98,7 +98,7 @@ Capybara::SpecHelper.spec '#assert_text' do
98
98
  end
99
99
  end
100
100
 
101
- context "with wait", :requires => [:js] do
101
+ context "with wait", requires: [:js] do
102
102
  it "should find element if it appears before given wait duration" do
103
103
  Capybara.using_wait_time(0) do
104
104
  @session.visit('/with_js')
@@ -125,35 +125,35 @@ Capybara::SpecHelper.spec '#assert_text' do
125
125
  end
126
126
 
127
127
  it 'ignores other filters when :count is specified' do
128
- o = {:count => 5,
129
- :minimum => 6,
130
- :maximum => 0,
131
- :between => 0..4}
128
+ o = {count: 5,
129
+ minimum: 6,
130
+ maximum: 0,
131
+ between: 0..4}
132
132
  expect { @session.assert_text('Header', o) }.not_to raise_error
133
133
  end
134
134
  context 'with no :count expectation' do
135
135
  it 'fails if :minimum is not met' do
136
- o = {:minimum => 6,
137
- :maximum => 5,
138
- :between => 2..7}
136
+ o = {minimum: 6,
137
+ maximum: 5,
138
+ between: 2..7}
139
139
  expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
140
140
  end
141
141
  it 'fails if :maximum is not met' do
142
- o = {:minimum => 0,
143
- :maximum => 0,
144
- :between => 2..7}
142
+ o = {minimum: 0,
143
+ maximum: 0,
144
+ between: 2..7}
145
145
  expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
146
146
  end
147
147
  it 'fails if :between is not met' do
148
- o = {:minimum => 0,
149
- :maximum => 5,
150
- :between => 0..4}
148
+ o = {minimum: 0,
149
+ maximum: 5,
150
+ between: 0..4}
151
151
  expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
152
152
  end
153
153
  it 'succeeds if all combineable expectations are met' do
154
- o = {:minimum => 0,
155
- :maximum => 5,
156
- :between => 2..7}
154
+ o = {minimum: 0,
155
+ maximum: 5,
156
+ between: 2..7}
157
157
  expect { @session.assert_text('Header', o) }.not_to raise_error
158
158
  end
159
159
  end
@@ -215,12 +215,12 @@ Capybara::SpecHelper.spec '#assert_no_text' do
215
215
  end
216
216
  end
217
217
 
218
- context "with wait", :requires => [:js] do
218
+ context "with wait", requires: [:js] do
219
219
  it "should not find element if it appears after given wait duration" do
220
220
  @session.visit('/with_js')
221
221
  @session.click_link('Click me')
222
222
  @session.find(:css, '#reload-list').click
223
- @session.find(:css, '#the-list').assert_no_text('Foo Bar', :wait => 0.3)
223
+ @session.find(:css, '#the-list').assert_no_text('Foo Bar', wait: 0.3)
224
224
  end
225
225
  end
226
226
  end
@@ -19,7 +19,7 @@ Capybara::SpecHelper.spec '#assert_title' do
19
19
  end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to match /w[a-z]{10}_js/')
20
20
  end
21
21
 
22
- it "should wait for title", :requires => [:js] do
22
+ it "should wait for title", requires: [:js] do
23
23
  @session.click_link("Change title")
24
24
  expect(@session.assert_title("changed title")).to eq(true)
25
25
  end
@@ -59,7 +59,7 @@ Capybara::SpecHelper.spec '#assert_no_title' do
59
59
  @session.assert_no_title(/monkey/)
60
60
  end
61
61
 
62
- it "should wait for title to disappear", :requires => [:js] do
62
+ it "should wait for title to disappear", requires: [:js] do
63
63
  @session.click_link("Change title")
64
64
  expect(@session.assert_no_title('with_js')).to eq(true)
65
65
  end
@@ -96,14 +96,14 @@ Capybara::SpecHelper.spec "#attach_file" do
96
96
 
97
97
  context "with :exact option" do
98
98
  it "should set a file path by partial label when false" do
99
- @session.attach_file "Imag", __FILE__, :exact => false
99
+ @session.attach_file "Imag", __FILE__, exact: false
100
100
  @session.click_button('awesome')
101
101
  expect(extract_results(@session)['image']).to eq(File.basename(__FILE__))
102
102
  end
103
103
 
104
104
  it "not allow partial matches when true" do
105
105
  expect do
106
- @session.attach_file "Imag", __FILE__, :exact => true
106
+ @session.attach_file "Imag", __FILE__, exact: true
107
107
  end.to raise_error(Capybara::ElementNotFound)
108
108
  end
109
109
  end
@@ -15,7 +15,7 @@ Capybara::SpecHelper.spec "#check" do
15
15
  end
16
16
  end
17
17
 
18
- it "should trigger associated events", :requires => [:js] do
18
+ it "should trigger associated events", requires: [:js] do
19
19
  @session.visit('/with_js')
20
20
  @session.check('checkbox_with_event')
21
21
  expect(@session).to have_css('#checkbox_event_triggered');
@@ -86,28 +86,28 @@ Capybara::SpecHelper.spec "#check" do
86
86
 
87
87
  context "with :exact option" do
88
88
  it "should accept partial matches when false" do
89
- @session.check('Ham', :exact => false)
89
+ @session.check('Ham', exact: false)
90
90
  @session.click_button('awesome')
91
91
  expect(extract_results(@session)['pets']).to include('hamster')
92
92
  end
93
93
 
94
94
  it "should not accept partial matches when true" do
95
95
  expect do
96
- @session.check('Ham', :exact => true)
96
+ @session.check('Ham', exact: true)
97
97
  end.to raise_error(Capybara::ElementNotFound)
98
98
  end
99
99
  end
100
100
 
101
101
  context "with `option` option" do
102
102
  it "can check boxes by their value" do
103
- @session.check('form[pets][]', :option => "cat")
103
+ @session.check('form[pets][]', option: "cat")
104
104
  @session.click_button('awesome')
105
105
  expect(extract_results(@session)['pets']).to include('cat')
106
106
  end
107
107
 
108
108
  it "should raise an error if option not found" do
109
109
  expect do
110
- @session.check('form[pets][]', :option => "elephant")
110
+ @session.check('form[pets][]', option: "elephant")
111
111
  end.to raise_error(Capybara::ElementNotFound)
112
112
  end
113
113
  end
@@ -161,11 +161,20 @@ Capybara::SpecHelper.spec "#check" do
161
161
  expect{@session.check('form_cars_mclaren')}.to raise_error(Capybara::ElementNotFound, 'Unable to find checkbox "form_cars_mclaren"')
162
162
  end
163
163
 
164
- it "should check via the label if allow_label_click == true" do
165
- expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
166
- @session.check('form_cars_tesla', allow_label_click: true)
167
- @session.click_button('awesome')
168
- expect(extract_results(@session)['cars']).to include('tesla')
164
+ context "with allow_label_click == true" do
165
+ it "should check via the label if input is hidden" do
166
+ expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
167
+ @session.check('form_cars_tesla', allow_label_click: true)
168
+ @session.click_button('awesome')
169
+ expect(extract_results(@session)['cars']).to include('tesla')
170
+ end
171
+
172
+ it "should check via the label if input is moved off the left edge of the page" do
173
+ expect(@session.find(:checkbox, 'form_cars_pagani', unchecked: true, visible: :all)).to be
174
+ @session.check('form_cars_pagani', allow_label_click: true)
175
+ @session.click_button('awesome')
176
+ expect(extract_results(@session)['cars']).to include('pagani')
177
+ end
169
178
  end
170
179
  end
171
180
  end
@@ -41,28 +41,28 @@ Capybara::SpecHelper.spec "#choose" do
41
41
 
42
42
  context "with :exact option" do
43
43
  it "should accept partial matches when false" do
44
- @session.choose("Mal", :exact => false)
44
+ @session.choose("Mal", exact: false)
45
45
  @session.click_button('awesome')
46
46
  expect(extract_results(@session)['gender']).to eq('male')
47
47
  end
48
48
 
49
49
  it "should not accept partial matches when true" do
50
50
  expect do
51
- @session.choose("Mal", :exact => true)
51
+ @session.choose("Mal", exact: true)
52
52
  end.to raise_error(Capybara::ElementNotFound)
53
53
  end
54
54
  end
55
55
 
56
56
  context "with `option` option" do
57
57
  it "can check radio buttons by their value" do
58
- @session.choose('form[gender]', :option => "male")
58
+ @session.choose('form[gender]', option: "male")
59
59
  @session.click_button('awesome')
60
60
  expect(extract_results(@session)['gender']).to eq("male")
61
61
  end
62
62
 
63
63
  it "should raise an error if option not found" do
64
64
  expect do
65
- @session.choose('form[gender]', :option => "hermaphrodite")
65
+ @session.choose('form[gender]', option: "hermaphrodite")
66
66
  end.to raise_error(Capybara::ElementNotFound)
67
67
  end
68
68
  end
@@ -4,7 +4,7 @@ Capybara::SpecHelper.spec '#click_button' do
4
4
  @session.visit('/form')
5
5
  end
6
6
 
7
- it "should wait for asynchronous load", :requires => [:js] do
7
+ it "should wait for asynchronous load", requires: [:js] do
8
8
  @session.visit('/with_js')
9
9
  @session.click_link('Click me')
10
10
  @session.click_button('New Here')
@@ -338,6 +338,19 @@ Capybara::SpecHelper.spec '#click_button' do
338
338
  expect(extract_results(@session)['first_name']).to eq('John')
339
339
  end
340
340
  end
341
+
342
+ context "with descendant image alt given on a button defined by <button> tag" do
343
+ it "should submit the associated form" do
344
+ @session.click_button('A horse eating hay')
345
+ expect(extract_results(@session)['first_name']).to eq('John')
346
+ end
347
+
348
+ it "should work with partial matches" do
349
+ @session.click_button('se eating h')
350
+ expect(extract_results(@session)['first_name']).to eq('John')
351
+ end
352
+ end
353
+
341
354
  context "with a locator that doesn't exist" do
342
355
  it "should raise an error" do
343
356
  msg = "Unable to find button \"does not exist\""
@@ -414,8 +427,8 @@ Capybara::SpecHelper.spec '#click_button' do
414
427
  @session.fill_in('address1_city', :with =>'Paris')
415
428
  @session.fill_in('address1_street', :with =>'CDG')
416
429
 
417
- @session.fill_in('address2_city', :with => 'Mikolaiv')
418
- @session.fill_in('address2_street', :with => 'PGS')
430
+ @session.fill_in('address2_city', with: 'Mikolaiv')
431
+ @session.fill_in('address2_street', with: 'PGS')
419
432
 
420
433
  @session.click_button "awesome"
421
434
 
@@ -433,13 +446,13 @@ Capybara::SpecHelper.spec '#click_button' do
433
446
 
434
447
  context "with :exact option" do
435
448
  it "should accept partial matches when false" do
436
- @session.click_button('What an Awesome', :exact => false)
449
+ @session.click_button('What an Awesome', exact: false)
437
450
  expect(extract_results(@session)['first_name']).to eq('John')
438
451
  end
439
452
 
440
453
  it "should not accept partial matches when true" do
441
454
  expect do
442
- @session.click_button('What an Awesome', :exact => true)
455
+ @session.click_button('What an Awesome', exact: true)
443
456
  end.to raise_error(Capybara::ElementNotFound)
444
457
  end
445
458
  end
@@ -24,7 +24,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
24
24
  expect(extract_results(@session)['first_name']).to eq('John')
25
25
  end
26
26
 
27
- it "should wait for asynchronous load", :requires => [:js] do
27
+ it "should wait for asynchronous load", requires: [:js] do
28
28
  @session.visit('/with_js')
29
29
  @session.click_link('Click me')
30
30
  @session.click_link_or_button('Has been clicked')
@@ -40,7 +40,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
40
40
  context "when `true`" do
41
41
  it "clicks on approximately matching link" do
42
42
  @session.visit('/with_html')
43
- @session.click_link_or_button('abore', :exact => false)
43
+ @session.click_link_or_button('abore', exact: false)
44
44
  expect(@session).to have_content('Bar')
45
45
  end
46
46
 
@@ -56,7 +56,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
56
56
  @session.visit('/with_html')
57
57
  msg = "Unable to find link or button \"abore\""
58
58
  expect do
59
- @session.click_link_or_button('abore', :exact => true)
59
+ @session.click_link_or_button('abore', exact: true)
60
60
  end.to raise_error(Capybara::ElementNotFound, msg)
61
61
  end
62
62
 
@@ -65,7 +65,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
65
65
  msg = "Unable to find link or button \"awe\""
66
66
 
67
67
  expect do
68
- @session.click_link_or_button('awe', :exact => true)
68
+ @session.click_link_or_button('awe', exact: true)
69
69
  end.to raise_error(Capybara::ElementNotFound, msg)
70
70
  end
71
71
  end
@@ -85,7 +85,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
85
85
  it "ignores disabled buttons when false" do
86
86
  @session.visit('/form')
87
87
  expect do
88
- @session.click_link_or_button('Disabled button', :disabled => false)
88
+ @session.click_link_or_button('Disabled button', disabled: false)
89
89
  end.to raise_error(Capybara::ElementNotFound)
90
90
  end
91
91
 
@@ -105,7 +105,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
105
105
  it "does nothing when button is disabled" do
106
106
  @session.visit('/form')
107
107
  expect do
108
- @session.click_link_or_button('Disabled button', :disabled => false)
108
+ @session.click_link_or_button('Disabled button', disabled: false)
109
109
  end.to raise_error(Capybara::ElementNotFound)
110
110
  end
111
111