capybara 2.5.0 → 2.18.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 +5 -5
- data/.yard/templates_custom/default/class/html/selectors.erb +38 -0
- data/.yard/templates_custom/default/class/html/setup.rb +17 -0
- data/.yard/yard_extensions.rb +78 -0
- data/.yardopts +1 -0
- data/History.md +413 -10
- data/License.txt +1 -1
- data/README.md +237 -130
- data/lib/capybara/config.rb +132 -0
- data/lib/capybara/cucumber.rb +3 -1
- data/lib/capybara/driver/base.rb +27 -6
- data/lib/capybara/driver/node.rb +14 -5
- data/lib/capybara/dsl.rb +2 -3
- data/lib/capybara/helpers.rb +13 -65
- data/lib/capybara/minitest/spec.rb +177 -0
- data/lib/capybara/minitest.rb +278 -0
- data/lib/capybara/node/actions.rb +180 -24
- data/lib/capybara/node/base.rb +17 -5
- data/lib/capybara/node/document.rb +5 -0
- data/lib/capybara/node/document_matchers.rb +15 -14
- data/lib/capybara/node/element.rb +55 -7
- data/lib/capybara/node/finders.rb +179 -67
- data/lib/capybara/node/matchers.rb +301 -105
- data/lib/capybara/node/simple.rb +15 -4
- data/lib/capybara/queries/ancestor_query.rb +25 -0
- data/lib/capybara/queries/base_query.rb +69 -3
- data/lib/capybara/queries/current_path_query.rb +17 -8
- data/lib/capybara/queries/match_query.rb +19 -0
- data/lib/capybara/queries/selector_query.rb +251 -0
- data/lib/capybara/queries/sibling_query.rb +25 -0
- data/lib/capybara/queries/text_query.rb +67 -16
- data/lib/capybara/queries/title_query.rb +4 -2
- data/lib/capybara/query.rb +3 -131
- data/lib/capybara/rack_test/browser.rb +14 -5
- data/lib/capybara/rack_test/css_handlers.rb +1 -0
- data/lib/capybara/rack_test/driver.rb +15 -8
- data/lib/capybara/rack_test/form.rb +34 -12
- data/lib/capybara/rack_test/node.rb +29 -12
- data/lib/capybara/rails.rb +3 -3
- data/lib/capybara/result.rb +104 -9
- data/lib/capybara/rspec/compound.rb +95 -0
- data/lib/capybara/rspec/features.rb +17 -6
- data/lib/capybara/rspec/matcher_proxies.rb +45 -0
- data/lib/capybara/rspec/matchers.rb +199 -80
- data/lib/capybara/rspec.rb +4 -2
- data/lib/capybara/selector/css.rb +30 -0
- data/lib/capybara/selector/filter.rb +20 -0
- data/lib/capybara/selector/filter_set.rb +74 -0
- data/lib/capybara/selector/filters/base.rb +33 -0
- data/lib/capybara/selector/filters/expression_filter.rb +40 -0
- data/lib/capybara/selector/filters/node_filter.rb +27 -0
- data/lib/capybara/selector/selector.rb +276 -0
- data/lib/capybara/selector.rb +452 -157
- data/lib/capybara/selenium/driver.rb +282 -81
- data/lib/capybara/selenium/node.rb +144 -46
- data/lib/capybara/server.rb +59 -16
- data/lib/capybara/session/config.rb +114 -0
- data/lib/capybara/session/matchers.rb +29 -19
- data/lib/capybara/session.rb +378 -143
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/public/jquery-ui.js +13 -791
- data/lib/capybara/spec/public/jquery.js +4 -9045
- data/lib/capybara/spec/public/test.js +45 -11
- data/lib/capybara/spec/session/accept_alert_spec.rb +30 -7
- data/lib/capybara/spec/session/accept_confirm_spec.rb +14 -2
- data/lib/capybara/spec/session/accept_prompt_spec.rb +35 -6
- data/lib/capybara/spec/session/all_spec.rb +45 -32
- data/lib/capybara/spec/session/ancestor_spec.rb +85 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +110 -0
- data/lib/capybara/spec/session/assert_current_path.rb +15 -2
- data/lib/capybara/spec/session/assert_selector.rb +29 -28
- data/lib/capybara/spec/session/assert_text.rb +59 -20
- data/lib/capybara/spec/session/assert_title.rb +25 -11
- data/lib/capybara/spec/session/attach_file_spec.rb +42 -4
- data/lib/capybara/spec/session/body_spec.rb +1 -0
- data/lib/capybara/spec/session/check_spec.rb +90 -14
- data/lib/capybara/spec/session/choose_spec.rb +31 -5
- data/lib/capybara/spec/session/click_button_spec.rb +20 -9
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +15 -9
- data/lib/capybara/spec/session/click_link_spec.rb +39 -15
- data/lib/capybara/spec/session/current_scope_spec.rb +2 -1
- data/lib/capybara/spec/session/current_url_spec.rb +12 -3
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +6 -5
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +4 -3
- data/lib/capybara/spec/session/element/assert_match_selector.rb +36 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +23 -0
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +23 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +106 -0
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +22 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +23 -1
- data/lib/capybara/spec/session/execute_script_spec.rb +22 -3
- data/lib/capybara/spec/session/fill_in_spec.rb +50 -32
- data/lib/capybara/spec/session/find_button_spec.rb +43 -2
- data/lib/capybara/spec/session/find_by_id_spec.rb +3 -2
- data/lib/capybara/spec/session/find_field_spec.rb +42 -6
- data/lib/capybara/spec/session/find_link_spec.rb +22 -3
- data/lib/capybara/spec/session/find_spec.rb +103 -57
- data/lib/capybara/spec/session/first_spec.rb +34 -18
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +103 -0
- data/lib/capybara/spec/session/{within_frame_spec.rb → frame/within_frame_spec.rb} +44 -2
- data/lib/capybara/spec/session/go_back_spec.rb +2 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_button_spec.rb +17 -8
- data/lib/capybara/spec/session/has_css_spec.rb +85 -73
- data/lib/capybara/spec/session/has_current_path_spec.rb +91 -7
- data/lib/capybara/spec/session/has_field_spec.rb +93 -58
- data/lib/capybara/spec/session/has_link_spec.rb +9 -8
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +76 -0
- data/lib/capybara/spec/session/has_select_spec.rb +159 -59
- data/lib/capybara/spec/session/has_selector_spec.rb +64 -28
- data/lib/capybara/spec/session/has_table_spec.rb +1 -0
- data/lib/capybara/spec/session/has_text_spec.rb +27 -12
- data/lib/capybara/spec/session/has_title_spec.rb +22 -4
- data/lib/capybara/spec/session/has_xpath_spec.rb +32 -29
- data/lib/capybara/spec/session/headers.rb +2 -1
- data/lib/capybara/spec/session/html_spec.rb +4 -3
- data/lib/capybara/spec/session/node_spec.rb +198 -38
- data/lib/capybara/spec/session/refresh_spec.rb +28 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +46 -5
- data/lib/capybara/spec/session/response_code.rb +2 -1
- 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 -5
- data/lib/capybara/spec/session/save_page_spec.rb +34 -2
- data/lib/capybara/spec/session/save_screenshot_spec.rb +31 -1
- data/lib/capybara/spec/session/screenshot_spec.rb +4 -2
- data/lib/capybara/spec/session/select_spec.rb +34 -32
- data/lib/capybara/spec/session/selectors_spec.rb +65 -0
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/text_spec.rb +4 -4
- data/lib/capybara/spec/session/title_spec.rb +2 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +42 -2
- data/lib/capybara/spec/session/unselect_spec.rb +17 -16
- data/lib/capybara/spec/session/visit_spec.rb +77 -2
- data/lib/capybara/spec/session/window/become_closed_spec.rb +12 -11
- 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 +16 -11
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +7 -4
- data/lib/capybara/spec/session/window/window_spec.rb +36 -29
- data/lib/capybara/spec/session/window/windows_spec.rb +1 -0
- data/lib/capybara/spec/session/window/within_window_spec.rb +31 -7
- data/lib/capybara/spec/session/within_spec.rb +14 -6
- data/lib/capybara/spec/spec_helper.rb +37 -4
- data/lib/capybara/spec/test_app.rb +15 -3
- data/lib/capybara/spec/views/buttons.erb +1 -0
- data/lib/capybara/spec/views/fieldsets.erb +2 -1
- data/lib/capybara/spec/views/form.erb +169 -9
- data/lib/capybara/spec/views/frame_child.erb +10 -2
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +3 -2
- data/lib/capybara/spec/views/frame_two.erb +2 -1
- data/lib/capybara/spec/views/header_links.erb +1 -0
- data/lib/capybara/spec/views/host_links.erb +1 -0
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/path.erb +1 -0
- data/lib/capybara/spec/views/popup_one.erb +1 -0
- data/lib/capybara/spec/views/popup_two.erb +1 -0
- data/lib/capybara/spec/views/postback.erb +2 -1
- data/lib/capybara/spec/views/tables.erb +1 -0
- data/lib/capybara/spec/views/with_base_tag.erb +1 -0
- data/lib/capybara/spec/views/with_count.erb +2 -1
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +7 -1
- data/lib/capybara/spec/views/with_html.erb +40 -2
- data/lib/capybara/spec/views/with_html_entities.erb +1 -0
- data/lib/capybara/spec/views/with_js.erb +32 -1
- data/lib/capybara/spec/views/with_scope.erb +1 -0
- data/lib/capybara/spec/views/with_simple_html.erb +2 -1
- data/lib/capybara/spec/views/with_slow_unload.erb +17 -0
- data/lib/capybara/spec/views/with_title.erb +2 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +14 -0
- data/lib/capybara/spec/views/with_windows.erb +7 -0
- data/lib/capybara/spec/views/within_frames.erb +3 -2
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +20 -3
- data/lib/capybara.rb +189 -93
- data/spec/basic_node_spec.rb +7 -6
- data/spec/capybara_spec.rb +90 -4
- data/spec/dsl_spec.rb +3 -1
- data/spec/filter_set_spec.rb +28 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -1
- data/spec/minitest_spec.rb +130 -0
- data/spec/minitest_spec_spec.rb +135 -0
- data/spec/per_session_config_spec.rb +67 -0
- data/spec/rack_test_spec.rb +50 -7
- data/spec/result_spec.rb +76 -0
- data/spec/rspec/features_spec.rb +21 -8
- data/spec/rspec/scenarios_spec.rb +21 -0
- data/spec/rspec/{matchers_spec.rb → shared_spec_matchers.rb} +160 -54
- data/spec/rspec/views_spec.rb +5 -0
- data/spec/rspec_matchers_spec.rb +46 -0
- data/spec/rspec_spec.rb +79 -1
- data/spec/selector_spec.rb +199 -0
- data/spec/selenium_spec_chrome.rb +54 -9
- data/spec/selenium_spec_firefox.rb +68 -0
- data/spec/selenium_spec_marionette.rb +127 -0
- data/spec/server_spec.rb +102 -14
- data/spec/session_spec.rb +54 -0
- data/spec/shared_selenium_session.rb +215 -0
- data/spec/spec_helper.rb +7 -0
- metadata +140 -15
- data/spec/selenium_spec.rb +0 -128
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var activeRequests = 0;
|
|
2
2
|
$(function() {
|
|
3
3
|
$('#change').text('I changed it');
|
|
4
|
-
$('#drag').draggable();
|
|
5
|
-
$('#drop').droppable({
|
|
4
|
+
$('#drag, #drag_scroll').draggable();
|
|
5
|
+
$('#drop, #drop_scroll').droppable({
|
|
6
6
|
drop: function(event, ui) {
|
|
7
7
|
ui.draggable.remove();
|
|
8
8
|
$(this).html('Dropped!');
|
|
@@ -37,6 +37,9 @@ $(function() {
|
|
|
37
37
|
$('#with_change_event').change(function() {
|
|
38
38
|
$('body').append($('<p class="change_event_triggered"></p>').text(this.value));
|
|
39
39
|
});
|
|
40
|
+
$('#with_change_event').on('input', function() {
|
|
41
|
+
$('body').append($('<p class="input_event_triggered"></p>').text(this.value));
|
|
42
|
+
});
|
|
40
43
|
$('#checkbox_with_event').click(function() {
|
|
41
44
|
$('body').append('<p id="checkbox_event_triggered">Checkbox event triggered</p>');
|
|
42
45
|
});
|
|
@@ -58,17 +61,19 @@ $(function() {
|
|
|
58
61
|
$('#change-title').click(function() {
|
|
59
62
|
setTimeout(function() {
|
|
60
63
|
$('title').text('changed title')
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
$('#click-test').
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
e
|
|
68
|
-
|
|
64
|
+
}, 400)
|
|
65
|
+
});
|
|
66
|
+
$('#click-test').on({
|
|
67
|
+
dblclick: function() {
|
|
68
|
+
$(this).after('<a id="has-been-double-clicked" href="#">Has been double clicked</a>');
|
|
69
|
+
},
|
|
70
|
+
contextmenu: function(e) {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
$(this).after('<a id="has-been-right-clicked" href="#">Has been right clicked</a>');
|
|
73
|
+
}
|
|
69
74
|
});
|
|
70
75
|
$('#open-alert').click(function() {
|
|
71
|
-
alert('Alert opened');
|
|
76
|
+
alert('Alert opened [*Yay?*]');
|
|
72
77
|
$(this).attr('opened', 'true');
|
|
73
78
|
});
|
|
74
79
|
$('#open-delayed-alert').click(function() {
|
|
@@ -85,6 +90,10 @@ $(function() {
|
|
|
85
90
|
$(link).attr('opened', 'true');
|
|
86
91
|
}, 3000);
|
|
87
92
|
});
|
|
93
|
+
$('#alert-page-change').click(function() {
|
|
94
|
+
alert('Page is changing');
|
|
95
|
+
return true;
|
|
96
|
+
});
|
|
88
97
|
$('#open-confirm').click(function() {
|
|
89
98
|
if(confirm('Confirm opened')) {
|
|
90
99
|
$(this).attr('confirmed', 'true');
|
|
@@ -100,6 +109,21 @@ $(function() {
|
|
|
100
109
|
$(this).attr('response', response);
|
|
101
110
|
}
|
|
102
111
|
});
|
|
112
|
+
$('#open-prompt-with-default').click(function() {
|
|
113
|
+
var response = prompt('Prompt opened', 'Default value!');
|
|
114
|
+
if(response === null) {
|
|
115
|
+
$(this).attr('response', 'dismissed');
|
|
116
|
+
} else {
|
|
117
|
+
$(this).attr('response', response);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
$('#open-twice').click(function() {
|
|
121
|
+
if (confirm('Are you sure?')) {
|
|
122
|
+
if (!confirm('Are you really sure?')) {
|
|
123
|
+
$(this).attr('confirmed', 'false');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
})
|
|
103
127
|
$('#delayed-page-change').click(function() {
|
|
104
128
|
setTimeout(function() {
|
|
105
129
|
window.location.pathname = '/with_html'
|
|
@@ -108,4 +132,14 @@ $(function() {
|
|
|
108
132
|
$('#with-key-events').keydown(function(e){
|
|
109
133
|
$('#key-events-output').append('keydown:'+e.which+' ')
|
|
110
134
|
});
|
|
135
|
+
$('#disable-on-click').click(function(e){
|
|
136
|
+
var input = this
|
|
137
|
+
setTimeout(function() {
|
|
138
|
+
input.disabled = true;
|
|
139
|
+
}, 500)
|
|
140
|
+
})
|
|
141
|
+
$('#set-storage').click(function(e){
|
|
142
|
+
sessionStorage.setItem('session', 'session_value');
|
|
143
|
+
localStorage.setItem('local', 'local value');
|
|
144
|
+
})
|
|
111
145
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
Capybara::SpecHelper.spec '#accept_alert', requires: [:modals] do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_js')
|
|
4
5
|
end
|
|
@@ -9,14 +10,28 @@ Capybara::SpecHelper.spec '#accept_alert', :requires => [:modals] do
|
|
|
9
10
|
end
|
|
10
11
|
expect(@session).to have_xpath("//a[@id='open-alert' and @opened='true']")
|
|
11
12
|
end
|
|
12
|
-
|
|
13
|
+
|
|
13
14
|
it "should accept the alert if the text matches" do
|
|
14
15
|
@session.accept_alert 'Alert opened' do
|
|
15
16
|
@session.click_link('Open alert')
|
|
16
17
|
end
|
|
17
18
|
expect(@session).to have_xpath("//a[@id='open-alert' and @opened='true']")
|
|
18
19
|
end
|
|
19
|
-
|
|
20
|
+
|
|
21
|
+
it 'should accept the alert if text contains "special" Regex characters' do
|
|
22
|
+
@session.accept_alert 'opened [*Yay?*]' do
|
|
23
|
+
@session.click_link('Open alert')
|
|
24
|
+
end
|
|
25
|
+
expect(@session).to have_xpath("//a[@id='open-alert' and @opened='true']")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should accept the alert if the text matches a regexp" do
|
|
29
|
+
@session.accept_alert(/op.{2}ed/) do
|
|
30
|
+
@session.click_link('Open alert')
|
|
31
|
+
end
|
|
32
|
+
expect(@session).to have_xpath("//a[@id='open-alert' and @opened='true']")
|
|
33
|
+
end
|
|
34
|
+
|
|
20
35
|
it "should not accept the alert if the text doesnt match" do
|
|
21
36
|
expect do
|
|
22
37
|
@session.accept_alert 'Incorrect Text' do
|
|
@@ -29,7 +44,15 @@ Capybara::SpecHelper.spec '#accept_alert', :requires => [:modals] do
|
|
|
29
44
|
message = @session.accept_alert do
|
|
30
45
|
@session.click_link('Open alert')
|
|
31
46
|
end
|
|
32
|
-
expect(message).to eq('Alert opened')
|
|
47
|
+
expect(message).to eq('Alert opened [*Yay?*]')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should handle the alert if the page changes" do
|
|
51
|
+
@session.accept_alert do
|
|
52
|
+
@session.click_link('Alert page change')
|
|
53
|
+
sleep 1 # ensure page change occurs before the accept_alert block exits
|
|
54
|
+
end
|
|
55
|
+
expect(@session).to have_current_path('/with_html')
|
|
33
56
|
end
|
|
34
57
|
|
|
35
58
|
context "with an asynchronous alert" do
|
|
@@ -46,12 +69,12 @@ Capybara::SpecHelper.spec '#accept_alert', :requires => [:modals] do
|
|
|
46
69
|
end
|
|
47
70
|
expect(message).to eq('Delayed alert opened')
|
|
48
71
|
end
|
|
49
|
-
|
|
72
|
+
|
|
50
73
|
it "should allow to adjust the delay" do
|
|
51
|
-
@session.accept_alert wait:
|
|
74
|
+
@session.accept_alert wait: 10 do
|
|
52
75
|
@session.click_link('Open slow alert')
|
|
53
76
|
end
|
|
54
77
|
expect(@session).to have_xpath("//a[@id='open-slow-alert' and @opened='true']")
|
|
55
78
|
end
|
|
56
79
|
end
|
|
57
|
-
end
|
|
80
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
Capybara::SpecHelper.spec '#accept_confirm', requires: [:modals] do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_js')
|
|
4
5
|
end
|
|
@@ -16,4 +17,15 @@ Capybara::SpecHelper.spec '#accept_confirm', :requires => [:modals] do
|
|
|
16
17
|
end
|
|
17
18
|
expect(message).to eq('Confirm opened')
|
|
18
19
|
end
|
|
19
|
-
|
|
20
|
+
|
|
21
|
+
it "should work with nested modals" do
|
|
22
|
+
expect {
|
|
23
|
+
@session.dismiss_confirm 'Are you really sure?' do
|
|
24
|
+
@session.accept_confirm 'Are you sure?' do
|
|
25
|
+
@session.click_link('Open check twice')
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
}.not_to raise_error
|
|
29
|
+
expect(@session).to have_xpath("//a[@id='open-twice' and @confirmed='false']")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
Capybara::SpecHelper.spec '#accept_prompt', requires: [:modals] do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_js')
|
|
4
5
|
end
|
|
@@ -10,27 +11,56 @@ Capybara::SpecHelper.spec '#accept_prompt', :requires => [:modals] do
|
|
|
10
11
|
expect(@session).to have_xpath("//a[@id='open-prompt' and @response='']")
|
|
11
12
|
end
|
|
12
13
|
|
|
14
|
+
it "should accept the prompt with no message when there is a default" do
|
|
15
|
+
@session.accept_prompt do
|
|
16
|
+
@session.click_link('Open defaulted prompt')
|
|
17
|
+
end
|
|
18
|
+
expect(@session).to have_xpath("//a[@id='open-prompt-with-default' and @response='Default value!']")
|
|
19
|
+
end
|
|
20
|
+
|
|
13
21
|
it "should return the message presented" do
|
|
14
22
|
message = @session.accept_prompt do
|
|
15
23
|
@session.click_link('Open prompt')
|
|
16
24
|
end
|
|
17
25
|
expect(message).to eq('Prompt opened')
|
|
18
26
|
end
|
|
19
|
-
|
|
27
|
+
|
|
20
28
|
it "should accept the prompt with a response" do
|
|
21
29
|
@session.accept_prompt with: 'the response' do
|
|
22
30
|
@session.click_link('Open prompt')
|
|
23
31
|
end
|
|
24
32
|
expect(@session).to have_xpath("//a[@id='open-prompt' and @response='the response']")
|
|
25
33
|
end
|
|
26
|
-
|
|
34
|
+
|
|
35
|
+
it "should accept the prompt with a response when there is a default" do
|
|
36
|
+
@session.accept_prompt with: 'the response' do
|
|
37
|
+
@session.click_link('Open defaulted prompt')
|
|
38
|
+
end
|
|
39
|
+
expect(@session).to have_xpath("//a[@id='open-prompt-with-default' and @response='the response']")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should accept the prompt with a blank response when there is a default" do
|
|
43
|
+
pending "Geckodriver doesn't set a blank response currently" if marionette?(@session)
|
|
44
|
+
@session.accept_prompt with: '' do
|
|
45
|
+
@session.click_link('Open defaulted prompt')
|
|
46
|
+
end
|
|
47
|
+
expect(@session).to have_xpath("//a[@id='open-prompt-with-default' and @response='']")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should allow special characters in the reponse" do
|
|
51
|
+
@session.accept_prompt with: '\'the\' \b "response"' do
|
|
52
|
+
@session.click_link('Open prompt')
|
|
53
|
+
end
|
|
54
|
+
expect(@session).to have_xpath(%{//a[@id='open-prompt' and @response=concat("'the' ", '\\b "response"')]})
|
|
55
|
+
end
|
|
56
|
+
|
|
27
57
|
it "should accept the prompt if the message matches" do
|
|
28
58
|
@session.accept_prompt 'Prompt opened', with: 'matched' do
|
|
29
59
|
@session.click_link('Open prompt')
|
|
30
60
|
end
|
|
31
61
|
expect(@session).to have_xpath("//a[@id='open-prompt' and @response='matched']")
|
|
32
62
|
end
|
|
33
|
-
|
|
63
|
+
|
|
34
64
|
it "should not accept the prompt if the message doesn't match" do
|
|
35
65
|
expect do
|
|
36
66
|
@session.accept_prompt 'Incorrect Text', with: 'not matched' do
|
|
@@ -38,7 +68,6 @@ Capybara::SpecHelper.spec '#accept_prompt', :requires => [:modals] do
|
|
|
38
68
|
end
|
|
39
69
|
end.to raise_error(Capybara::ModalNotFound)
|
|
40
70
|
end
|
|
41
|
-
|
|
42
71
|
|
|
43
72
|
it "should return the message presented" do
|
|
44
73
|
message = @session.accept_prompt with: 'the response' do
|
|
@@ -46,4 +75,4 @@ Capybara::SpecHelper.spec '#accept_prompt', :requires => [:modals] do
|
|
|
46
75
|
end
|
|
47
76
|
expect(message).to eq('Prompt opened')
|
|
48
77
|
end
|
|
49
|
-
end
|
|
78
|
+
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec "#all" do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_html')
|
|
@@ -6,7 +7,7 @@ Capybara::SpecHelper.spec "#all" do
|
|
|
6
7
|
it "should find all elements using the given locator" do
|
|
7
8
|
expect(@session.all('//p').size).to eq(3)
|
|
8
9
|
expect(@session.all('//h1').first.text).to eq('This is a test')
|
|
9
|
-
expect(@session.all("//input[@id='test_field']").first
|
|
10
|
+
expect(@session.all("//input[@id='test_field']").first.value).to eq('monkey')
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
it "should return an empty array when nothing was found" do
|
|
@@ -15,19 +16,20 @@ Capybara::SpecHelper.spec "#all" do
|
|
|
15
16
|
|
|
16
17
|
it "should accept an XPath instance" do
|
|
17
18
|
@session.visit('/form')
|
|
18
|
-
@xpath =
|
|
19
|
+
@xpath = Capybara::Selector.all[:fillable_field].call('Name')
|
|
20
|
+
expect(@xpath).to be_a(::XPath::Union)
|
|
19
21
|
@result = @session.all(@xpath).map { |r| r.value }
|
|
20
22
|
expect(@result).to include('Smith', 'John', 'John Smith')
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
it "should raise an error when given invalid options" do
|
|
24
|
-
expect { @session.all('//p', :
|
|
26
|
+
expect { @session.all('//p', schmoo: "foo") }.to raise_error(ArgumentError)
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
context "with css selectors" do
|
|
28
30
|
it "should find all elements using the given selector" do
|
|
29
31
|
expect(@session.all(:css, 'h1').first.text).to eq('This is a test')
|
|
30
|
-
expect(@session.all(:css, "input[id='test_field']").first
|
|
32
|
+
expect(@session.all(:css, "input[id='test_field']").first.value).to eq('monkey')
|
|
31
33
|
end
|
|
32
34
|
|
|
33
35
|
it "should find all elements when given a list of selectors" do
|
|
@@ -38,7 +40,7 @@ Capybara::SpecHelper.spec "#all" do
|
|
|
38
40
|
context "with xpath selectors" do
|
|
39
41
|
it "should find the first element using the given locator" do
|
|
40
42
|
expect(@session.all(:xpath, '//h1').first.text).to eq('This is a test')
|
|
41
|
-
expect(@session.all(:xpath, "//input[@id='test_field']").first
|
|
43
|
+
expect(@session.all(:xpath, "//input[@id='test_field']").first.value).to eq('monkey')
|
|
42
44
|
end
|
|
43
45
|
end
|
|
44
46
|
|
|
@@ -46,17 +48,17 @@ Capybara::SpecHelper.spec "#all" do
|
|
|
46
48
|
before { Capybara.default_selector = :css }
|
|
47
49
|
it "should find the first element using the given locator" do
|
|
48
50
|
expect(@session.all('h1').first.text).to eq('This is a test')
|
|
49
|
-
expect(@session.all("input[id='test_field']").first
|
|
51
|
+
expect(@session.all("input[id='test_field']").first.value).to eq('monkey')
|
|
50
52
|
end
|
|
51
53
|
end
|
|
52
54
|
|
|
53
55
|
context "with visible filter" do
|
|
54
56
|
it "should only find visible nodes when true" do
|
|
55
|
-
expect(@session.all(:css, "a.simple", :
|
|
57
|
+
expect(@session.all(:css, "a.simple", visible: true).size).to eq(1)
|
|
56
58
|
end
|
|
57
59
|
|
|
58
60
|
it "should find nodes regardless of whether they are invisible when false" do
|
|
59
|
-
expect(@session.all(:css, "a.simple", :
|
|
61
|
+
expect(@session.all(:css, "a.simple", visible: false).size).to eq(2)
|
|
60
62
|
end
|
|
61
63
|
|
|
62
64
|
it "should default to Capybara.ignore_hidden_elements" do
|
|
@@ -65,73 +67,84 @@ Capybara::SpecHelper.spec "#all" do
|
|
|
65
67
|
Capybara.ignore_hidden_elements = false
|
|
66
68
|
expect(@session.all(:css, "a.simple").size).to eq(2)
|
|
67
69
|
end
|
|
70
|
+
|
|
71
|
+
context "with per session config", requires: [:psc] do
|
|
72
|
+
it "should use the sessions ignore_hidden_elements", psc: true do
|
|
73
|
+
Capybara.ignore_hidden_elements = true
|
|
74
|
+
@session.config.ignore_hidden_elements = false
|
|
75
|
+
expect(Capybara.ignore_hidden_elements).to eq(true)
|
|
76
|
+
expect(@session.all(:css, "a.simple").size).to eq(2)
|
|
77
|
+
@session.config.ignore_hidden_elements = true
|
|
78
|
+
expect(@session.all(:css, "a.simple").size).to eq(1)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
68
81
|
end
|
|
69
82
|
|
|
70
83
|
context 'with element count filters' do
|
|
71
84
|
context ':count' do
|
|
72
85
|
it 'should succeed when the number of elements founds matches the expectation' do
|
|
73
|
-
expect { @session.all(:css, 'h1, p', :
|
|
86
|
+
expect { @session.all(:css, 'h1, p', count: 4) }.to_not raise_error
|
|
74
87
|
end
|
|
75
88
|
it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
|
|
76
|
-
expect { @session.all(:css, 'h1, p', :
|
|
89
|
+
expect { @session.all(:css, 'h1, p', count: 5) }.to raise_error(Capybara::ExpectationNotMet)
|
|
77
90
|
end
|
|
78
91
|
end
|
|
79
92
|
context ':minimum' do
|
|
80
93
|
it 'should succeed when the number of elements founds matches the expectation' do
|
|
81
|
-
expect { @session.all(:css, 'h1, p', :
|
|
94
|
+
expect { @session.all(:css, 'h1, p', minimum: 0) }.to_not raise_error
|
|
82
95
|
end
|
|
83
96
|
it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
|
|
84
|
-
expect { @session.all(:css, 'h1, p', :
|
|
97
|
+
expect { @session.all(:css, 'h1, p', minimum: 5) }.to raise_error(Capybara::ExpectationNotMet)
|
|
85
98
|
end
|
|
86
99
|
end
|
|
87
100
|
context ':maximum' do
|
|
88
101
|
it 'should succeed when the number of elements founds matches the expectation' do
|
|
89
|
-
expect { @session.all(:css, 'h1, p', :
|
|
102
|
+
expect { @session.all(:css, 'h1, p', maximum: 4) }.to_not raise_error
|
|
90
103
|
end
|
|
91
104
|
it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
|
|
92
|
-
expect { @session.all(:css, 'h1, p', :
|
|
105
|
+
expect { @session.all(:css, 'h1, p', maximum: 0) }.to raise_error(Capybara::ExpectationNotMet)
|
|
93
106
|
end
|
|
94
107
|
end
|
|
95
108
|
context ':between' do
|
|
96
109
|
it 'should succeed when the number of elements founds matches the expectation' do
|
|
97
|
-
expect { @session.all(:css, 'h1, p', :
|
|
110
|
+
expect { @session.all(:css, 'h1, p', between: 2..7) }.to_not raise_error
|
|
98
111
|
end
|
|
99
112
|
it 'should raise ExpectationNotMet when the number of elements founds does not match the expectation' do
|
|
100
|
-
expect { @session.all(:css, 'h1, p', :
|
|
113
|
+
expect { @session.all(:css, 'h1, p', between: 0..3) }.to raise_error(Capybara::ExpectationNotMet)
|
|
101
114
|
end
|
|
102
115
|
end
|
|
103
116
|
|
|
104
117
|
context 'with multiple count filters' do
|
|
105
118
|
it 'ignores other filters when :count is specified' do
|
|
106
|
-
o = {:
|
|
107
|
-
:
|
|
108
|
-
:
|
|
109
|
-
:
|
|
119
|
+
o = {count: 4,
|
|
120
|
+
minimum: 5,
|
|
121
|
+
maximum: 0,
|
|
122
|
+
between: 0..3}
|
|
110
123
|
expect { @session.all(:css, 'h1, p', o) }.to_not raise_error
|
|
111
124
|
end
|
|
112
125
|
context 'with no :count expectation' do
|
|
113
126
|
it 'fails if :minimum is not met' do
|
|
114
|
-
o = {:
|
|
115
|
-
:
|
|
116
|
-
:
|
|
127
|
+
o = {minimum: 5,
|
|
128
|
+
maximum: 4,
|
|
129
|
+
between: 2..7}
|
|
117
130
|
expect { @session.all(:css, 'h1, p', o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
118
131
|
end
|
|
119
132
|
it 'fails if :maximum is not met' do
|
|
120
|
-
o = {:
|
|
121
|
-
:
|
|
122
|
-
:
|
|
133
|
+
o = {minimum: 0,
|
|
134
|
+
maximum: 0,
|
|
135
|
+
between: 2..7}
|
|
123
136
|
expect { @session.all(:css, 'h1, p', o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
124
137
|
end
|
|
125
138
|
it 'fails if :between is not met' do
|
|
126
|
-
o = {:
|
|
127
|
-
:
|
|
128
|
-
:
|
|
139
|
+
o = {minimum: 0,
|
|
140
|
+
maximum: 4,
|
|
141
|
+
between: 0..3}
|
|
129
142
|
expect { @session.all(:css, 'h1, p', o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
130
143
|
end
|
|
131
144
|
it 'succeeds if all combineable expectations are met' do
|
|
132
|
-
o = {:
|
|
133
|
-
:
|
|
134
|
-
:
|
|
145
|
+
o = {minimum: 0,
|
|
146
|
+
maximum: 4,
|
|
147
|
+
between: 2..7}
|
|
135
148
|
expect { @session.all(:css, 'h1, p', o) }.to_not raise_error
|
|
136
149
|
end
|
|
137
150
|
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
Capybara::SpecHelper.spec '#ancestor' do
|
|
3
|
+
before do
|
|
4
|
+
@session.visit('/with_html')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
after do
|
|
8
|
+
Capybara::Selector.remove(:monkey)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should find the ancestor element using the given locator" do
|
|
12
|
+
el = @session.find(:css, '#first_image')
|
|
13
|
+
expect(el.ancestor('//p')).to have_text('Lorem ipsum dolor')
|
|
14
|
+
expect(el.ancestor("//a")[:'aria-label']).to eq('Go to simple')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should find the ancestor element using the given locator and options" do
|
|
18
|
+
el = @session.find(:css, '#child')
|
|
19
|
+
expect(el.ancestor('//div', text: 'Ancestor Ancestor Ancestor')[:id]).to eq('ancestor3')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should raise an error if there are multiple matches" do
|
|
23
|
+
el = @session.find(:css, '#child')
|
|
24
|
+
expect { el.ancestor('//div') }.to raise_error(Capybara::Ambiguous)
|
|
25
|
+
expect { el.ancestor('//div', text: 'Ancestor') }.to raise_error(Capybara::Ambiguous)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context "with css selectors" do
|
|
29
|
+
it "should find the first element using the given locator" do
|
|
30
|
+
el = @session.find(:css, '#first_image')
|
|
31
|
+
expect(el.ancestor(:css, 'p')).to have_text('Lorem ipsum dolor')
|
|
32
|
+
expect(el.ancestor(:css, 'a')[:'aria-label']).to eq('Go to simple')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should support pseudo selectors" do
|
|
36
|
+
el = @session.find(:css, '#button_img')
|
|
37
|
+
expect(el.ancestor(:css, 'button:disabled')[:id]).to eq('ancestor_button')
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context "with xpath selectors" do
|
|
42
|
+
it "should find the first element using the given locator" do
|
|
43
|
+
el = @session.find(:css, '#first_image')
|
|
44
|
+
expect(el.ancestor(:xpath, '//p')).to have_text('Lorem ipsum dolor')
|
|
45
|
+
expect(el.ancestor(:xpath, "//a")[:'aria-label']).to eq('Go to simple')
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "with custom selector" do
|
|
50
|
+
it "should use the custom selector" do
|
|
51
|
+
Capybara.add_selector(:level) do
|
|
52
|
+
xpath { |num| ".//*[@id='ancestor#{num}']" }
|
|
53
|
+
end
|
|
54
|
+
el = @session.find(:css, '#child')
|
|
55
|
+
expect(el.ancestor(:level, 1).text).to eq('Ancestor Child')
|
|
56
|
+
expect(el.ancestor(:level, 3).text).to eq('Ancestor Ancestor Ancestor Child')
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
it "should raise ElementNotFound with a useful default message if nothing was found" do
|
|
62
|
+
el = @session.find(:css, '#child')
|
|
63
|
+
expect do
|
|
64
|
+
el.ancestor(:xpath, '//div[@id="nosuchthing"]')
|
|
65
|
+
end.to raise_error(Capybara::ElementNotFound, "Unable to find xpath \"//div[@id=\\\"nosuchthing\\\"]\" that is an ancestor of visible css \"#child\"")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
context "within a scope" do
|
|
71
|
+
it "should limit the ancestors to inside the scope" do
|
|
72
|
+
@session.within(:css, '#ancestor2') do
|
|
73
|
+
el = @session.find(:css, '#child')
|
|
74
|
+
expect(el.ancestor(:css,'div', text: 'Ancestor')[:id]).to eq('ancestor1')
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should raise if selector type is unknown" do
|
|
80
|
+
el = @session.find(:css, '#child')
|
|
81
|
+
expect do
|
|
82
|
+
el.ancestor(:unknown, '//h1')
|
|
83
|
+
end.to raise_error(ArgumentError)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
Capybara::SpecHelper.spec '#assert_all_of_selectors' do
|
|
3
|
+
before do
|
|
4
|
+
@session.visit('/with_html')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should be true if the given selectors are on the page" do
|
|
8
|
+
@session.assert_all_of_selectors(:css, "p a#foo", "h2#h2one", "h2#h2two" )
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should be false if any of the given selectors are not on the page" do
|
|
12
|
+
expect { @session.assert_all_of_selectors(:css, "p a#foo", "h2#h2three", "h2#h2one")}.to raise_error(Capybara::ElementNotFound)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should use default selector" do
|
|
16
|
+
Capybara.default_selector = :css
|
|
17
|
+
expect { @session.assert_all_of_selectors("p a#foo", "h2#h2three", "h2#h2one")}.to raise_error(Capybara::ElementNotFound)
|
|
18
|
+
@session.assert_all_of_selectors("p a#foo", "h2#h2two", "h2#h2one" )
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "should respect scopes" do
|
|
22
|
+
it "when used with `within`" do
|
|
23
|
+
@session.within "//p[@id='first']" do
|
|
24
|
+
@session.assert_all_of_selectors(".//a[@id='foo']")
|
|
25
|
+
expect { @session.assert_all_of_selectors(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "when called on elements" do
|
|
30
|
+
el = @session.find "//p[@id='first']"
|
|
31
|
+
el.assert_all_of_selectors(".//a[@id='foo']")
|
|
32
|
+
expect { el.assert_all_of_selectors(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
context "with options" do
|
|
37
|
+
it "should apply options to all locators" do
|
|
38
|
+
@session.assert_all_of_selectors(:field, 'normal', 'additional_newline', type: :textarea)
|
|
39
|
+
expect { @session.assert_all_of_selectors(:field, 'normal', 'test_field', 'additional_newline', type: :textarea) }.to raise_error(Capybara::ElementNotFound)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context "with wait", requires: [:js] do
|
|
44
|
+
it "should not raise error if all the elements appear before given wait duration" do
|
|
45
|
+
Capybara.using_wait_time(0.1) do
|
|
46
|
+
@session.visit('/with_js')
|
|
47
|
+
@session.click_link('Click me')
|
|
48
|
+
@session.assert_all_of_selectors(:css, "a#clickable", "a#has-been-clicked", '#drag', wait: 0.9)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
Capybara::SpecHelper.spec '#assert_none_of_selectors' do
|
|
55
|
+
before do
|
|
56
|
+
@session.visit('/with_html')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should be false if any of the given locators are on the page" do
|
|
60
|
+
expect { @session.assert_none_of_selectors(:xpath, "//p", "//a") }.to raise_error(Capybara::ElementNotFound)
|
|
61
|
+
expect { @session.assert_none_of_selectors(:xpath, "//abbr", "//a") }.to raise_error(Capybara::ElementNotFound)
|
|
62
|
+
expect { @session.assert_none_of_selectors(:css, "p a#foo") }.to raise_error(Capybara::ElementNotFound)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should be true if none of the given locators are on the page" do
|
|
66
|
+
@session.assert_none_of_selectors(:xpath, "//abbr", "//td" )
|
|
67
|
+
@session.assert_none_of_selectors(:css, "p a#doesnotexist", "abbr")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should use default selector" do
|
|
71
|
+
Capybara.default_selector = :css
|
|
72
|
+
@session.assert_none_of_selectors("p a#doesnotexist", "abbr")
|
|
73
|
+
expect { @session.assert_none_of_selectors("abbr", "p a#foo") }.to raise_error(Capybara::ElementNotFound)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context "should respect scopes" do
|
|
77
|
+
it "when used with `within`" do
|
|
78
|
+
@session.within "//p[@id='first']" do
|
|
79
|
+
expect { @session.assert_none_of_selectors(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
|
|
80
|
+
@session.assert_none_of_selectors(".//a[@id='red']")
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "when called on an element" do
|
|
85
|
+
el = @session.find "//p[@id='first']"
|
|
86
|
+
expect { el.assert_none_of_selectors(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
|
|
87
|
+
el.assert_none_of_selectors(".//a[@id='red']")
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context "with options" do
|
|
92
|
+
it "should apply the options to all locators" do
|
|
93
|
+
expect { @session.assert_none_of_selectors("//p//a", text: "Redirect") }.to raise_error(Capybara::ElementNotFound)
|
|
94
|
+
@session.assert_none_of_selectors("//p", text: "Doesnotexist")
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should discard all matches where the given regexp is matched" do
|
|
98
|
+
expect { @session.assert_none_of_selectors("//p//a", text: /re[dab]i/i, count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
99
|
+
@session.assert_none_of_selectors("//p//a", text: /Red$/)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
context "with wait", requires: [:js] do
|
|
104
|
+
it "should not find elements if they appear after given wait duration" do
|
|
105
|
+
@session.visit('/with_js')
|
|
106
|
+
@session.click_link('Click me')
|
|
107
|
+
@session.assert_none_of_selectors(:css, "#new_field", "a#has-been-clicked", wait: 0.1)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|