mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
add locate field attribute filter set
This commit is contained in:
parent
48ab1ede94
commit
5030a152f3
4 changed files with 43 additions and 2 deletions
|
@ -102,6 +102,20 @@ module Capybara
|
||||||
locate_field += XPath.descendant(:label)[XPath.string.n.is(locator)].descendant(xpath)
|
locate_field += XPath.descendant(:label)[XPath.string.n.is(locator)].descendant(xpath)
|
||||||
locate_field
|
locate_field
|
||||||
end
|
end
|
||||||
|
|
||||||
|
FilterSet.add(:locate_field) do
|
||||||
|
filter(:id) { |node, id| node['id'] == id }
|
||||||
|
filter(:name) { |node, name| node['name'] == name }
|
||||||
|
filter(:placeholder) { |node, placeholder| node['placeholder'] == placeholder }
|
||||||
|
|
||||||
|
describe do |options|
|
||||||
|
desc = String.new
|
||||||
|
[:id, :name, :placeholder].each do |opt|
|
||||||
|
desc << " with #{opt.to_s} #{options[opt]}" if options.has_key?(opt)
|
||||||
|
end
|
||||||
|
desc
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -123,6 +137,9 @@ Capybara.add_selector(:field) do
|
||||||
xpath = locate_field(xpath, locator.to_s) unless locator.nil?
|
xpath = locate_field(xpath, locator.to_s) unless locator.nil?
|
||||||
xpath
|
xpath
|
||||||
end
|
end
|
||||||
|
|
||||||
|
filter_set(:locate_field)
|
||||||
|
|
||||||
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
||||||
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
||||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||||
|
@ -222,6 +239,8 @@ Capybara.add_selector(:fillable_field) do
|
||||||
xpath
|
xpath
|
||||||
end
|
end
|
||||||
|
|
||||||
|
filter_set(:locate_field)
|
||||||
|
|
||||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||||
filter(:multiple, boolean: true) { |node, value| !(value ^ node[:multiple]) }
|
filter(:multiple, boolean: true) { |node, value| !(value ^ node[:multiple]) }
|
||||||
|
|
||||||
|
@ -242,6 +261,8 @@ Capybara.add_selector(:radio_button) do
|
||||||
xpath
|
xpath
|
||||||
end
|
end
|
||||||
|
|
||||||
|
filter_set(:locate_field)
|
||||||
|
|
||||||
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
||||||
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
||||||
filter(:option) { |node, value| node.value == value.to_s }
|
filter(:option) { |node, value| node.value == value.to_s }
|
||||||
|
@ -265,6 +286,8 @@ Capybara.add_selector(:checkbox) do
|
||||||
xpath
|
xpath
|
||||||
end
|
end
|
||||||
|
|
||||||
|
filter_set(:locate_field)
|
||||||
|
|
||||||
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
||||||
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
||||||
filter(:option) { |node, value| node.value == value.to_s }
|
filter(:option) { |node, value| node.value == value.to_s }
|
||||||
|
@ -289,6 +312,8 @@ Capybara.add_selector(:select) do
|
||||||
xpath
|
xpath
|
||||||
end
|
end
|
||||||
|
|
||||||
|
filter_set(:locate_field)
|
||||||
|
|
||||||
filter(:options) do |node, options|
|
filter(:options) do |node, options|
|
||||||
if node.visible?
|
if node.visible?
|
||||||
actual = node.all(:xpath, './/option').map { |option| option.text }
|
actual = node.all(:xpath, './/option').map { |option| option.text }
|
||||||
|
@ -349,6 +374,8 @@ Capybara.add_selector(:file_field) do
|
||||||
xpath
|
xpath
|
||||||
end
|
end
|
||||||
|
|
||||||
|
filter_set(:locate_field)
|
||||||
|
|
||||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||||
filter(:multiple, boolean: true) { |node, value| !(value ^ node[:multiple]) }
|
filter(:multiple, boolean: true) { |node, value| !(value ^ node[:multiple]) }
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ Capybara::SpecHelper.spec '#find_field' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with no locator', locator: true do
|
context 'with no locator' do
|
||||||
it 'should use options to find the field' do
|
it 'should use options to find the field' do
|
||||||
expect(@session.find_field(with: 'dog')['id']).to eq "form_pets_dog"
|
expect(@session.find_field(with: 'dog')['id']).to eq "form_pets_dog"
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,4 +32,18 @@ Capybara::SpecHelper.spec Capybara::Selector do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "locate_field selectors" do
|
||||||
|
it "can find specifically by id" do
|
||||||
|
expect(@session.find(:field, id: 'customer_email').value).to eq "ben@ben.com"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can find specifically by name" do
|
||||||
|
expect(@session.find(:field, name: 'form[other_title]')['id']).to eq "form_other_title"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can find specifically by placeholder" do
|
||||||
|
expect(@session.find(:field, placeholder: 'FirstName')['id']).to eq "form_first_name"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -37,7 +37,7 @@
|
||||||
<p>
|
<p>
|
||||||
<label for="form_first_name">
|
<label for="form_first_name">
|
||||||
First Name
|
First Name
|
||||||
<input type="text" name="form[first_name]" value="John" id="form_first_name"/>
|
<input type="text" name="form[first_name]" value="John" id="form_first_name" placeholder="FirstName"/>
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue