mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
Adjust has_select filters to allow invisible options in some cases
- selected filter always allows invisible options - options filter allows invisible options if the select itself is invisible - with_options filter allows invisible options if hte select itself is invisible
This commit is contained in:
parent
91e09a793d
commit
33e233a029
3 changed files with 47 additions and 3 deletions
|
@ -226,12 +226,22 @@ Capybara.add_selector(:select) do
|
|||
label "select box"
|
||||
xpath { |locator| XPath::HTML.select(locator) }
|
||||
filter(:options) do |node, options|
|
||||
actual = node.all(:xpath, './/option').map { |option| option.text }
|
||||
if node.visible?
|
||||
actual = node.all(:xpath, './/option').map { |option| option.text }
|
||||
else
|
||||
actual = node.all(:xpath, './/option', visible: false).map { |option| option.text(:all) }
|
||||
end
|
||||
options.sort == actual.sort
|
||||
end
|
||||
filter(:with_options) { |node, options| options.all? { |option| node.first(:option, option, minimum: 0) } }
|
||||
filter(:with_options) do |node, options|
|
||||
finder_settings = { minimum: 0 }
|
||||
if !node.visible?
|
||||
finder_settings[:visible] = false
|
||||
end
|
||||
options.all? { |option| node.first(:option, option, finder_settings) }
|
||||
end
|
||||
filter(:selected) do |node, selected|
|
||||
actual = node.all(:xpath, './/option').select { |option| option.selected? }.map { |option| option.text }
|
||||
actual = node.all(:xpath, './/option', visible: false).select { |option| option.selected? }.map { |option| option.text(:all) }
|
||||
[selected].flatten.sort == actual.sort
|
||||
end
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
|
|
|
@ -59,6 +59,11 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|||
'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
||||
])
|
||||
end
|
||||
|
||||
it "should be true even when the selected option invisible, regardless of the select's visibility" do
|
||||
expect(@session).to have_select('Icecream', :visible => false, :selected => 'Chocolate')
|
||||
expect(@session).to have_select('Sorbet', :selected => 'Vanilla')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with exact options' do
|
||||
|
@ -74,6 +79,11 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|||
expect(@session).not_to have_select('Region', :options => ['Norway', 'Sweden'])
|
||||
expect(@session).not_to have_select('Region', :options => ['Norway', 'Norway', 'Norway'])
|
||||
end
|
||||
|
||||
it" should be true even when the options are invisible, if the select itself is invisible" do
|
||||
expect(@session).to have_select("Icecream", :visible => false, :options => ['Chocolate', 'Vanilla', 'Strawberry'])
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'with partial options' do
|
||||
|
@ -87,6 +97,10 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|||
expect(@session).not_to have_select('Does not exist', :with_options => ['John'])
|
||||
expect(@session).not_to have_select('Region', :with_options => ['Norway', 'Sweden', 'Finland', 'Latvia'])
|
||||
end
|
||||
|
||||
it" should be true even when the options are invisible, if the select itself is invisible" do
|
||||
expect(@session).to have_select("Icecream", :visible => false, :with_options => ['Vanilla', 'Strawberry'])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -191,6 +191,26 @@ New line after and before textarea tag
|
|||
</select>
|
||||
</p>
|
||||
|
||||
<!-- invisible select and options -->
|
||||
<p style="display: none">
|
||||
<label for="form_icecream">Icecream</label>
|
||||
<select name="form[icecream]" id="form_icecream">
|
||||
<option selected="selected">Chocolate</option>
|
||||
<option>Vanilla</option>
|
||||
<option>Strawberry</option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<!-- visible select with invisible selected option (which some browsers may treat as visible) -->
|
||||
<p>
|
||||
<label for="form_sorbet">Sorbet</label>
|
||||
<select name="form[sorbet]" id="form_sorbet">
|
||||
<option>Chocolate</option>
|
||||
<option selected="selected" style="display: none">Vanilla</option>
|
||||
<option>Strawberry</option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<span>First address<span>
|
||||
<label for='address1_street'>Street</label>
|
||||
|
|
Loading…
Reference in a new issue