capybara 3.3.1 → 3.4.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.
- checksums.yaml +4 -4
- data/History.md +16 -0
- data/README.md +5 -7
- data/lib/capybara.rb +7 -6
- data/lib/capybara/config.rb +1 -1
- data/lib/capybara/dsl.rb +2 -2
- data/lib/capybara/helpers.rb +3 -3
- data/lib/capybara/minitest/spec.rb +3 -3
- data/lib/capybara/node/actions.rb +18 -18
- data/lib/capybara/node/base.rb +1 -1
- data/lib/capybara/node/element.rb +2 -2
- data/lib/capybara/node/finders.rb +6 -6
- data/lib/capybara/node/matchers.rb +5 -5
- data/lib/capybara/node/simple.rb +2 -2
- data/lib/capybara/queries/ancestor_query.rb +1 -1
- data/lib/capybara/queries/base_query.rb +12 -11
- data/lib/capybara/queries/current_path_query.rb +1 -1
- data/lib/capybara/queries/selector_query.rb +39 -15
- data/lib/capybara/queries/sibling_query.rb +1 -1
- data/lib/capybara/queries/text_query.rb +1 -1
- data/lib/capybara/rack_test/browser.rb +7 -7
- data/lib/capybara/rack_test/driver.rb +1 -1
- data/lib/capybara/rack_test/form.rb +7 -7
- data/lib/capybara/rack_test/node.rb +16 -16
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/result.rb +8 -4
- data/lib/capybara/rspec/features.rb +4 -4
- data/lib/capybara/rspec/matchers.rb +6 -6
- data/lib/capybara/selector.rb +106 -90
- data/lib/capybara/selector/css.rb +4 -4
- data/lib/capybara/selector/filter_set.rb +52 -8
- data/lib/capybara/selector/selector.rb +39 -15
- data/lib/capybara/selenium/driver.rb +10 -10
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +8 -0
- data/lib/capybara/selenium/node.rb +9 -10
- data/lib/capybara/selenium/nodes/chrome_node.rb +18 -0
- data/lib/capybara/selenium/nodes/marionette_node.rb +32 -7
- data/lib/capybara/server.rb +3 -3
- data/lib/capybara/server/animation_disabler.rb +1 -1
- data/lib/capybara/server/middleware.rb +1 -1
- data/lib/capybara/session.rb +23 -19
- data/lib/capybara/session/config.rb +18 -3
- data/lib/capybara/spec/public/test.js +1 -1
- data/lib/capybara/spec/session/accept_alert_spec.rb +10 -10
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/all_spec.rb +33 -32
- data/lib/capybara/spec/session/ancestor_spec.rb +19 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +38 -38
- data/lib/capybara/spec/session/assert_current_path_spec.rb +16 -16
- data/lib/capybara/spec/session/assert_selector_spec.rb +53 -53
- data/lib/capybara/spec/session/assert_style_spec.rb +3 -3
- data/lib/capybara/spec/session/assert_text_spec.rb +31 -30
- data/lib/capybara/spec/session/assert_title_spec.rb +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +51 -52
- data/lib/capybara/spec/session/body_spec.rb +6 -6
- data/lib/capybara/spec/session/check_spec.rb +52 -47
- data/lib/capybara/spec/session/choose_spec.rb +32 -32
- data/lib/capybara/spec/session/click_button_spec.rb +103 -103
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +24 -23
- data/lib/capybara/spec/session/click_link_spec.rb +49 -48
- data/lib/capybara/spec/session/current_scope_spec.rb +7 -7
- data/lib/capybara/spec/session/current_url_spec.rb +26 -27
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
- data/lib/capybara/spec/session/element/assert_match_selector_spec.rb +8 -8
- data/lib/capybara/spec/session/element/match_css_spec.rb +10 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +6 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +51 -51
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +15 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +7 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +43 -42
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +7 -7
- data/lib/capybara/spec/session/find_field_spec.rb +32 -30
- data/lib/capybara/spec/session/find_link_spec.rb +21 -21
- data/lib/capybara/spec/session/find_spec.rb +153 -135
- data/lib/capybara/spec/session/first_spec.rb +41 -41
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +17 -17
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +31 -17
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/has_button_spec.rb +13 -13
- data/lib/capybara/spec/session/has_css_spec.rb +133 -131
- data/lib/capybara/spec/session/has_current_path_spec.rb +29 -29
- data/lib/capybara/spec/session/has_field_spec.rb +58 -58
- data/lib/capybara/spec/session/has_link_spec.rb +4 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +24 -24
- data/lib/capybara/spec/session/has_select_spec.rb +43 -43
- data/lib/capybara/spec/session/has_selector_spec.rb +71 -71
- data/lib/capybara/spec/session/has_style_spec.rb +3 -3
- data/lib/capybara/spec/session/has_table_spec.rb +4 -4
- data/lib/capybara/spec/session/has_text_spec.rb +53 -52
- data/lib/capybara/spec/session/has_title_spec.rb +14 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +39 -38
- data/lib/capybara/spec/session/headers_spec.rb +1 -1
- data/lib/capybara/spec/session/html_spec.rb +6 -6
- data/lib/capybara/spec/session/node_spec.rb +129 -123
- data/lib/capybara/spec/session/node_wrapper_spec.rb +10 -7
- data/lib/capybara/spec/session/refresh_spec.rb +4 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +28 -28
- data/lib/capybara/spec/session/response_code_spec.rb +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +37 -37
- data/lib/capybara/spec/session/save_screenshot_spec.rb +6 -6
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/select_spec.rb +81 -81
- data/lib/capybara/spec/session/selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +23 -23
- data/lib/capybara/spec/session/title_spec.rb +5 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +24 -20
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +48 -49
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +16 -16
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +2 -2
- data/lib/capybara/spec/session/window/window_spec.rb +4 -4
- data/lib/capybara/spec/session/window/within_window_spec.rb +14 -14
- data/lib/capybara/spec/session/within_spec.rb +41 -41
- data/lib/capybara/spec/spec_helper.rb +11 -9
- data/lib/capybara/spec/test_app.rb +18 -17
- data/lib/capybara/spec/views/form.erb +29 -31
- data/lib/capybara/spec/views/with_html.erb +2 -2
- data/lib/capybara/version.rb +1 -1
- data/spec/basic_node_spec.rb +23 -23
- data/spec/capybara_spec.rb +20 -20
- data/spec/css_splitter_spec.rb +7 -7
- data/spec/dsl_spec.rb +37 -32
- data/spec/filter_set_spec.rb +4 -4
- data/spec/fixtures/selenium_driver_rspec_failure.rb +1 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +1 -1
- data/spec/minitest_spec.rb +4 -4
- data/spec/minitest_spec_spec.rb +23 -23
- data/spec/per_session_config_spec.rb +5 -5
- data/spec/rack_test_spec.rb +44 -44
- data/spec/result_spec.rb +14 -14
- data/spec/rspec/features_spec.rb +13 -13
- data/spec/rspec/scenarios_spec.rb +4 -4
- data/spec/rspec/shared_spec_matchers.rb +282 -281
- data/spec/rspec/views_spec.rb +3 -3
- data/spec/rspec_matchers_spec.rb +10 -10
- data/spec/rspec_spec.rb +29 -29
- data/spec/selector_spec.rb +64 -64
- data/spec/selenium_spec_chrome.rb +14 -22
- data/spec/selenium_spec_chrome_remote.rb +28 -8
- data/spec/selenium_spec_edge.rb +9 -4
- data/spec/selenium_spec_firefox_remote.rb +87 -0
- data/spec/selenium_spec_ie.rb +9 -4
- data/spec/selenium_spec_marionette.rb +42 -18
- data/spec/server_spec.rb +29 -27
- data/spec/session_spec.rb +17 -17
- data/spec/shared_selenium_session.rb +70 -52
- data/spec/spec_helper.rb +1 -1
- metadata +4 -2
@@ -5,128 +5,128 @@ Capybara::SpecHelper.spec '#first' do
|
|
5
5
|
@session.visit('/with_html')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
8
|
+
it 'should find the first element using the given locator' do
|
9
9
|
expect(@session.first('//h1').text).to eq('This is a test')
|
10
10
|
expect(@session.first("//input[@id='test_field']").value).to eq('monkey')
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
13
|
+
it 'should raise ElementNotFound when nothing was found' do
|
14
14
|
expect do
|
15
15
|
@session.first('//div[@id="nosuchthing"]')
|
16
16
|
end.to raise_error Capybara::ElementNotFound
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it 'should return nil when nothing was found if count options allow no results' do
|
20
20
|
expect(@session.first('//div[@id="nosuchthing"]', minimum: 0)).to be_nil
|
21
21
|
expect(@session.first('//div[@id="nosuchthing"]', count: 0)).to be_nil
|
22
22
|
expect(@session.first('//div[@id="nosuchthing"]', between: (0..3))).to be_nil
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
25
|
+
it 'should accept an XPath instance' do
|
26
26
|
@session.visit('/form')
|
27
27
|
@xpath = Capybara::Selector.all[:fillable_field].call('First Name')
|
28
28
|
expect(@xpath).to be_a(::XPath::Union)
|
29
29
|
expect(@session.first(@xpath).value).to eq('John')
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it 'should raise when unused parameters are passed' do
|
33
33
|
expect do
|
34
34
|
@session.first(:css, 'h1', 'unused text')
|
35
35
|
end.to raise_error ArgumentError, /Unused parameters passed.*unused text/
|
36
36
|
end
|
37
37
|
|
38
|
-
context
|
39
|
-
it
|
38
|
+
context 'with css selectors' do
|
39
|
+
it 'should find the first element using the given selector' do
|
40
40
|
expect(@session.first(:css, 'h1').text).to eq('This is a test')
|
41
41
|
expect(@session.first(:css, "input[id='test_field']").value).to eq('monkey')
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
context
|
46
|
-
it
|
45
|
+
context 'with xpath selectors' do
|
46
|
+
it 'should find the first element using the given locator' do
|
47
47
|
expect(@session.first(:xpath, '//h1').text).to eq('This is a test')
|
48
48
|
expect(@session.first(:xpath, "//input[@id='test_field']").value).to eq('monkey')
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
context
|
52
|
+
context 'with css as default selector' do
|
53
53
|
before { Capybara.default_selector = :css }
|
54
54
|
|
55
|
-
it
|
55
|
+
it 'should find the first element using the given locator' do
|
56
56
|
expect(@session.first('h1').text).to eq('This is a test')
|
57
57
|
expect(@session.first("input[id='test_field']").value).to eq('monkey')
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
context
|
62
|
-
it
|
61
|
+
context 'with visible filter' do
|
62
|
+
it 'should only find visible nodes when true' do
|
63
63
|
expect do
|
64
|
-
@session.first(:css,
|
64
|
+
@session.first(:css, 'a#invisible', visible: true)
|
65
65
|
end.to raise_error Capybara::ElementNotFound
|
66
66
|
end
|
67
67
|
|
68
|
-
it
|
69
|
-
expect(@session.first(:css,
|
70
|
-
expect(@session.first(:css,
|
71
|
-
expect(@session.first(:css,
|
68
|
+
it 'should find nodes regardless of whether they are invisible when false' do
|
69
|
+
expect(@session.first(:css, 'a#invisible', visible: false)).to be_truthy
|
70
|
+
expect(@session.first(:css, 'a#invisible', visible: false, text: 'hidden link')).to be_truthy
|
71
|
+
expect(@session.first(:css, 'a#visible', visible: false)).to be_truthy
|
72
72
|
end
|
73
73
|
|
74
|
-
it
|
75
|
-
expect(@session.first(:css,
|
76
|
-
expect(@session.first(:css,
|
77
|
-
expect(@session.first(:css,
|
74
|
+
it 'should find nodes regardless of whether they are invisible when :all' do
|
75
|
+
expect(@session.first(:css, 'a#invisible', visible: :all)).to be_truthy
|
76
|
+
expect(@session.first(:css, 'a#invisible', visible: :all, text: 'hidden link')).to be_truthy
|
77
|
+
expect(@session.first(:css, 'a#visible', visible: :all)).to be_truthy
|
78
78
|
end
|
79
79
|
|
80
|
-
it
|
81
|
-
expect(@session.first(:css,
|
82
|
-
expect(@session.first(:css,
|
80
|
+
it 'should find only hidden nodes when :hidden' do
|
81
|
+
expect(@session.first(:css, 'a#invisible', visible: :hidden)).to be_truthy
|
82
|
+
expect(@session.first(:css, 'a#invisible', visible: :hidden, text: 'hidden link')).to be_truthy
|
83
83
|
expect do
|
84
|
-
@session.first(:css,
|
84
|
+
@session.first(:css, 'a#invisible', visible: :hidden, text: 'not hidden link')
|
85
85
|
end.to raise_error Capybara::ElementNotFound
|
86
86
|
expect do
|
87
|
-
@session.first(:css,
|
87
|
+
@session.first(:css, 'a#visible', visible: :hidden)
|
88
88
|
end.to raise_error Capybara::ElementNotFound
|
89
89
|
end
|
90
90
|
|
91
|
-
it
|
91
|
+
it 'should find only visible nodes when :visible' do
|
92
92
|
expect do
|
93
|
-
@session.first(:css,
|
93
|
+
@session.first(:css, 'a#invisible', visible: :visible)
|
94
94
|
end.to raise_error Capybara::ElementNotFound
|
95
95
|
expect do
|
96
|
-
@session.first(:css,
|
96
|
+
@session.first(:css, 'a#invisible', visible: :visible, text: 'hidden link')
|
97
97
|
end.to raise_error Capybara::ElementNotFound
|
98
|
-
expect(@session.first(:css,
|
98
|
+
expect(@session.first(:css, 'a#visible', visible: :visible)).to be_truthy
|
99
99
|
end
|
100
100
|
|
101
|
-
it
|
101
|
+
it 'should default to Capybara.ignore_hidden_elements' do
|
102
102
|
Capybara.ignore_hidden_elements = true
|
103
103
|
expect do
|
104
|
-
@session.first(:css,
|
104
|
+
@session.first(:css, 'a#invisible')
|
105
105
|
end.to raise_error Capybara::ElementNotFound
|
106
106
|
Capybara.ignore_hidden_elements = false
|
107
|
-
expect(@session.first(:css,
|
108
|
-
expect(@session.first(:css,
|
107
|
+
expect(@session.first(:css, 'a#invisible')).to be_truthy
|
108
|
+
expect(@session.first(:css, 'a')).to be_truthy
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
|
-
context
|
112
|
+
context 'within a scope' do
|
113
113
|
before do
|
114
114
|
@session.visit('/with_scope')
|
115
115
|
end
|
116
116
|
|
117
|
-
it
|
117
|
+
it 'should find the first element using the given locator' do
|
118
118
|
@session.within(:xpath, "//div[@id='for_bar']") do
|
119
119
|
expect(@session.first('.//form')).to be_truthy
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
124
|
-
context
|
124
|
+
context 'waiting behavior', requires: [:js] do
|
125
125
|
before do
|
126
126
|
@session.visit('/with_js')
|
127
127
|
end
|
128
128
|
|
129
|
-
it
|
129
|
+
it 'should not wait if minimum: 0' do
|
130
130
|
@session.click_link('clickable')
|
131
131
|
Capybara.using_wait_time(3) do
|
132
132
|
start_time = Time.now
|
@@ -135,14 +135,14 @@ Capybara::SpecHelper.spec '#first' do
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
it
|
138
|
+
it 'should wait for at least one match by default' do
|
139
139
|
Capybara.using_wait_time(3) do
|
140
140
|
@session.click_link('clickable')
|
141
141
|
expect(@session.first(:css, 'a#has-been-clicked')).not_to be_nil
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
|
-
it
|
145
|
+
it 'should raise an error after waiting if no match' do
|
146
146
|
@session.click_link('clickable')
|
147
147
|
Capybara.using_wait_time(3) do
|
148
148
|
start_time = Time.now
|
@@ -5,19 +5,19 @@ Capybara::SpecHelper.spec '#frame_title', requires: [:frames] do
|
|
5
5
|
@session.visit('/within_frames')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
9
|
-
@session.within_frame(
|
8
|
+
it 'should return the title in a frame' do
|
9
|
+
@session.within_frame('frameOne') do
|
10
10
|
expect(@session.driver.frame_title).to eq 'This is the title of frame one'
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
15
|
-
@session.within_frame(
|
14
|
+
it 'should return the title in FrameTwo' do
|
15
|
+
@session.within_frame('frameTwo') do
|
16
16
|
expect(@session.driver.frame_title).to eq 'This is the title of frame two'
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it 'should return the title in the main frame' do
|
21
21
|
expect(@session.driver.frame_title).to eq 'With Frames'
|
22
22
|
end
|
23
23
|
end
|
@@ -5,19 +5,19 @@ Capybara::SpecHelper.spec '#frame_url', requires: [:frames] do
|
|
5
5
|
@session.visit('/within_frames')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
9
|
-
@session.within_frame(
|
8
|
+
it 'should return the url in a frame' do
|
9
|
+
@session.within_frame('frameOne') do
|
10
10
|
expect(@session.driver.frame_url).to end_with '/frame_one'
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
15
|
-
@session.within_frame(
|
14
|
+
it 'should return the url in FrameTwo' do
|
15
|
+
@session.within_frame('frameTwo') do
|
16
16
|
expect(@session.driver.frame_url).to end_with '/frame_two'
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it 'should return the url in the main frame' do
|
21
21
|
expect(@session.driver.frame_url).to end_with('/within_frames')
|
22
22
|
end
|
23
23
|
end
|
@@ -10,45 +10,45 @@ Capybara::SpecHelper.spec '#switch_to_frame', requires: [:frames] do
|
|
10
10
|
@session.switch_to_frame(:top)
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
14
|
-
frame = @session.find(:frame,
|
13
|
+
it 'should find the div in frameOne' do
|
14
|
+
frame = @session.find(:frame, 'frameOne')
|
15
15
|
@session.switch_to_frame(frame)
|
16
16
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
20
|
-
frame = @session.find(:frame,
|
19
|
+
it 'should find the div in FrameTwo' do
|
20
|
+
frame = @session.find(:frame, 'frameTwo')
|
21
21
|
@session.switch_to_frame(frame)
|
22
22
|
expect(@session.find("//*[@id='divInFrameTwo']").text).to eql 'This is the text of divInFrameTwo'
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
26
|
-
frame = @session.find(:frame,
|
25
|
+
it 'should return to the parent frame when told to' do
|
26
|
+
frame = @session.find(:frame, 'frameOne')
|
27
27
|
@session.switch_to_frame(frame)
|
28
28
|
@session.switch_to_frame(:parent)
|
29
29
|
expect(@session.find("//*[@id='divInMainWindow']").text).to eql 'This is the text for divInMainWindow'
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
33
|
-
frame = @session.find(:frame,
|
32
|
+
it 'should be able to switch to nested frames' do
|
33
|
+
frame = @session.find(:frame, 'parentFrame')
|
34
34
|
@session.switch_to_frame frame
|
35
|
-
frame = @session.find(:frame,
|
35
|
+
frame = @session.find(:frame, 'childFrame')
|
36
36
|
@session.switch_to_frame frame
|
37
|
-
frame = @session.find(:frame,
|
37
|
+
frame = @session.find(:frame, 'grandchildFrame1')
|
38
38
|
@session.switch_to_frame frame
|
39
39
|
expect(@session).to have_selector(:css, '#divInFrameOne', text: 'This is the text of divInFrameOne')
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
42
|
+
it 'should reset scope when changing frames' do
|
43
43
|
frame = @session.find(:frame, 'parentFrame')
|
44
44
|
@session.within(:css, '#divInMainWindow') do
|
45
45
|
@session.switch_to_frame(frame)
|
46
|
-
expect(@session.has_selector?(:css,
|
46
|
+
expect(@session.has_selector?(:css, 'iframe#childFrame')).to be true
|
47
47
|
@session.switch_to_frame(:parent)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
it
|
51
|
+
it 'works if the frame is closed', requires: %i[frames js] do
|
52
52
|
frame = @session.find(:frame, 'parentFrame')
|
53
53
|
@session.switch_to_frame frame
|
54
54
|
frame = @session.find(:frame, 'childFrame')
|
@@ -61,10 +61,10 @@ Capybara::SpecHelper.spec '#switch_to_frame', requires: [:frames] do
|
|
61
61
|
@session.switch_to_frame :parent # Go back to top
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
65
|
-
frame = @session.find(:frame,
|
64
|
+
it 'can return to the top frame', requires: [:frames] do
|
65
|
+
frame = @session.find(:frame, 'parentFrame')
|
66
66
|
@session.switch_to_frame frame
|
67
|
-
frame = @session.find(:frame,
|
67
|
+
frame = @session.find(:frame, 'childFrame')
|
68
68
|
@session.switch_to_frame frame
|
69
69
|
@session.switch_to_frame :top
|
70
70
|
expect(@session.find("//*[@id='divInMainWindow']").text).to eql 'This is the text for divInMainWindow'
|
@@ -94,7 +94,7 @@ Capybara::SpecHelper.spec '#switch_to_frame', requires: [:frames] do
|
|
94
94
|
frame = @session.find(:frame, 'parentFrame')
|
95
95
|
@session.switch_to_frame(frame)
|
96
96
|
@session.within(:css, '#parentBody') do
|
97
|
-
@session.switch_to_frame(@session.find(:frame,
|
97
|
+
@session.switch_to_frame(@session.find(:frame, 'childFrame'))
|
98
98
|
expect do
|
99
99
|
@session.switch_to_frame(:top)
|
100
100
|
end.to raise_error(Capybara::ScopeError, "`switch_to_frame(:top)` cannot be called from inside a descendant frame's `within` block.")
|
@@ -5,56 +5,70 @@ Capybara::SpecHelper.spec '#within_frame', requires: [:frames] do
|
|
5
5
|
@session.visit('/within_frames')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
9
|
-
@session.within_frame(
|
8
|
+
it 'should find the div in frameOne' do
|
9
|
+
@session.within_frame('frameOne') do
|
10
10
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
15
|
-
@session.within_frame(
|
14
|
+
it 'should find the div in FrameTwo' do
|
15
|
+
@session.within_frame('frameTwo') do
|
16
16
|
expect(@session.find("//*[@id='divInFrameTwo']").text).to eql 'This is the text of divInFrameTwo'
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
21
|
-
@session.within_frame(
|
20
|
+
it 'should find the text div in the main window after finding text in frameOne' do
|
21
|
+
@session.within_frame('frameOne') do
|
22
22
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
23
23
|
end
|
24
24
|
expect(@session.find("//*[@id='divInMainWindow']").text).to eql 'This is the text for divInMainWindow'
|
25
25
|
end
|
26
26
|
|
27
|
-
it
|
28
|
-
@session.within_frame(
|
27
|
+
it 'should find the text div in the main window after finding text in frameTwo' do
|
28
|
+
@session.within_frame('frameTwo') do
|
29
29
|
expect(@session.find("//*[@id='divInFrameTwo']").text).to eql 'This is the text of divInFrameTwo'
|
30
30
|
end
|
31
31
|
expect(@session.find("//*[@id='divInMainWindow']").text).to eql 'This is the text for divInMainWindow'
|
32
32
|
end
|
33
33
|
|
34
|
-
it
|
35
|
-
expect(@session.within_frame(
|
34
|
+
it 'should return the result of executing the block' do
|
35
|
+
expect(@session.within_frame('frameOne') { 'return value' }).to eql 'return value'
|
36
36
|
end
|
37
37
|
|
38
|
-
it
|
38
|
+
it 'should find the div given Element' do
|
39
39
|
element = @session.find(:id, 'frameOne')
|
40
40
|
@session.within_frame element do
|
41
41
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
it
|
45
|
+
it 'should find the div given selector and locator' do
|
46
46
|
@session.within_frame(:css, '#frameOne') do
|
47
47
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
it
|
51
|
+
it 'should default to the :frame selector kind when only options passed' do
|
52
52
|
@session.within_frame(name: 'my frame one') do
|
53
53
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
it
|
57
|
+
it 'should default to the :frame selector when no options passed' do
|
58
|
+
container = @session.find(:css, '#divInMainWindow')
|
59
|
+
@session.within(container) do
|
60
|
+
# Ensure only one frame in scope
|
61
|
+
@session.within_frame do
|
62
|
+
expect(@session).to have_css('body#parentBody')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
expect do
|
66
|
+
# Multiple frames in scope here
|
67
|
+
@session.within_frame { ; }
|
68
|
+
end.to raise_error Capybara::Ambiguous
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should find multiple nested frames' do
|
58
72
|
@session.within_frame 'parentFrame' do
|
59
73
|
@session.within_frame 'childFrame' do
|
60
74
|
@session.within_frame 'grandchildFrame1' do
|
@@ -67,15 +81,15 @@ Capybara::SpecHelper.spec '#within_frame', requires: [:frames] do
|
|
67
81
|
end
|
68
82
|
end
|
69
83
|
|
70
|
-
it
|
84
|
+
it 'should reset scope when changing frames' do
|
71
85
|
@session.within(:css, '#divInMainWindow') do
|
72
86
|
@session.within_frame 'innerParentFrame' do
|
73
|
-
expect(@session.has_selector?(:css,
|
87
|
+
expect(@session.has_selector?(:css, 'iframe#childFrame')).to be true
|
74
88
|
end
|
75
89
|
end
|
76
90
|
end
|
77
91
|
|
78
|
-
it
|
92
|
+
it 'works if the frame is closed', requires: %i[frames js] do
|
79
93
|
@session.within_frame 'parentFrame' do
|
80
94
|
@session.within_frame 'childFrame' do
|
81
95
|
@session.click_link 'Close Window'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#go_back', requires: [:js] do
|
4
|
-
it
|
4
|
+
it 'should fetch a response from the driver from the previous page' do
|
5
5
|
@session.visit('/')
|
6
6
|
expect(@session).to have_content('Hello world!')
|
7
7
|
@session.visit('/foo')
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#go_forward', requires: [:js] do
|
4
|
-
it
|
4
|
+
it 'should fetch a response from the driver from the previous page' do
|
5
5
|
@session.visit('/')
|
6
6
|
expect(@session).to have_content('Hello world!')
|
7
7
|
@session.visit('/foo')
|
@@ -5,26 +5,26 @@ Capybara::SpecHelper.spec '#have_all_selectors' do
|
|
5
5
|
@session.visit('/with_html')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
9
|
-
expect(@session).to have_all_of_selectors(:css,
|
8
|
+
it 'should be true if the given selectors are on the page' do
|
9
|
+
expect(@session).to have_all_of_selectors(:css, 'p a#foo', 'h2#h2one', 'h2#h2two')
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
12
|
+
it 'should be false if any of the given selectors are not on the page' do
|
13
13
|
expect do
|
14
|
-
expect(@session).to have_all_of_selectors(:css,
|
14
|
+
expect(@session).to have_all_of_selectors(:css, 'p a#foo', 'h2#h2three', 'h2#h2one')
|
15
15
|
end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
|
16
16
|
end
|
17
17
|
|
18
|
-
it
|
18
|
+
it 'should use default selector' do
|
19
19
|
Capybara.default_selector = :css
|
20
|
-
expect(@session).to have_all_of_selectors(
|
20
|
+
expect(@session).to have_all_of_selectors('p a#foo', 'h2#h2two', 'h2#h2one')
|
21
21
|
expect do
|
22
|
-
expect(@session).to have_all_of_selectors(
|
22
|
+
expect(@session).to have_all_of_selectors('p a#foo', 'h2#h2three', 'h2#h2one')
|
23
23
|
end.to raise_error ::RSpec::Expectations::ExpectationNotMetError
|
24
24
|
end
|
25
25
|
|
26
|
-
context
|
27
|
-
it
|
26
|
+
context 'should respect scopes' do
|
27
|
+
it 'when used with `within`' do
|
28
28
|
@session.within "//p[@id='first']" do
|
29
29
|
expect(@session).to have_all_of_selectors(".//a[@id='foo']")
|
30
30
|
expect do
|
@@ -33,7 +33,7 @@ Capybara::SpecHelper.spec '#have_all_selectors' do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
it
|
36
|
+
it 'when called on elements' do
|
37
37
|
el = @session.find "//p[@id='first']"
|
38
38
|
expect(el).to have_all_of_selectors(".//a[@id='foo']")
|
39
39
|
expect do
|
@@ -42,8 +42,8 @@ Capybara::SpecHelper.spec '#have_all_selectors' do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
context
|
46
|
-
it
|
45
|
+
context 'with options' do
|
46
|
+
it 'should apply options to all locators' do
|
47
47
|
expect(@session).to have_all_of_selectors(:field, 'normal', 'additional_newline', type: :textarea)
|
48
48
|
expect do
|
49
49
|
expect(@session).to have_all_of_selectors(:field, 'normal', 'test_field', 'additional_newline', type: :textarea)
|
@@ -51,19 +51,19 @@ Capybara::SpecHelper.spec '#have_all_selectors' do
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
context
|
55
|
-
it
|
54
|
+
context 'with wait', requires: [:js] do
|
55
|
+
it 'should not raise error if all the elements appear before given wait duration' do
|
56
56
|
Capybara.using_wait_time(0.1) do
|
57
57
|
@session.visit('/with_js')
|
58
58
|
@session.click_link('Click me')
|
59
|
-
expect(@session).to have_all_of_selectors(:css,
|
59
|
+
expect(@session).to have_all_of_selectors(:css, 'a#clickable', 'a#has-been-clicked', '#drag', wait: 5)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
64
|
+
it 'cannot be negated' do
|
65
65
|
expect do
|
66
|
-
expect(@session).not_to have_all_of_selectors(:css,
|
66
|
+
expect(@session).not_to have_all_of_selectors(:css, 'p a#foo', 'h2#h2one', 'h2#h2two')
|
67
67
|
end.to raise_error ArgumentError
|
68
68
|
end
|
69
69
|
end
|