capybara 2.18.0 → 3.0.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 +55 -1
- data/README.md +18 -17
- data/lib/capybara/config.rb +11 -58
- data/lib/capybara/cucumber.rb +2 -3
- data/lib/capybara/driver/base.rb +15 -16
- data/lib/capybara/driver/node.rb +5 -4
- data/lib/capybara/dsl.rb +1 -0
- data/lib/capybara/helpers.rb +19 -29
- data/lib/capybara/minitest/spec.rb +15 -14
- data/lib/capybara/minitest.rb +139 -138
- data/lib/capybara/node/actions.rb +60 -81
- data/lib/capybara/node/base.rb +11 -18
- data/lib/capybara/node/document.rb +2 -2
- data/lib/capybara/node/document_matchers.rb +8 -8
- data/lib/capybara/node/element.rb +30 -40
- data/lib/capybara/node/finders.rb +62 -70
- data/lib/capybara/node/matchers.rb +50 -71
- data/lib/capybara/node/simple.rb +11 -17
- data/lib/capybara/queries/ancestor_query.rb +11 -7
- data/lib/capybara/queries/base_query.rb +22 -18
- data/lib/capybara/queries/current_path_query.rb +8 -24
- data/lib/capybara/queries/match_query.rb +3 -7
- data/lib/capybara/queries/selector_query.rb +92 -95
- data/lib/capybara/queries/sibling_query.rb +4 -4
- data/lib/capybara/queries/text_query.rb +35 -35
- data/lib/capybara/queries/title_query.rb +8 -11
- data/lib/capybara/rack_test/browser.rb +15 -18
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +6 -10
- data/lib/capybara/rack_test/form.rb +50 -40
- data/lib/capybara/rack_test/node.rb +93 -63
- data/lib/capybara/rails.rb +2 -6
- data/lib/capybara/result.rb +22 -22
- data/lib/capybara/rspec/compound.rb +5 -10
- data/lib/capybara/rspec/features.rb +17 -48
- data/lib/capybara/rspec/matcher_proxies.rb +31 -15
- data/lib/capybara/rspec/matchers.rb +70 -61
- data/lib/capybara/rspec.rb +5 -10
- data/lib/capybara/selector/css.rb +6 -11
- data/lib/capybara/selector/filter.rb +1 -17
- data/lib/capybara/selector/filter_set.rb +18 -15
- data/lib/capybara/selector/filters/base.rb +7 -6
- data/lib/capybara/selector/filters/expression_filter.rb +6 -23
- data/lib/capybara/selector/filters/node_filter.rb +2 -12
- data/lib/capybara/selector/selector.rb +28 -34
- data/lib/capybara/selector.rb +129 -117
- data/lib/capybara/selenium/driver.rb +131 -125
- data/lib/capybara/selenium/node.rb +197 -115
- data/lib/capybara/server.rb +3 -2
- data/lib/capybara/session/config.rb +47 -67
- data/lib/capybara/session/matchers.rb +8 -7
- data/lib/capybara/session.rb +138 -224
- data/lib/capybara/spec/public/test.js +25 -4
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -0
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -2
- data/lib/capybara/spec/session/accept_prompt_spec.rb +1 -0
- data/lib/capybara/spec/session/all_spec.rb +31 -18
- data/lib/capybara/spec/session/ancestor_spec.rb +6 -8
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +6 -5
- data/lib/capybara/spec/session/assert_current_path.rb +12 -11
- data/lib/capybara/spec/session/assert_selector.rb +1 -0
- data/lib/capybara/spec/session/assert_text.rb +23 -23
- data/lib/capybara/spec/session/assert_title.rb +13 -3
- data/lib/capybara/spec/session/attach_file_spec.rb +51 -30
- data/lib/capybara/spec/session/body_spec.rb +1 -0
- data/lib/capybara/spec/session/check_spec.rb +7 -6
- data/lib/capybara/spec/session/choose_spec.rb +5 -4
- data/lib/capybara/spec/session/click_button_spec.rb +24 -32
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +8 -7
- data/lib/capybara/spec/session/click_link_spec.rb +8 -7
- data/lib/capybara/spec/session/current_scope_spec.rb +4 -3
- data/lib/capybara/spec/session/current_url_spec.rb +17 -6
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +1 -1
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +1 -0
- data/lib/capybara/spec/session/element/assert_match_selector.rb +1 -1
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +1 -1
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +5 -5
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +3 -2
- data/lib/capybara/spec/session/evaluate_script_spec.rb +4 -3
- data/lib/capybara/spec/session/execute_script_spec.rb +4 -3
- data/lib/capybara/spec/session/fill_in_spec.rb +30 -5
- data/lib/capybara/spec/session/find_button_spec.rb +4 -3
- data/lib/capybara/spec/session/find_by_id_spec.rb +2 -1
- data/lib/capybara/spec/session/find_field_spec.rb +9 -15
- data/lib/capybara/spec/session/find_link_spec.rb +6 -5
- data/lib/capybara/spec/session/find_spec.rb +37 -31
- data/lib/capybara/spec/session/first_spec.rb +60 -33
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +2 -1
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +9 -16
- data/lib/capybara/spec/session/go_back_spec.rb +1 -0
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -0
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +15 -15
- data/lib/capybara/spec/session/has_button_spec.rb +2 -1
- data/lib/capybara/spec/session/has_css_spec.rb +3 -2
- data/lib/capybara/spec/session/has_current_path_spec.rb +12 -28
- data/lib/capybara/spec/session/has_field_spec.rb +4 -3
- data/lib/capybara/spec/session/has_link_spec.rb +1 -0
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/has_select_spec.rb +30 -29
- data/lib/capybara/spec/session/has_selector_spec.rb +5 -4
- data/lib/capybara/spec/session/has_table_spec.rb +2 -1
- data/lib/capybara/spec/session/has_text_spec.rb +9 -13
- data/lib/capybara/spec/session/has_title_spec.rb +1 -0
- data/lib/capybara/spec/session/has_xpath_spec.rb +1 -0
- data/lib/capybara/spec/session/headers.rb +2 -1
- data/lib/capybara/spec/session/html_spec.rb +1 -0
- data/lib/capybara/spec/session/node_spec.rb +91 -56
- data/lib/capybara/spec/session/node_wrapper_spec.rb +36 -0
- data/lib/capybara/spec/session/refresh_spec.rb +6 -2
- data/lib/capybara/spec/session/reset_session_spec.rb +19 -0
- data/lib/capybara/spec/session/response_code.rb +1 -0
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +1 -0
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +6 -11
- data/lib/capybara/spec/session/save_page_spec.rb +1 -17
- data/lib/capybara/spec/session/save_screenshot_spec.rb +3 -3
- data/lib/capybara/spec/session/select_spec.rb +20 -20
- data/lib/capybara/spec/session/selectors_spec.rb +2 -2
- data/lib/capybara/spec/session/sibling_spec.rb +1 -1
- data/lib/capybara/spec/session/text_spec.rb +17 -3
- data/lib/capybara/spec/session/title_spec.rb +11 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +4 -3
- data/lib/capybara/spec/session/unselect_spec.rb +6 -5
- data/lib/capybara/spec/session/visit_spec.rb +9 -3
- data/lib/capybara/spec/session/window/become_closed_spec.rb +2 -1
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +2 -1
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +2 -1
- data/lib/capybara/spec/session/window/window_spec.rb +12 -12
- data/lib/capybara/spec/session/window/windows_spec.rb +2 -3
- data/lib/capybara/spec/session/window/within_window_spec.rb +15 -71
- data/lib/capybara/spec/session/within_spec.rb +1 -0
- data/lib/capybara/spec/spec_helper.rb +34 -18
- data/lib/capybara/spec/test_app.rb +17 -9
- data/lib/capybara/spec/views/form.erb +7 -0
- data/lib/capybara/spec/views/with_html.erb +23 -1
- data/lib/capybara/spec/views/within_frames.erb +4 -1
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +6 -10
- data/lib/capybara.rb +28 -25
- data/spec/basic_node_spec.rb +1 -0
- data/spec/capybara_spec.rb +11 -50
- data/spec/dsl_spec.rb +5 -13
- data/spec/filter_set_spec.rb +5 -4
- data/spec/fixtures/selenium_driver_rspec_failure.rb +2 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +3 -2
- data/spec/minitest_spec.rb +4 -3
- data/spec/minitest_spec_spec.rb +3 -2
- data/spec/per_session_config_spec.rb +9 -8
- data/spec/rack_test_spec.rb +21 -20
- data/spec/result_spec.rb +17 -16
- data/spec/rspec/features_spec.rb +17 -14
- data/spec/rspec/scenarios_spec.rb +5 -7
- data/spec/rspec/shared_spec_matchers.rb +96 -99
- data/spec/rspec/views_spec.rb +2 -1
- data/spec/rspec_matchers_spec.rb +18 -2
- data/spec/rspec_spec.rb +11 -15
- data/spec/selector_spec.rb +5 -6
- data/spec/selenium_spec_chrome.rb +9 -4
- data/spec/selenium_spec_edge.rb +27 -0
- data/spec/selenium_spec_ie.rb +31 -0
- data/spec/selenium_spec_marionette.rb +28 -12
- data/spec/server_spec.rb +33 -33
- data/spec/session_spec.rb +2 -1
- data/spec/shared_selenium_session.rb +36 -22
- data/spec/spec_helper.rb +3 -6
- metadata +68 -85
- data/lib/capybara/query.rb +0 -7
- data/spec/selenium_spec_firefox.rb +0 -68
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#fill_in" do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -52,6 +53,30 @@ Capybara::SpecHelper.spec "#fill_in" do
|
|
52
53
|
expect(extract_results(@session)['password']).to eq('supasikrit')
|
53
54
|
end
|
54
55
|
|
56
|
+
context "Date/Time" do
|
57
|
+
it "should fill in a date input" do
|
58
|
+
date = Date.today
|
59
|
+
@session.fill_in('form_date', with: date)
|
60
|
+
@session.click_button('awesome')
|
61
|
+
expect(Date.parse(extract_results(@session)['date'])).to eq date
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should fill in a time input" do
|
65
|
+
time = Time.new(2018, 3, 9, 15, 26)
|
66
|
+
@session.fill_in('form_time', with: time)
|
67
|
+
@session.click_button('awesome')
|
68
|
+
results = extract_results(@session)['time']
|
69
|
+
expect(Time.parse(results).strftime('%r')).to eq time.strftime('%r')
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should fill in a datetime input" do
|
73
|
+
dt = Time.new(2018, 3, 13, 9, 53)
|
74
|
+
@session.fill_in('form_datetime', with: dt)
|
75
|
+
@session.click_button('awesome')
|
76
|
+
expect(Time.parse(extract_results(@session)['datetime'])).to eq dt
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
55
80
|
it "should handle HTML in a textarea" do
|
56
81
|
@session.fill_in('form_description', with: 'is <strong>very</strong> secret!')
|
57
82
|
@session.click_button('awesome')
|
@@ -113,7 +138,7 @@ Capybara::SpecHelper.spec "#fill_in" do
|
|
113
138
|
end
|
114
139
|
|
115
140
|
it "should throw an exception if a hash containing 'with' is not provided" do
|
116
|
-
expect {@session.fill_in 'Name'
|
141
|
+
expect { @session.fill_in 'Name' }.to raise_error(ArgumentError, /with/)
|
117
142
|
end
|
118
143
|
|
119
144
|
it "should wait for asynchronous load", requires: [:js] do
|
@@ -123,13 +148,13 @@ Capybara::SpecHelper.spec "#fill_in" do
|
|
123
148
|
end
|
124
149
|
|
125
150
|
it "casts to string" do
|
126
|
-
@session.fill_in(:
|
151
|
+
@session.fill_in(:form_first_name, with: :Harry)
|
127
152
|
@session.click_button('awesome')
|
128
153
|
expect(extract_results(@session)['first_name']).to eq('Harry')
|
129
154
|
end
|
130
155
|
|
131
156
|
it "casts to string if field has maxlength" do
|
132
|
-
@session.fill_in(:
|
157
|
+
@session.fill_in(:form_zipcode, with: 1234567)
|
133
158
|
@session.click_button('awesome')
|
134
159
|
expect(extract_results(@session)['zipcode']).to eq('12345')
|
135
160
|
end
|
@@ -182,14 +207,14 @@ Capybara::SpecHelper.spec "#fill_in" do
|
|
182
207
|
|
183
208
|
context "with :exact option" do
|
184
209
|
it "should accept partial matches when false" do
|
185
|
-
@session.fill_in("Explanation", with: "Dude", exact:
|
210
|
+
@session.fill_in("Explanation", with: "Dude", exact: false)
|
186
211
|
@session.click_button("awesome")
|
187
212
|
expect(extract_results(@session)["name_explanation"]).to eq("Dude")
|
188
213
|
end
|
189
214
|
|
190
215
|
it "should not accept partial matches when true" do
|
191
216
|
expect do
|
192
|
-
@session.fill_in("Explanation", with: "Dude", exact:
|
217
|
+
@session.fill_in("Explanation", with: "Dude", exact: true)
|
193
218
|
end.to raise_error(Capybara::ElementNotFound)
|
194
219
|
end
|
195
220
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#find_button' do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -22,7 +23,7 @@ Capybara::SpecHelper.spec '#find_button' do
|
|
22
23
|
end
|
23
24
|
|
24
25
|
it "casts to string" do
|
25
|
-
expect(@session.find_button(:
|
26
|
+
expect(@session.find_button(:med)[:id]).to eq("mediocre")
|
26
27
|
end
|
27
28
|
|
28
29
|
it "should raise error if the button doesn't exist" do
|
@@ -33,12 +34,12 @@ Capybara::SpecHelper.spec '#find_button' do
|
|
33
34
|
|
34
35
|
context "with :exact option" do
|
35
36
|
it "should accept partial matches when false" do
|
36
|
-
expect(@session.find_button('What an Awesome', exact:
|
37
|
+
expect(@session.find_button('What an Awesome', exact: false).value).to eq("awesome")
|
37
38
|
end
|
38
39
|
|
39
40
|
it "should not accept partial matches when true" do
|
40
41
|
expect do
|
41
|
-
@session.find_button('What an Awesome', exact:
|
42
|
+
@session.find_button('What an Awesome', exact: true)
|
42
43
|
end.to raise_error(Capybara::ElementNotFound)
|
43
44
|
end
|
44
45
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#find_by_id' do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_html')
|
@@ -9,7 +10,7 @@ Capybara::SpecHelper.spec '#find_by_id' do
|
|
9
10
|
end
|
10
11
|
|
11
12
|
it "casts to string" do
|
12
|
-
expect(@session.find_by_id(:
|
13
|
+
expect(@session.find_by_id(:red).tag_name).to eq('a')
|
13
14
|
end
|
14
15
|
|
15
16
|
it "should raise error if no element with id is found" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#find_field' do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -6,7 +7,7 @@ Capybara::SpecHelper.spec '#find_field' do
|
|
6
7
|
|
7
8
|
it "should find any field" do
|
8
9
|
expect(@session.find_field('Dog').value).to eq('dog')
|
9
|
-
expect(@session.find_field('form_description').
|
10
|
+
expect(@session.find_field('form_description').value).to eq('Descriptive text goes here')
|
10
11
|
expect(@session.find_field('Region')[:name]).to eq('form[region]')
|
11
12
|
expect(@session.find_field('With Asterisk*')).to be
|
12
13
|
end
|
@@ -26,7 +27,7 @@ Capybara::SpecHelper.spec '#find_field' do
|
|
26
27
|
end
|
27
28
|
|
28
29
|
it "casts to string" do
|
29
|
-
expect(@session.find_field(:
|
30
|
+
expect(@session.find_field(:Dog).value).to eq('dog')
|
30
31
|
end
|
31
32
|
|
32
33
|
it "should raise error if the field doesn't exist" do
|
@@ -35,27 +36,20 @@ Capybara::SpecHelper.spec '#find_field' do
|
|
35
36
|
end.to raise_error(Capybara::ElementNotFound)
|
36
37
|
end
|
37
38
|
|
38
|
-
it "should
|
39
|
-
expect_any_instance_of(Kernel).to receive(:warn).
|
40
|
-
with('Invalid value nil passed to filter disabled - defaulting to false')
|
41
|
-
@session.find_field('Dog', disabled: nil)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should be aliased as 'field_labeled' for webrat compatibility" do
|
45
|
-
expect(@session.field_labeled('Dog').value).to eq('dog')
|
39
|
+
it "should raise error if filter option is invalid" do
|
46
40
|
expect do
|
47
|
-
@session.
|
48
|
-
end.to raise_error
|
41
|
+
@session.find_field('Dog', disabled: nil)
|
42
|
+
end.to raise_error ArgumentError, "Invalid value nil passed to filter disabled"
|
49
43
|
end
|
50
44
|
|
51
45
|
context "with :exact option" do
|
52
46
|
it "should accept partial matches when false" do
|
53
|
-
expect(@session.find_field("Explanation", exact:
|
47
|
+
expect(@session.find_field("Explanation", exact: false)[:name]).to eq("form[name_explanation]")
|
54
48
|
end
|
55
49
|
|
56
50
|
it "should not accept partial matches when true" do
|
57
51
|
expect do
|
58
|
-
@session.find_field("Explanation", exact:
|
52
|
+
@session.find_field("Explanation", exact: true)
|
59
53
|
end.to raise_error(Capybara::ElementNotFound)
|
60
54
|
end
|
61
55
|
end
|
@@ -112,6 +106,6 @@ Capybara::SpecHelper.spec '#find_field' do
|
|
112
106
|
|
113
107
|
it "should accept an optional filter block" do
|
114
108
|
# this would be better done with the :with option but this is just a test
|
115
|
-
expect(@session.find_field('form[pets][]'){ |node| node.value == 'dog' }[:id]).to eq "form_pets_dog"
|
109
|
+
expect(@session.find_field('form[pets][]') { |node| node.value == 'dog' }[:id]).to eq "form_pets_dog"
|
116
110
|
end
|
117
111
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#find_link' do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_html')
|
@@ -6,13 +7,13 @@ Capybara::SpecHelper.spec '#find_link' do
|
|
6
7
|
|
7
8
|
it "should find any link" do
|
8
9
|
expect(@session.find_link('foo').text).to eq("ullamco")
|
9
|
-
expect(@session.find_link('labore')[:href]).to match %r
|
10
|
+
expect(@session.find_link('labore')[:href]).to match %r{/with_simple_html$}
|
10
11
|
end
|
11
12
|
|
12
13
|
context "aria_label attribute with Capybara.enable_aria_label" do
|
13
14
|
it "should find when true" do
|
14
15
|
Capybara.enable_aria_label = true
|
15
|
-
expect(@session.find_link('Go to simple')[:href]).to match %r
|
16
|
+
expect(@session.find_link('Go to simple')[:href]).to match %r{/with_simple_html$}
|
16
17
|
end
|
17
18
|
|
18
19
|
it "should not find when false" do
|
@@ -22,7 +23,7 @@ Capybara::SpecHelper.spec '#find_link' do
|
|
22
23
|
end
|
23
24
|
|
24
25
|
it "casts to string" do
|
25
|
-
expect(@session.find_link(:
|
26
|
+
expect(@session.find_link(:foo).text).to eq("ullamco")
|
26
27
|
end
|
27
28
|
|
28
29
|
it "should raise error if the field doesn't exist" do
|
@@ -33,12 +34,12 @@ Capybara::SpecHelper.spec '#find_link' do
|
|
33
34
|
|
34
35
|
context "with :exact option" do
|
35
36
|
it "should accept partial matches when false" do
|
36
|
-
expect(@session.find_link('abo', exact:
|
37
|
+
expect(@session.find_link('abo', exact: false).text).to eq("labore")
|
37
38
|
end
|
38
39
|
|
39
40
|
it "should not accept partial matches when true" do
|
40
41
|
expect do
|
41
|
-
@session.find_link('abo', exact:
|
42
|
+
@session.find_link('abo', exact: true)
|
42
43
|
end.to raise_error(Capybara::ElementNotFound)
|
43
44
|
end
|
44
45
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#find' do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_html')
|
@@ -85,6 +86,11 @@ Capybara::SpecHelper.spec '#find' do
|
|
85
86
|
it "should support pseudo selectors" do
|
86
87
|
expect(@session.find(:css, 'input:disabled').value).to eq('This is disabled')
|
87
88
|
end
|
89
|
+
|
90
|
+
it "should support escaping characters" do
|
91
|
+
expect(@session.find(:css, '#\31 escape\.me').text).to eq('needs escaping')
|
92
|
+
expect(@session.find(:css, '.\32 escape').text).to eq('needs escaping')
|
93
|
+
end
|
88
94
|
end
|
89
95
|
|
90
96
|
context "with xpath selectors" do
|
@@ -179,17 +185,17 @@ Capybara::SpecHelper.spec '#find' do
|
|
179
185
|
|
180
186
|
it "should allow use of filters from custom filter set" do
|
181
187
|
expect(@session.find(:id, 'test_field', filter_set: :value, with: 'monkey').value).to eq('monkey')
|
182
|
-
expect{ @session.find(:id, 'test_field', filter_set: :value, with: 'not_monkey') }.to raise_error(Capybara::ElementNotFound)
|
188
|
+
expect { @session.find(:id, 'test_field', filter_set: :value, with: 'not_monkey') }.to raise_error(Capybara::ElementNotFound)
|
183
189
|
end
|
184
190
|
|
185
191
|
it "should allow use of filter set from a different selector" do
|
186
192
|
expect(@session.find(:id, 'test_field', filter_set: :field, with: 'monkey').value).to eq('monkey')
|
187
|
-
expect{ @session.find(:id, 'test_field', filter_set: :field, with: 'not_monkey') }.to raise_error(Capybara::ElementNotFound)
|
193
|
+
expect { @session.find(:id, 'test_field', filter_set: :field, with: 'not_monkey') }.to raise_error(Capybara::ElementNotFound)
|
188
194
|
end
|
189
195
|
|
190
196
|
it "should allow importing of filter set into selector" do
|
191
197
|
expect(@session.find(:id_with_field_filters, 'test_field', with: 'monkey').value).to eq('monkey')
|
192
|
-
expect{ @session.find(:id_with_field_filters, 'test_field', with: 'not_monkey') }.to raise_error(Capybara::ElementNotFound)
|
198
|
+
expect { @session.find(:id_with_field_filters, 'test_field', with: 'not_monkey') }.to raise_error(Capybara::ElementNotFound)
|
193
199
|
end
|
194
200
|
end
|
195
201
|
|
@@ -217,15 +223,15 @@ Capybara::SpecHelper.spec '#find' do
|
|
217
223
|
|
218
224
|
context "with :exact option" do
|
219
225
|
it "matches exactly when true" do
|
220
|
-
expect(@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("test_field")], exact:
|
226
|
+
expect(@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("test_field")], exact: true).value).to eq("monkey")
|
221
227
|
expect do
|
222
|
-
@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("est_fiel")], exact:
|
228
|
+
@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("est_fiel")], exact: true)
|
223
229
|
end.to raise_error(Capybara::ElementNotFound)
|
224
230
|
end
|
225
231
|
|
226
232
|
it "matches loosely when false" do
|
227
|
-
expect(@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("test_field")], exact:
|
228
|
-
expect(@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("est_fiel")], exact:
|
233
|
+
expect(@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("test_field")], exact: false).value).to eq("monkey")
|
234
|
+
expect(@session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("est_fiel")], exact: false).value).to eq("monkey")
|
229
235
|
end
|
230
236
|
|
231
237
|
it "defaults to `Capybara.exact`" do
|
@@ -238,8 +244,8 @@ Capybara::SpecHelper.spec '#find' do
|
|
238
244
|
end
|
239
245
|
|
240
246
|
it "warns when the option has no effect" do
|
241
|
-
expect_any_instance_of(Kernel).to receive(:warn)
|
242
|
-
with('The :exact option only has an effect on queries using the XPath#is method. Using it with the query "#test_field" has no effect.')
|
247
|
+
expect_any_instance_of(Kernel).to receive(:warn)
|
248
|
+
.with('The :exact option only has an effect on queries using the XPath#is method. Using it with the query "#test_field" has no effect.')
|
243
249
|
@session.find(:css, '#test_field', exact: true)
|
244
250
|
end
|
245
251
|
end
|
@@ -253,7 +259,7 @@ Capybara::SpecHelper.spec '#find' do
|
|
253
259
|
end
|
254
260
|
it "raises an error even if there the match is exact and the others are inexact" do
|
255
261
|
expect do
|
256
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], exact:
|
262
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], exact: false, match: :one)
|
257
263
|
end.to raise_error(Capybara::Ambiguous)
|
258
264
|
end
|
259
265
|
it "returns the element if there is only one" do
|
@@ -281,25 +287,25 @@ Capybara::SpecHelper.spec '#find' do
|
|
281
287
|
context "and `exact` set to `false`" do
|
282
288
|
it "raises an error when there are multiple exact matches" do
|
283
289
|
expect do
|
284
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :smart, exact:
|
290
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :smart, exact: false)
|
285
291
|
end.to raise_error(Capybara::Ambiguous)
|
286
292
|
end
|
287
293
|
it "finds a single exact match when there also are inexact matches" do
|
288
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :smart, exact:
|
294
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :smart, exact: false)
|
289
295
|
expect(result.text).to eq("almost singular")
|
290
296
|
end
|
291
297
|
it "raises an error when there are multiple inexact matches" do
|
292
298
|
expect do
|
293
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :smart, exact:
|
299
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :smart, exact: false)
|
294
300
|
end.to raise_error(Capybara::Ambiguous)
|
295
301
|
end
|
296
302
|
it "finds a single inexact match" do
|
297
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :smart, exact:
|
303
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :smart, exact: false)
|
298
304
|
expect(result.text).to eq("almost singular but not quite")
|
299
305
|
end
|
300
306
|
it "raises an error if there is no match" do
|
301
307
|
expect do
|
302
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :smart, exact:
|
308
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :smart, exact: false)
|
303
309
|
end.to raise_error(Capybara::ElementNotFound)
|
304
310
|
end
|
305
311
|
end
|
@@ -307,26 +313,26 @@ Capybara::SpecHelper.spec '#find' do
|
|
307
313
|
context "with `exact` set to `true`" do
|
308
314
|
it "raises an error when there are multiple exact matches" do
|
309
315
|
expect do
|
310
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :smart, exact:
|
316
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :smart, exact: true)
|
311
317
|
end.to raise_error(Capybara::Ambiguous)
|
312
318
|
end
|
313
319
|
it "finds a single exact match when there also are inexact matches" do
|
314
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :smart, exact:
|
320
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :smart, exact: true)
|
315
321
|
expect(result.text).to eq("almost singular")
|
316
322
|
end
|
317
323
|
it "raises an error when there are multiple inexact matches" do
|
318
324
|
expect do
|
319
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :smart, exact:
|
325
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :smart, exact: true)
|
320
326
|
end.to raise_error(Capybara::ElementNotFound)
|
321
327
|
end
|
322
328
|
it "raises an error when there is a single inexact matches" do
|
323
329
|
expect do
|
324
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :smart, exact:
|
330
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :smart, exact: true)
|
325
331
|
end.to raise_error(Capybara::ElementNotFound)
|
326
332
|
end
|
327
333
|
it "raises an error if there is no match" do
|
328
334
|
expect do
|
329
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :smart, exact:
|
335
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :smart, exact: true)
|
330
336
|
end.to raise_error(Capybara::ElementNotFound)
|
331
337
|
end
|
332
338
|
end
|
@@ -335,50 +341,50 @@ Capybara::SpecHelper.spec '#find' do
|
|
335
341
|
context "when set to `prefer_exact`" do
|
336
342
|
context "and `exact` set to `false`" do
|
337
343
|
it "picks the first one when there are multiple exact matches" do
|
338
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :prefer_exact, exact:
|
344
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :prefer_exact, exact: false)
|
339
345
|
expect(result.text).to eq("multiple one")
|
340
346
|
end
|
341
347
|
it "finds a single exact match when there also are inexact matches" do
|
342
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :prefer_exact, exact:
|
348
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :prefer_exact, exact: false)
|
343
349
|
expect(result.text).to eq("almost singular")
|
344
350
|
end
|
345
351
|
it "picks the first one when there are multiple inexact matches" do
|
346
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :prefer_exact, exact:
|
352
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :prefer_exact, exact: false)
|
347
353
|
expect(result.text).to eq("almost singular but not quite")
|
348
354
|
end
|
349
355
|
it "finds a single inexact match" do
|
350
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :prefer_exact, exact:
|
356
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :prefer_exact, exact: false)
|
351
357
|
expect(result.text).to eq("almost singular but not quite")
|
352
358
|
end
|
353
359
|
it "raises an error if there is no match" do
|
354
360
|
expect do
|
355
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :prefer_exact, exact:
|
361
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :prefer_exact, exact: false)
|
356
362
|
end.to raise_error(Capybara::ElementNotFound)
|
357
363
|
end
|
358
364
|
end
|
359
365
|
|
360
366
|
context "with `exact` set to `true`" do
|
361
367
|
it "picks the first one when there are multiple exact matches" do
|
362
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :prefer_exact, exact:
|
368
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("multiple")], match: :prefer_exact, exact: true)
|
363
369
|
expect(result.text).to eq("multiple one")
|
364
370
|
end
|
365
371
|
it "finds a single exact match when there also are inexact matches" do
|
366
|
-
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :prefer_exact, exact:
|
372
|
+
result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular")], match: :prefer_exact, exact: true)
|
367
373
|
expect(result.text).to eq("almost singular")
|
368
374
|
end
|
369
375
|
it "raises an error if there are multiple inexact matches" do
|
370
376
|
expect do
|
371
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :prefer_exact, exact:
|
377
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singul")], match: :prefer_exact, exact: true)
|
372
378
|
end.to raise_error(Capybara::ElementNotFound)
|
373
379
|
end
|
374
380
|
it "raises an error if there is a single inexact match" do
|
375
381
|
expect do
|
376
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :prefer_exact, exact:
|
382
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :prefer_exact, exact: true)
|
377
383
|
end.to raise_error(Capybara::ElementNotFound)
|
378
384
|
end
|
379
385
|
it "raises an error if there is no match" do
|
380
386
|
expect do
|
381
|
-
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :prefer_exact, exact:
|
387
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("does-not-exist")], match: :prefer_exact, exact: true)
|
382
388
|
end.to raise_error(Capybara::ElementNotFound)
|
383
389
|
end
|
384
390
|
end
|
@@ -401,7 +407,7 @@ Capybara::SpecHelper.spec '#find' do
|
|
401
407
|
end
|
402
408
|
|
403
409
|
it "supports a custom filter block" do
|
404
|
-
expect(@session.find(:css, 'input'
|
410
|
+
expect(@session.find(:css, 'input', &:disabled?)[:name]).to eq('disabled_text')
|
405
411
|
end
|
406
412
|
|
407
413
|
context "within a scope" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#first' do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_html')
|
@@ -9,8 +10,16 @@ Capybara::SpecHelper.spec '#first' do
|
|
9
10
|
expect(@session.first("//input[@id='test_field']").value).to eq('monkey')
|
10
11
|
end
|
11
12
|
|
12
|
-
it "should
|
13
|
-
expect
|
13
|
+
it "should raise ElementNotFound when nothing was found" do
|
14
|
+
expect do
|
15
|
+
@session.first('//div[@id="nosuchthing"]')
|
16
|
+
end.to raise_error Capybara::ElementNotFound
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should return nil when nothing was found if count options allow no results" do
|
20
|
+
expect(@session.first('//div[@id="nosuchthing"]', minimum: 0)).to be_nil
|
21
|
+
expect(@session.first('//div[@id="nosuchthing"]', count: 0)).to be_nil
|
22
|
+
expect(@session.first('//div[@id="nosuchthing"]', between: (0..3))).to be_nil
|
14
23
|
end
|
15
24
|
|
16
25
|
it "should accept an XPath instance" do
|
@@ -20,9 +29,10 @@ Capybara::SpecHelper.spec '#first' do
|
|
20
29
|
expect(@session.first(@xpath).value).to eq('John')
|
21
30
|
end
|
22
31
|
|
23
|
-
it "should
|
24
|
-
|
25
|
-
|
32
|
+
it "should raise when unused parameters are passed" do
|
33
|
+
expect do
|
34
|
+
@session.first(:css, 'h1', 'unused text')
|
35
|
+
end.to raise_error ArgumentError, /Unused parameters passed.*unused text/
|
26
36
|
end
|
27
37
|
|
28
38
|
context "with css selectors" do
|
@@ -49,40 +59,52 @@ Capybara::SpecHelper.spec '#first' do
|
|
49
59
|
|
50
60
|
context "with visible filter" do
|
51
61
|
it "should only find visible nodes when true" do
|
52
|
-
expect
|
62
|
+
expect do
|
63
|
+
@session.first(:css, "a#invisible", visible: true)
|
64
|
+
end.to raise_error Capybara::ElementNotFound
|
53
65
|
end
|
54
66
|
|
55
67
|
it "should find nodes regardless of whether they are invisible when false" do
|
56
|
-
expect(@session.first(:css, "a#invisible", visible: false)).
|
57
|
-
expect(@session.first(:css, "a#invisible", visible: false, text: 'hidden link')).
|
58
|
-
expect(@session.first(:css, "a#visible", visible: false)).
|
68
|
+
expect(@session.first(:css, "a#invisible", visible: false)).to be
|
69
|
+
expect(@session.first(:css, "a#invisible", visible: false, text: 'hidden link')).to be
|
70
|
+
expect(@session.first(:css, "a#visible", visible: false)).to be
|
59
71
|
end
|
60
72
|
|
61
73
|
it "should find nodes regardless of whether they are invisible when :all" do
|
62
|
-
expect(@session.first(:css, "a#invisible", visible: :all)).
|
63
|
-
expect(@session.first(:css, "a#invisible", visible: :all, text: 'hidden link')).
|
64
|
-
expect(@session.first(:css, "a#visible", visible: :all)).
|
74
|
+
expect(@session.first(:css, "a#invisible", visible: :all)).to be
|
75
|
+
expect(@session.first(:css, "a#invisible", visible: :all, text: 'hidden link')).to be
|
76
|
+
expect(@session.first(:css, "a#visible", visible: :all)).to be
|
65
77
|
end
|
66
78
|
|
67
79
|
it "should find only hidden nodes when :hidden" do
|
68
|
-
expect(@session.first(:css, "a#invisible", visible: :hidden)).
|
69
|
-
expect(@session.first(:css, "a#invisible", visible: :hidden, text: 'hidden link')).
|
70
|
-
expect
|
71
|
-
|
80
|
+
expect(@session.first(:css, "a#invisible", visible: :hidden)).to be
|
81
|
+
expect(@session.first(:css, "a#invisible", visible: :hidden, text: 'hidden link')).to be
|
82
|
+
expect do
|
83
|
+
@session.first(:css, "a#invisible", visible: :hidden, text: 'not hidden link')
|
84
|
+
end.to raise_error Capybara::ElementNotFound
|
85
|
+
expect do
|
86
|
+
@session.first(:css, "a#visible", visible: :hidden)
|
87
|
+
end.to raise_error Capybara::ElementNotFound
|
72
88
|
end
|
73
89
|
|
74
90
|
it "should find only visible nodes when :visible" do
|
75
|
-
expect
|
76
|
-
|
77
|
-
|
91
|
+
expect do
|
92
|
+
@session.first(:css, "a#invisible", visible: :visible)
|
93
|
+
end.to raise_error Capybara::ElementNotFound
|
94
|
+
expect do
|
95
|
+
@session.first(:css, "a#invisible", visible: :visible, text: 'hidden link')
|
96
|
+
end.to raise_error Capybara::ElementNotFound
|
97
|
+
expect(@session.first(:css, "a#visible", visible: :visible)).to be
|
78
98
|
end
|
79
99
|
|
80
100
|
it "should default to Capybara.ignore_hidden_elements" do
|
81
101
|
Capybara.ignore_hidden_elements = true
|
82
|
-
expect
|
102
|
+
expect do
|
103
|
+
@session.first(:css, "a#invisible")
|
104
|
+
end.to raise_error Capybara::ElementNotFound
|
83
105
|
Capybara.ignore_hidden_elements = false
|
84
|
-
expect(@session.first(:css, "a#invisible")).
|
85
|
-
expect(@session.first(:css, "a")).
|
106
|
+
expect(@session.first(:css, "a#invisible")).to be
|
107
|
+
expect(@session.first(:css, "a")).to be
|
86
108
|
end
|
87
109
|
end
|
88
110
|
|
@@ -93,35 +115,40 @@ Capybara::SpecHelper.spec '#first' do
|
|
93
115
|
|
94
116
|
it "should find the first element using the given locator" do
|
95
117
|
@session.within(:xpath, "//div[@id='for_bar']") do
|
96
|
-
expect(@session.first('.//form')).
|
118
|
+
expect(@session.first('.//form')).to be
|
97
119
|
end
|
98
120
|
end
|
99
121
|
end
|
100
122
|
|
101
|
-
context "
|
123
|
+
context "waiting behavior", requires: [:js] do
|
102
124
|
before do
|
103
125
|
@session.visit('/with_js')
|
104
126
|
end
|
105
127
|
|
106
|
-
it "should not wait if
|
107
|
-
Capybara.wait_on_first_by_default = false
|
128
|
+
it "should not wait if minimum: 0" do
|
108
129
|
@session.click_link('clickable')
|
109
|
-
|
130
|
+
Capybara.using_wait_time(3) do
|
131
|
+
start_time = Time.now
|
132
|
+
expect(@session.first(:css, 'a#has-been-clicked', minimum: 0)).to be_nil
|
133
|
+
expect(Time.now - start_time).to be < 3
|
134
|
+
end
|
110
135
|
end
|
111
136
|
|
112
|
-
it "should wait for at least one match
|
113
|
-
Capybara.wait_on_first_by_default = true
|
137
|
+
it "should wait for at least one match by default" do
|
114
138
|
Capybara.using_wait_time(3) do
|
115
139
|
@session.click_link('clickable')
|
116
140
|
expect(@session.first(:css, 'a#has-been-clicked')).not_to be_nil
|
117
141
|
end
|
118
142
|
end
|
119
143
|
|
120
|
-
it "should
|
121
|
-
|
144
|
+
it "should raise an error after waiting if no match" do
|
145
|
+
@session.click_link('clickable')
|
122
146
|
Capybara.using_wait_time(3) do
|
123
|
-
|
124
|
-
expect
|
147
|
+
start_time = Time.now
|
148
|
+
expect do
|
149
|
+
@session.first(:css, 'a#not-a-real-link')
|
150
|
+
end.to raise_error Capybara::ElementNotFound
|
151
|
+
expect(Time.now - start_time).to be > 3
|
125
152
|
end
|
126
153
|
end
|
127
154
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Capybara::SpecHelper.spec '#frame_title', requires: [:frames] do
|
4
|
+
before(:each) do
|
5
|
+
@session.visit('/within_frames')
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should return the title in a frame" do
|
9
|
+
@session.within_frame("frameOne") do
|
10
|
+
expect(@session.driver.frame_title).to eq 'This is the title of frame one'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return the title in FrameTwo" do
|
15
|
+
@session.within_frame("frameTwo") do
|
16
|
+
expect(@session.driver.frame_title).to eq 'This is the title of frame two'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return the title in the main frame" do
|
21
|
+
expect(@session.driver.frame_title).to eq 'With Frames'
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Capybara::SpecHelper.spec '#frame_url', requires: [:frames] do
|
4
|
+
before(:each) do
|
5
|
+
@session.visit('/within_frames')
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should return the url in a frame" do
|
9
|
+
@session.within_frame("frameOne") do
|
10
|
+
expect(@session.driver.frame_url).to end_with '/frame_one'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return the url in FrameTwo" do
|
15
|
+
@session.within_frame("frameTwo") do
|
16
|
+
expect(@session.driver.frame_url).to end_with '/frame_two'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return the url in the main frame" do
|
21
|
+
expect(@session.driver.frame_url).to end_with('/within_frames')
|
22
|
+
end
|
23
|
+
end
|