|
9 | 9 | expect(@session.first("//input[@id='test_field']").value).to eq('monkey') |
10 | 10 | end |
11 | 11 |
|
12 | | - it "should return nil when nothing was found" do |
13 | | - expect(@session.first('//div[@id="nosuchthing"]')).to be_nil |
| 12 | + it "should raise ElementNotFound when nothing was found" do |
| 13 | + expect do |
| 14 | + @session.first('//div[@id="nosuchthing"]') |
| 15 | + end.to raise_error Capybara::ElementNotFound |
| 16 | + end |
| 17 | + |
| 18 | + it "should return nil when nothing was found if count options allow no results" do |
| 19 | + expect(@session.first('//div[@id="nosuchthing"]', minimum: 0)).to be_nil |
14 | 20 | end |
15 | 21 |
|
16 | 22 | it "should accept an XPath instance" do |
|
22 | 28 |
|
23 | 29 | it "should warn when unused parameters are passed" do |
24 | 30 | expect_any_instance_of(Kernel).to receive(:warn).with(/Unused parameters passed.*unused text/) |
25 | | - @session.first(:css, '.header h2', 'unused text') |
| 31 | + @session.first(:css, 'h1', 'unused text') |
26 | 32 | end |
27 | 33 |
|
28 | 34 | context "with css selectors" do |
|
49 | 55 |
|
50 | 56 | context "with visible filter" do |
51 | 57 | it "should only find visible nodes when true" do |
52 | | - expect(@session.first(:css, "a#invisible", visible: true)).to be_nil |
| 58 | + expect do |
| 59 | + @session.first(:css, "a#invisible", visible: true) |
| 60 | + end.to raise_error Capybara::ElementNotFound |
53 | 61 | end |
54 | 62 |
|
55 | 63 | it "should find nodes regardless of whether they are invisible when false" do |
56 | | - expect(@session.first(:css, "a#invisible", visible: false)).not_to be_nil |
57 | | - expect(@session.first(:css, "a#invisible", visible: false, text: 'hidden link')).not_to be_nil |
58 | | - expect(@session.first(:css, "a#visible", visible: false)).not_to be_nil |
| 64 | + expect(@session.first(:css, "a#invisible", visible: false)).to be |
| 65 | + expect(@session.first(:css, "a#invisible", visible: false, text: 'hidden link')).to be |
| 66 | + expect(@session.first(:css, "a#visible", visible: false)).to be |
59 | 67 | end |
60 | 68 |
|
61 | 69 | it "should find nodes regardless of whether they are invisible when :all" do |
62 | | - expect(@session.first(:css, "a#invisible", visible: :all)).not_to be_nil |
63 | | - expect(@session.first(:css, "a#invisible", visible: :all, text: 'hidden link')).not_to be_nil |
64 | | - expect(@session.first(:css, "a#visible", visible: :all)).not_to be_nil |
| 70 | + expect(@session.first(:css, "a#invisible", visible: :all)).to be |
| 71 | + expect(@session.first(:css, "a#invisible", visible: :all, text: 'hidden link')).to be |
| 72 | + expect(@session.first(:css, "a#visible", visible: :all)).to be |
65 | 73 | end |
66 | 74 |
|
67 | 75 | it "should find only hidden nodes when :hidden" do |
68 | | - expect(@session.first(:css, "a#invisible", visible: :hidden)).not_to be_nil |
69 | | - expect(@session.first(:css, "a#invisible", visible: :hidden, text: 'hidden link')).not_to be_nil |
70 | | - expect(@session.first(:css, "a#invisible", visible: :hidden, text: 'not hidden link')).to be_nil |
71 | | - expect(@session.first(:css, "a#visible", visible: :hidden)).to be_nil |
| 76 | + expect(@session.first(:css, "a#invisible", visible: :hidden)).to be |
| 77 | + expect(@session.first(:css, "a#invisible", visible: :hidden, text: 'hidden link')).to be |
| 78 | + expect do |
| 79 | + @session.first(:css, "a#invisible", visible: :hidden, text: 'not hidden link') |
| 80 | + end.to raise_error Capybara::ElementNotFound |
| 81 | + expect do |
| 82 | + @session.first(:css, "a#visible", visible: :hidden) |
| 83 | + end.to raise_error Capybara::ElementNotFound |
72 | 84 | end |
73 | 85 |
|
74 | 86 | it "should find only visible nodes when :visible" do |
75 | | - expect(@session.first(:css, "a#invisible", visible: :visible)).to be_nil |
76 | | - expect(@session.first(:css, "a#invisible", visible: :visible, text: 'hidden link')).to be_nil |
77 | | - expect(@session.first(:css, "a#visible", visible: :visible)).not_to be_nil |
| 87 | + expect do |
| 88 | + @session.first(:css, "a#invisible", visible: :visible) |
| 89 | + end.to raise_error Capybara::ElementNotFound |
| 90 | + expect do |
| 91 | + @session.first(:css, "a#invisible", visible: :visible, text: 'hidden link') |
| 92 | + end.to raise_error Capybara::ElementNotFound |
| 93 | + expect(@session.first(:css, "a#visible", visible: :visible)).to be |
78 | 94 | end |
79 | 95 |
|
80 | 96 | it "should default to Capybara.ignore_hidden_elements" do |
81 | 97 | Capybara.ignore_hidden_elements = true |
82 | | - expect(@session.first(:css, "a#invisible")).to be_nil |
| 98 | + expect do |
| 99 | + @session.first(:css, "a#invisible") |
| 100 | + end.to raise_error Capybara::ElementNotFound |
83 | 101 | Capybara.ignore_hidden_elements = false |
84 | | - expect(@session.first(:css, "a#invisible")).not_to be_nil |
85 | | - expect(@session.first(:css, "a")).not_to be_nil |
| 102 | + expect(@session.first(:css, "a#invisible")).to be |
| 103 | + expect(@session.first(:css, "a")).to be |
86 | 104 | end |
87 | 105 | end |
88 | 106 |
|
|
93 | 111 |
|
94 | 112 | it "should find the first element using the given locator" do |
95 | 113 | @session.within(:xpath, "//div[@id='for_bar']") do |
96 | | - expect(@session.first('.//form')).not_to be_nil |
| 114 | + expect(@session.first('.//form')).to be |
97 | 115 | end |
98 | 116 | end |
99 | 117 | end |
100 | 118 |
|
101 | | - context "with Capybara.wait_on_first_by_default", requires: [:js] do |
| 119 | + context "waiting behavior", requires: [:js] do |
102 | 120 | before do |
103 | 121 | @session.visit('/with_js') |
104 | 122 | end |
105 | 123 |
|
106 | | - it "should not wait if false" do |
107 | | - Capybara.wait_on_first_by_default = false |
| 124 | + it "should not wait if minimum: 0" do |
108 | 125 | @session.click_link('clickable') |
109 | | - expect(@session.first(:css, 'a#has-been-clicked')).to be_nil |
| 126 | + expect(@session.first(:css, 'a#has-been-clicked', minimum: 0)).to be_nil |
110 | 127 | end |
111 | 128 |
|
112 | | - it "should wait for at least one match if true" do |
113 | | - Capybara.wait_on_first_by_default = true |
| 129 | + it "should wait for at least one match by default" do |
114 | 130 | Capybara.using_wait_time(3) do |
115 | 131 | @session.click_link('clickable') |
116 | 132 | expect(@session.first(:css, 'a#has-been-clicked')).not_to be_nil |
117 | 133 | end |
118 | 134 | end |
119 | 135 |
|
120 | | - it "should return nil after waiting if no match" do |
121 | | - Capybara.wait_on_first_by_default = true |
| 136 | + it "should return nil after waiting if no match and allow_nil is true" do |
| 137 | + @session.click_link('clickable') |
| 138 | + start_time = Time.now |
122 | 139 | Capybara.using_wait_time(3) do |
123 | | - @session.click_link('clickable') |
124 | | - expect(@session.first(:css, 'a#not-a-real-link')).to be_nil |
| 140 | + expect(@session.first(:css, 'a#not-a-real-link', allow_nil: true)).to be_nil |
| 141 | + expect(Time.now-start_time).to be > 3 |
125 | 142 | end |
126 | 143 | end |
127 | 144 | end |
|
0 commit comments