capybara 3.0.3 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +10 -0
- data/lib/capybara.rb +1 -1
- data/lib/capybara/helpers.rb +1 -1
- data/lib/capybara/minitest/spec.rb +2 -0
- data/lib/capybara/node/actions.rb +45 -5
- data/lib/capybara/queries/match_query.rb +2 -0
- data/lib/capybara/queries/selector_query.rb +3 -4
- data/lib/capybara/queries/text_query.rb +4 -5
- data/lib/capybara/rack_test/node.rb +6 -4
- data/lib/capybara/result.rb +1 -1
- data/lib/capybara/rspec/compound.rb +2 -0
- data/lib/capybara/selector.rb +72 -18
- data/lib/capybara/selector/css.rb +2 -0
- data/lib/capybara/selenium/driver.rb +14 -15
- data/lib/capybara/selenium/node.rb +23 -29
- data/lib/capybara/server.rb +29 -4
- data/lib/capybara/session.rb +12 -13
- data/lib/capybara/spec/session/all_spec.rb +6 -6
- data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +2 -3
- data/lib/capybara/spec/session/{assert_selector.rb → assert_selector_spec.rb} +0 -0
- data/lib/capybara/spec/session/{assert_text.rb → assert_text_spec.rb} +1 -1
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +0 -0
- data/lib/capybara/spec/session/check_spec.rb +6 -6
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +0 -7
- data/lib/capybara/spec/session/current_url_spec.rb +6 -8
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +2 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +2 -0
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +2 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +2 -0
- data/lib/capybara/spec/session/find_by_id_spec.rb +1 -1
- data/lib/capybara/spec/session/find_field_spec.rb +1 -1
- data/lib/capybara/spec/session/first_spec.rb +12 -12
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +1 -1
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +1 -1
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +2 -2
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +1 -1
- data/lib/capybara/spec/session/has_button_spec.rb +5 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +2 -2
- data/lib/capybara/spec/session/has_field_spec.rb +1 -1
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +2 -0
- data/lib/capybara/spec/session/has_selector_spec.rb +8 -0
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +0 -0
- data/lib/capybara/spec/session/node_spec.rb +4 -4
- data/lib/capybara/spec/session/reset_session_spec.rb +2 -2
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +0 -0
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +2 -1
- data/lib/capybara/spec/session/select_spec.rb +27 -1
- data/lib/capybara/spec/session/selectors_spec.rb +2 -0
- data/lib/capybara/spec/session/uncheck_spec.rb +3 -3
- data/lib/capybara/spec/session/visit_spec.rb +17 -10
- data/lib/capybara/spec/session/window/become_closed_spec.rb +3 -3
- data/lib/capybara/spec/session/window/current_window_spec.rb +2 -2
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +3 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +5 -5
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +3 -3
- data/lib/capybara/spec/session/window/window_spec.rb +24 -9
- data/lib/capybara/spec/session/window/windows_spec.rb +2 -2
- data/lib/capybara/spec/session/window/within_window_spec.rb +2 -2
- data/lib/capybara/spec/session/within_spec.rb +3 -3
- data/lib/capybara/spec/spec_helper.rb +7 -5
- data/lib/capybara/spec/views/form.erb +9 -0
- data/lib/capybara/version.rb +1 -1
- data/spec/basic_node_spec.rb +1 -1
- data/spec/capybara_spec.rb +4 -14
- data/spec/dsl_spec.rb +5 -3
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +2 -2
- data/spec/fixtures/selenium_driver_rspec_success.rb +2 -2
- data/spec/rack_test_spec.rb +8 -6
- data/spec/result_spec.rb +22 -2
- data/spec/rspec/features_spec.rb +4 -2
- data/spec/rspec/scenarios_spec.rb +1 -1
- data/spec/rspec/shared_spec_matchers.rb +7 -4
- data/spec/rspec/views_spec.rb +2 -1
- data/spec/rspec_spec.rb +80 -78
- data/spec/selenium_spec_marionette.rb +6 -4
- data/spec/server_spec.rb +40 -2
- data/spec/session_spec.rb +12 -4
- data/spec/shared_selenium_session.rb +106 -84
- metadata +11 -9
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
4
|
-
before
|
4
|
+
before do
|
5
5
|
@window = @session.current_window
|
6
6
|
@session.visit('/with_windows')
|
7
7
|
@session.find(:css, '#openTwoWindows').click
|
@@ -10,7 +10,7 @@ Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
|
10
10
|
raise Capybara::CapybaraError if @session.windows.size != 3
|
11
11
|
end
|
12
12
|
end
|
13
|
-
after
|
13
|
+
after do
|
14
14
|
(@session.windows - [@window]).each do |w|
|
15
15
|
@session.switch_to_window w
|
16
16
|
w.close
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
4
|
-
before
|
4
|
+
before do
|
5
5
|
@window = @session.current_window
|
6
6
|
@session.visit('/with_windows')
|
7
7
|
@session.find(:css, '#openTwoWindows').click
|
@@ -10,7 +10,7 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
10
10
|
raise Capybara::CapybaraError if @session.windows.size != 3
|
11
11
|
end
|
12
12
|
end
|
13
|
-
after
|
13
|
+
after do
|
14
14
|
(@session.windows - [@window]).each do |w|
|
15
15
|
@session.switch_to_window w
|
16
16
|
w.close
|
@@ -7,7 +7,7 @@ Capybara::SpecHelper.spec '#within' do
|
|
7
7
|
|
8
8
|
context "with CSS selector" do
|
9
9
|
it "should click links in the given scope" do
|
10
|
-
@session.within(:css, "#for_bar li"
|
10
|
+
@session.within(:css, "#for_bar li:first-child") do
|
11
11
|
@session.click_link('Go')
|
12
12
|
end
|
13
13
|
expect(@session).to have_content('Bar')
|
@@ -103,9 +103,9 @@ Capybara::SpecHelper.spec '#within' do
|
|
103
103
|
@session.within(".//div[@id='doesnotexist']") do
|
104
104
|
end
|
105
105
|
end.to raise_error(Capybara::ElementNotFound)
|
106
|
-
end.
|
106
|
+
end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(false)
|
107
107
|
end
|
108
|
-
end.
|
108
|
+
end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(true)
|
109
109
|
end
|
110
110
|
|
111
111
|
it "should fill in a field and click a button" do
|
@@ -49,31 +49,33 @@ module Capybara
|
|
49
49
|
|
50
50
|
def run_specs(session, name, **options)
|
51
51
|
specs = @specs
|
52
|
-
RSpec.describe Capybara::Session, name, options do
|
52
|
+
RSpec.describe Capybara::Session, name, options do # rubocop:disable RSpec/EmptyExampleGroup
|
53
53
|
include Capybara::SpecHelper
|
54
54
|
include Capybara::RSpecMatchers
|
55
|
+
# rubocop:disable RSpec/ScatteredSetup
|
55
56
|
before do
|
56
57
|
@session = session
|
57
58
|
end
|
58
59
|
|
59
60
|
after do
|
60
|
-
|
61
|
+
session.reset_session!
|
61
62
|
end
|
62
63
|
|
63
64
|
before :each, psc: true do
|
64
|
-
SpecHelper.reset_threadsafe(true,
|
65
|
+
SpecHelper.reset_threadsafe(true, session)
|
65
66
|
end
|
66
67
|
|
67
68
|
after psc: true do
|
68
|
-
SpecHelper.reset_threadsafe(false,
|
69
|
+
SpecHelper.reset_threadsafe(false, session)
|
69
70
|
end
|
70
71
|
|
71
72
|
before :each, :exact_false do
|
72
73
|
Capybara.exact = false
|
73
74
|
end
|
75
|
+
# rubocop:enable RSpec/ScatteredSetup
|
74
76
|
|
75
77
|
specs.each do |spec_name, spec_options, block|
|
76
|
-
describe spec_name, *spec_options do
|
78
|
+
describe spec_name, *spec_options do # rubocop:disable RSpec/EmptyExampleGroup
|
77
79
|
class_eval(&block)
|
78
80
|
end
|
79
81
|
end
|
@@ -197,6 +197,15 @@ New line after and before textarea tag
|
|
197
197
|
</label>
|
198
198
|
</p>
|
199
199
|
|
200
|
+
<p>
|
201
|
+
<input type="text" name="form[manufacturer]" list="manufacturers" id="manufacturer"/>
|
202
|
+
<datalist id="manufacturers">
|
203
|
+
<option value="Jaguar">J</option>
|
204
|
+
<option value="Audi">
|
205
|
+
<option value="Mercedes" disabled>
|
206
|
+
</datalist>
|
207
|
+
</p>
|
208
|
+
|
200
209
|
<p>
|
201
210
|
<input type="checkbox" name="form[valueless_checkbox]" id="valueless_checkbox" checked="checked"/>
|
202
211
|
<label for="valueless_checkbox">Valueless Checkbox</label>
|
data/lib/capybara/version.rb
CHANGED
data/spec/basic_node_spec.rb
CHANGED
@@ -95,7 +95,7 @@ RSpec.describe Capybara do
|
|
95
95
|
expect(string.find('//h1').path).to eq('/html/body/div/div[1]/h1')
|
96
96
|
end
|
97
97
|
|
98
|
-
it "allows finding elements and extracting the
|
98
|
+
it "allows finding elements and extracting the value" do
|
99
99
|
expect(string.find('//div/input').value).to eq('bar')
|
100
100
|
expect(string.find('//select').value).to eq('Capybara')
|
101
101
|
end
|
data/spec/capybara_spec.rb
CHANGED
@@ -28,9 +28,8 @@ RSpec.describe Capybara do
|
|
28
28
|
|
29
29
|
describe '.register_server' do
|
30
30
|
it "should add a new server" do
|
31
|
-
handler = double("handler")
|
32
31
|
Capybara.register_server :blob do |_app, _port, _host|
|
33
|
-
|
32
|
+
# do nothing
|
34
33
|
end
|
35
34
|
|
36
35
|
expect(Capybara.servers).to have_key(:blob)
|
@@ -43,9 +42,10 @@ RSpec.describe Capybara do
|
|
43
42
|
end
|
44
43
|
|
45
44
|
it "should default to a proc that calls run_default_server" do
|
46
|
-
mock_app =
|
47
|
-
|
45
|
+
mock_app = Object.new
|
46
|
+
allow(Capybara).to receive(:run_default_server).and_return(true)
|
48
47
|
Capybara.server.call(mock_app, 8000)
|
48
|
+
expect(Capybara).to have_received(:run_default_server).with(mock_app, 8000)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should return a custom server proc" do
|
@@ -110,13 +110,3 @@ RSpec.describe Capybara do
|
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
113
|
-
|
114
|
-
RSpec.describe Capybara::Session do
|
115
|
-
context 'with nonexistent driver' do
|
116
|
-
it "should raise an error" do
|
117
|
-
expect do
|
118
|
-
Capybara::Session.new(:quox, TestApp).driver
|
119
|
-
end.to raise_error(Capybara::DriverNotFoundError)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
data/spec/dsl_spec.rb
CHANGED
@@ -65,7 +65,7 @@ RSpec.describe Capybara::DSL do
|
|
65
65
|
|
66
66
|
describe '#using_driver' do
|
67
67
|
before do
|
68
|
-
expect(Capybara.current_driver).not_to eq(:selenium)
|
68
|
+
expect(Capybara.current_driver).not_to eq(:selenium) # rubocop:disable RSpec/ExpectInHook
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'should set the driver using Capybara.current_driver=' do
|
@@ -250,13 +250,15 @@ RSpec.describe Capybara::DSL do
|
|
250
250
|
end
|
251
251
|
|
252
252
|
it "should provide an 'using_session' shortcut" do
|
253
|
-
|
253
|
+
allow(Capybara).to receive(:using_session)
|
254
254
|
@session.using_session(:name)
|
255
|
+
expect(Capybara).to have_received(:using_session).with(:name)
|
255
256
|
end
|
256
257
|
|
257
258
|
it "should provide a 'using_wait_time' shortcut" do
|
258
|
-
|
259
|
+
allow(Capybara).to receive(:using_wait_time)
|
259
260
|
@session.using_wait_time(6)
|
261
|
+
expect(Capybara).to have_received(:using_wait_time).with(6)
|
260
262
|
end
|
261
263
|
end
|
262
264
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEITCCAwmgAwIBAgIJALROkwd1gZHQMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNV
|
3
|
+
BAYTAlVTMQswCQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMT
|
4
|
+
DWNhcHliYXJhLnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNv
|
5
|
+
bTAeFw0xODA1MDEyMDI5NDVaFw0yODA0MjgyMDI5NDVaMGgxCzAJBgNVBAYTAlVT
|
6
|
+
MQswCQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMTDWNhcHli
|
7
|
+
YXJhLnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNvbTCCASIw
|
8
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7icqMv9uApxRXlcIQ3hSEfmULk
|
9
|
+
7CLT1aUAjEmTiqy8TkFqOeSuA3elnbVBhOW+emrb1uUyje20LvEOHbqYYw90ezlV
|
10
|
+
jqNWUapawqjxb+q7KVNpA5uDCtOHIC/1Z1kxQ+yZP/8St4SvnLGUMsUhu0h+ywJa
|
11
|
+
iGZ2xy8wdfjABUiUImRESdNkT7Xs0wxQGY0/FZ4K5Sec4kroOuvdxKKhyf5Js5xS
|
12
|
+
NRv2tXSMWlKHbYEvYzsVtFgv/4GjqN4wVvbfJmsS8thcyrSYSMN7eE0R6dcbJaLM
|
13
|
+
P/GTiw669zPJP164K84QoabLClgwyG+7mqjm7jutq9qXipwyrGsf/WR5fkUCAwEA
|
14
|
+
AaOBzTCByjAdBgNVHQ4EFgQU4ut9c0oB2OGMlN/nvn0Y7twBzJowgZoGA1UdIwSB
|
15
|
+
kjCBj4AU4ut9c0oB2OGMlN/nvn0Y7twBzJqhbKRqMGgxCzAJBgNVBAYTAlVTMQsw
|
16
|
+
CQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMTDWNhcHliYXJh
|
17
|
+
LnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNvbYIJALROkwd1
|
18
|
+
gZHQMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAANtqdDrdehBt20s
|
19
|
+
IVOsVzOp+tJI8pn6G62WJcZWGsvLLfx6Y6eJSP24r5NW4v39cqCgE76J2znzKxeo
|
20
|
+
VIShAJ1SLodR0GwzFGsl3TVKVoce6gBWZNXgkZyJTNqKGWeme8CH1EG3TqYlcybt
|
21
|
+
EXWLQ6wKndD+uHJIfqUy7HfaUv+TghJGLkv8QYqcAWILQko4xqZ1NULDQ2uhjxei
|
22
|
+
oaQlK9teHlVaH87dONesAg3f5rh9j6nvzGiC/T8ycdEhn/DxJMxRS2+mVZqKkk7U
|
23
|
+
60+e9Foc6qTW8UaMShIFYMspoRnr9baBxzxh9V9LZznwqVTf3vuEIck2l2j2KL/R
|
24
|
+
SOBenCM=
|
25
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEogIBAAKCAQEAvuJyoy/24CnFFeVwhDeFIR+ZQuTsItPVpQCMSZOKrLxOQWo5
|
3
|
+
5K4Dd6WdtUGE5b56atvW5TKN7bQu8Q4duphjD3R7OVWOo1ZRqlrCqPFv6rspU2kD
|
4
|
+
m4MK04cgL/VnWTFD7Jk//xK3hK+csZQyxSG7SH7LAlqIZnbHLzB1+MAFSJQiZERJ
|
5
|
+
02RPtezTDFAZjT8VngrlJ5ziSug6693EoqHJ/kmznFI1G/a1dIxaUodtgS9jOxW0
|
6
|
+
WC//gaOo3jBW9t8maxLy2FzKtJhIw3t4TRHp1xslosw/8ZOLDrr3M8k/XrgrzhCh
|
7
|
+
pssKWDDIb7uaqObuO62r2peKnDKsax/9ZHl+RQIDAQABAoIBABhZepYmgC+IJIPu
|
8
|
+
iLPVAT6AcWR/H0AyFYa+0yZvk7kFLFZb3pa1O+v/TGbavMEx0xvef0Mtd71ixrop
|
9
|
+
OtGarshB65Ycu91KHZDFkx9J7STcSyFAvB0SUkc5bXmwrEZMaoW75tX65T4fyLU+
|
10
|
+
WlubOfC9e9gJBG1NqYrze5kHpaTkR8pBaSxECns5y2HLaMvs1t1kK7snqtGHFRAb
|
11
|
+
deAUl0ONENaO6PF797yM3bsIEgnljdKvaVP3kYq/eAzH4jyw+qG/xq0bZ+nalJzM
|
12
|
+
IL7xRSR/Yak7WZ3QUh99t3dng/z3De4yvhBLq/mc2mIVvt7aERPo/aDG4SrmQ9Jw
|
13
|
+
f1GUT+ECgYEA+i96w2zPHkq0djuuhNaa/R0vybD9hVCdB7enQ8skBzQAQyhp9X9W
|
14
|
+
by38VAbFRVIMrzdfbvwSFrE3Nd9BvyLWl16G+MVu+hq0jhM9p44a62vXvfgQmfFh
|
15
|
+
iXyGkzCTufeLEzOFnP8S+ezacodK1hbQTjllUndn6NUhXcbfozTPfx8CgYEAw1Il
|
16
|
+
xqfU7NkVX6UP/FvTx9aBKqwrD8YOPn9nj26Q45zVbmHJZZIvywlsMDCiJ6JJawEa
|
17
|
+
GSkiZTDpypEvS/2UtLEY0zfbSbQGkBTnagHIFAuVh0AD1EP+kCcnrxA5Vjr8v0WE
|
18
|
+
B0HBfMgoZxa8rmHMpPhrlCCo1ectRgu+dgzEKhsCgYAQ17lwBpc69tSHUSVClCAD
|
19
|
+
AkABWAT5QKARsO91xOs8AOgznTjk6hmrinD+RyZosEliUlv+YMHm/S82VT1b3MCN
|
20
|
+
mDOF8+SwubOGDQ2NhieRycTQaS7U7kcetl9o8VBAqMWYGVPZaeKhKKzcIPeMyiRj
|
21
|
+
38FOd/Nq3U5NveG4XwnJCQKBgGrzmnfTAsbGf+uliMFYzviIPqZNLC8w9i/Gt8BU
|
22
|
+
fMYF5ODSbuNNTxpQiItCtigZtzX+nnnUil76j6o6IbnsmvbuWneeCFetWkKfD7B+
|
23
|
+
VT6UsUYkCXS73rK0nghATAUpu6hIumj22qonN+hrDNo390UGOnIcCBdIxQOr/pjJ
|
24
|
+
mMitAoGAB3tFzlzZHpCE38IqdHL7CKIML9cYJSOm07nFIEUAKN2bUHGsvMH/tMS1
|
25
|
+
I3hyeHxMmYCrOLn7xLqiOVgRjbYS9JiQVdDojqeSvvnLCtY9/lHWi50pqbPfwyfK
|
26
|
+
Og6QoFyxjBEsoSilc6dai58VTO6ufhoJXbXX9PcIl7le4dVPnzE=
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -7,7 +7,7 @@ RSpec.describe Capybara::Selenium::Driver do
|
|
7
7
|
it "should exit with a non-zero exit status" do
|
8
8
|
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
|
9
9
|
browser = Capybara::Selenium::Driver.new(TestApp, options).browser
|
10
|
-
expect(browser).to
|
11
|
-
expect(true).to eq(false)
|
10
|
+
expect(browser).to be_truthy
|
11
|
+
expect(true).to eq(false) # rubocop:disable RSpec/ExpectActual
|
12
12
|
end
|
13
13
|
end
|
@@ -7,7 +7,7 @@ RSpec.describe Capybara::Selenium::Driver do
|
|
7
7
|
it "should exit with a zero exit status" do
|
8
8
|
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
|
9
9
|
browser = Capybara::Selenium::Driver.new(TestApp, options).browser
|
10
|
-
expect(browser).to
|
11
|
-
expect(true).to eq(true)
|
10
|
+
expect(browser).to be_truthy
|
11
|
+
expect(true).to eq(true) # rubocop:disable RSpec/ExpectActual
|
12
12
|
end
|
13
13
|
end
|
data/spec/rack_test_spec.rb
CHANGED
@@ -6,7 +6,7 @@ module TestSessions
|
|
6
6
|
RackTest = Capybara::Session.new(:rack_test, TestApp)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
9
|
+
skipped_tests = %i[
|
10
10
|
js
|
11
11
|
modals
|
12
12
|
screenshot
|
@@ -17,8 +17,9 @@ Capybara::SpecHelper.run_specs TestSessions::RackTest, "RackTest", capybara_skip
|
|
17
17
|
hover
|
18
18
|
about_scheme
|
19
19
|
]
|
20
|
+
Capybara::SpecHelper.run_specs TestSessions::RackTest, "RackTest", capybara_skip: skipped_tests
|
20
21
|
|
21
|
-
RSpec.describe Capybara::Session do
|
22
|
+
RSpec.describe Capybara::Session do # rubocop:disable RSpec/MultipleDescribes
|
22
23
|
context 'with rack test driver' do
|
23
24
|
before do
|
24
25
|
@session = TestSessions::RackTest
|
@@ -65,11 +66,11 @@ RSpec.describe Capybara::Session do
|
|
65
66
|
|
66
67
|
describe "#fill_in" do
|
67
68
|
it "should warn that :fill_options are not supported" do
|
68
|
-
|
69
|
-
.with("Options passed to Node#set but the RackTest driver doesn't support any - ignoring")
|
69
|
+
allow_any_instance_of(Capybara::RackTest::Node).to receive(:warn)
|
70
70
|
@session.visit "/with_html"
|
71
|
-
@session.fill_in 'test_field', with: 'not_monkey', fill_options: { random: true }
|
71
|
+
field = @session.fill_in 'test_field', with: 'not_monkey', fill_options: { random: true }
|
72
72
|
expect(@session).to have_field('test_field', with: 'not_monkey')
|
73
|
+
expect(field.base).to have_received(:warn).with("Options passed to Node#set but the RackTest driver doesn't support any - ignoring")
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
@@ -220,9 +221,10 @@ module CSSHandlerIncludeTester
|
|
220
221
|
raise 'should never be called'
|
221
222
|
end
|
222
223
|
end
|
223
|
-
include CSSHandlerIncludeTester # rubocop:disable Style/MixinUsage
|
224
224
|
|
225
225
|
RSpec.describe Capybara::RackTest::CSSHandlers do
|
226
|
+
include CSSHandlerIncludeTester
|
227
|
+
|
226
228
|
it "should not be extended by global includes" do
|
227
229
|
expect(Capybara::RackTest::CSSHandlers.new).not_to respond_to(:dont_extend_css_handler)
|
228
230
|
end
|
data/spec/result_spec.rb
CHANGED
@@ -79,14 +79,18 @@ RSpec.describe Capybara::Result do
|
|
79
79
|
|
80
80
|
it 'should catch invalid element errors during filtering' do
|
81
81
|
allow_any_instance_of(Capybara::Node::Simple).to receive(:text).and_raise(StandardError)
|
82
|
-
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
|
82
|
+
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
|
83
|
+
instance_double("Capybara::Session", driver: instance_double("Capybara::Driver::Base", invalid_element_errors: [StandardError]))
|
84
|
+
)
|
83
85
|
result = string.all('//li', text: 'Alpha')
|
84
86
|
expect(result.size).to eq 0
|
85
87
|
end
|
86
88
|
|
87
89
|
it 'should return non-invalid element errors during filtering' do
|
88
90
|
allow_any_instance_of(Capybara::Node::Simple).to receive(:text).and_raise(StandardError)
|
89
|
-
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
|
91
|
+
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
|
92
|
+
instance_double("Capybara::Session", driver: instance_double("Capybara::Driver::Base", invalid_element_errors: [ArgumentError]))
|
93
|
+
)
|
90
94
|
expect do
|
91
95
|
string.all('//li', text: 'Alpha').to_a
|
92
96
|
end.to raise_error(StandardError)
|
@@ -139,4 +143,20 @@ RSpec.describe Capybara::Result do
|
|
139
143
|
end
|
140
144
|
end
|
141
145
|
end
|
146
|
+
|
147
|
+
context 'lazy select' do
|
148
|
+
it 'is compatible' do
|
149
|
+
# This test will let us know when JRuby fixes lazy select so we can re-enable it in Result
|
150
|
+
pending 'JRuby has an issue with lazy enumberator evaluation' if RUBY_PLATFORM == 'java'
|
151
|
+
eval_count = 0
|
152
|
+
enum = %w[Text1 Text2 Text3].lazy.select do
|
153
|
+
eval_count += 1
|
154
|
+
true
|
155
|
+
end
|
156
|
+
expect(eval_count).to eq 0
|
157
|
+
enum.next
|
158
|
+
sleep 1
|
159
|
+
expect(eval_count).to eq 1
|
160
|
+
end
|
161
|
+
end
|
142
162
|
end
|
data/spec/rspec/features_spec.rb
CHANGED
@@ -39,7 +39,7 @@ feature "Capybara's feature DSL" do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
scenario "doesn't pollute the Object namespace" do
|
42
|
-
expect(Object.new.respond_to
|
42
|
+
expect(Object.new).not_to respond_to(:feature)
|
43
43
|
end
|
44
44
|
|
45
45
|
feature 'nested features' do
|
@@ -78,6 +78,7 @@ feature "Capybara's feature DSL with driver", driver: :culerity do
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
+
# rubocop:disable RSpec/RepeatedExample
|
81
82
|
xfeature "if xfeature aliases to pending then" do
|
82
83
|
scenario "this should be 'temporarily disabled with xfeature'" do
|
83
84
|
# dummy
|
@@ -87,7 +88,7 @@ xfeature "if xfeature aliases to pending then" do
|
|
87
88
|
end
|
88
89
|
end
|
89
90
|
|
90
|
-
ffeature "if ffeature aliases focused tag then" do
|
91
|
+
ffeature "if ffeature aliases focused tag then" do # rubocop:disable RSpec/Focus
|
91
92
|
scenario "scenario inside this feature has metatag focus tag" do |example|
|
92
93
|
expect(example.metadata[:focus]).to eq true
|
93
94
|
end
|
@@ -96,3 +97,4 @@ ffeature "if ffeature aliases focused tag then" do
|
|
96
97
|
expect(example.metadata[:focus]).to eq true
|
97
98
|
end
|
98
99
|
end
|
100
|
+
# rubocop:enable RSpec/RepeatedExample
|
@@ -8,7 +8,7 @@ RSpec.configuration.before(:each, file_path: "./spec/rspec/scenarios_spec.rb") d
|
|
8
8
|
end
|
9
9
|
|
10
10
|
feature "if fscenario aliases focused tag then" do
|
11
|
-
fscenario "scenario should have focused meta tag" do |example|
|
11
|
+
fscenario "scenario should have focused meta tag" do |example| # rubocop:disable RSpec/Focus
|
12
12
|
expect(example.metadata[:focus]).to eq true
|
13
13
|
end
|
14
14
|
end
|
@@ -5,6 +5,8 @@ require 'capybara/dsl'
|
|
5
5
|
require 'capybara/rspec/matchers'
|
6
6
|
require 'benchmark'
|
7
7
|
|
8
|
+
# rubocop:disable RSpec/ExpectActual
|
9
|
+
|
8
10
|
RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
9
11
|
include Capybara::DSL
|
10
12
|
include Capybara::RSpecMatchers
|
@@ -548,7 +550,7 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
|
548
550
|
end
|
549
551
|
|
550
552
|
context 'with wait' do
|
551
|
-
before
|
553
|
+
before do
|
552
554
|
@session = session
|
553
555
|
@session.visit('/with_js')
|
554
556
|
end
|
@@ -593,7 +595,7 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
|
593
595
|
end
|
594
596
|
|
595
597
|
context 'with wait' do
|
596
|
-
before
|
598
|
+
before do
|
597
599
|
@session = session
|
598
600
|
@session.visit('/with_js')
|
599
601
|
end
|
@@ -840,8 +842,8 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
|
840
842
|
end
|
841
843
|
end
|
842
844
|
|
843
|
-
context "compounding"
|
844
|
-
before
|
845
|
+
context "compounding timing" do
|
846
|
+
before do
|
845
847
|
@session = session
|
846
848
|
@session.visit('/with_js')
|
847
849
|
@el = @session.find(:css, '#reload-me')
|
@@ -934,3 +936,4 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
|
934
936
|
end
|
935
937
|
end
|
936
938
|
end
|
939
|
+
# rubocop:enable RSpec/ExpectActual
|
data/spec/rspec/views_spec.rb
CHANGED
@@ -4,7 +4,8 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
RSpec.describe "capybara/rspec", type: :view do
|
6
6
|
it "allows matchers to be used on strings" do
|
7
|
-
|
7
|
+
html = %(<h1>Test header</h1>)
|
8
|
+
expect(html).to have_css("h1", text: "Test header")
|
8
9
|
end
|
9
10
|
|
10
11
|
it "doesn't include RSpecMatcherProxies" do
|