1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
# frozen_string_literal: true
Capybara::SpecHelper.spec '#assert_all_of_selectors' do
before do
@session.visit('/with_html')
end
it 'should be true if the given selectors are on the page' do
@session.assert_all_of_selectors(:css, 'p a#foo', 'h2#h2one', 'h2#h2two')
end
it 'should be false if any of the given selectors are not on the page' do
expect { @session.assert_all_of_selectors(:css, 'p a#foo', 'h2#h2three', 'h2#h2one') }.to raise_error(Capybara::ElementNotFound)
end
it 'should use default selector' do
Capybara.default_selector = :css
expect { @session.assert_all_of_selectors('p a#foo', 'h2#h2three', 'h2#h2one') }.to raise_error(Capybara::ElementNotFound)
@session.assert_all_of_selectors('p a#foo', 'h2#h2two', 'h2#h2one')
end
it 'should support filter block' do
expect { @session.assert_all_of_selectors(:css, 'h2#h2one', 'h2#h2two') { |n| n[:id] == 'h2one' } }.to raise_error(Capybara::ElementNotFound, /custom filter block/)
end
context 'should respect scopes' do
it 'when used with `within`' do
@session.within "//p[@id='first']" do
@session.assert_all_of_selectors(".//a[@id='foo']")
expect { @session.assert_all_of_selectors(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
end
end
it 'when called on elements' do
el = @session.find "//p[@id='first']"
el.assert_all_of_selectors(".//a[@id='foo']")
expect { el.assert_all_of_selectors(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
end
end
context 'with options' do
it 'should apply options to all locators' do
@session.assert_all_of_selectors(:field, 'normal', 'additional_newline', type: :textarea)
expect { @session.assert_all_of_selectors(:field, 'normal', 'test_field', 'additional_newline', type: :textarea) }.to raise_error(Capybara::ElementNotFound)
end
end
context 'with wait', requires: [:js] do
it 'should not raise error if all the elements appear before given wait duration' do
Capybara.using_wait_time(0.1) do
@session.visit('/with_js')
@session.click_link('Click me')
@session.assert_all_of_selectors(:css, 'a#clickable', 'a#has-been-clicked', '#drag', wait: 1.5)
end
end
end
end
Capybara::SpecHelper.spec '#assert_none_of_selectors' do
before do
@session.visit('/with_html')
end
it 'should be false if any of the given locators are on the page' do
expect { @session.assert_none_of_selectors(:xpath, '//p', '//a') }.to raise_error(Capybara::ElementNotFound)
expect { @session.assert_none_of_selectors(:xpath, '//abbr', '//a') }.to raise_error(Capybara::ElementNotFound)
expect { @session.assert_none_of_selectors(:css, 'p a#foo') }.to raise_error(Capybara::ElementNotFound)
end
it 'should be true if none of the given locators are on the page' do
@session.assert_none_of_selectors(:xpath, '//abbr', '//td')
@session.assert_none_of_selectors(:css, 'p a#doesnotexist', 'abbr')
end
it 'should use default selector' do
Capybara.default_selector = :css
@session.assert_none_of_selectors('p a#doesnotexist', 'abbr')
expect { @session.assert_none_of_selectors('abbr', 'p a#foo') }.to raise_error(Capybara::ElementNotFound)
end
context 'should respect scopes' do
it 'when used with `within`' do
@session.within "//p[@id='first']" do
expect { @session.assert_none_of_selectors(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
@session.assert_none_of_selectors(".//a[@id='red']")
end
end
it 'when called on an element' do
el = @session.find "//p[@id='first']"
expect { el.assert_none_of_selectors(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
el.assert_none_of_selectors(".//a[@id='red']")
end
end
context 'with options' do
it 'should apply the options to all locators' do
expect { @session.assert_none_of_selectors('//p//a', text: 'Redirect') }.to raise_error(Capybara::ElementNotFound)
@session.assert_none_of_selectors('//p', text: 'Doesnotexist')
end
it 'should discard all matches where the given regexp is matched' do
expect { @session.assert_none_of_selectors('//p//a', text: /re[dab]i/i, count: 1) }.to raise_error(Capybara::ElementNotFound)
@session.assert_none_of_selectors('//p//a', text: /Red$/)
end
end
context 'with wait', requires: [:js] do
it 'should not find elements if they appear after given wait duration' do
@session.visit('/with_js')
@session.click_link('Click me')
@session.assert_none_of_selectors(:css, '#new_field', 'a#has-been-clicked', wait: 0.1)
end
end
end
Capybara::SpecHelper.spec '#assert_any_of_selectors' do
before do
@session.visit('/with_html')
end
it 'should be true if any of the given selectors are on the page' do
@session.assert_any_of_selectors(:css, 'a#foo', 'h2#h2three')
@session.assert_any_of_selectors(:css, 'h2#h2three', 'a#foo')
end
it 'should be false if none of the given selectors are on the page' do
expect { @session.assert_any_of_selectors(:css, 'h2#h2three', 'h4#h4four') }.to raise_error(Capybara::ElementNotFound)
end
it 'should use default selector' do
Capybara.default_selector = :css
expect { @session.assert_any_of_selectors('h2#h2three', 'h5#h5five') }.to raise_error(Capybara::ElementNotFound)
@session.assert_any_of_selectors('p a#foo', 'h2#h2two', 'h2#h2one')
end
it 'should support filter block' do
expect { @session.assert_any_of_selectors(:css, 'h2#h2one', 'h2#h2two') { |_n| false } }.to raise_error(Capybara::ElementNotFound, /custom filter block/)
end
end
|