Refactored XPath expressions

This commit is contained in:
Jonas Nicklas 2009-11-21 00:05:25 +01:00
parent 8720e4b590
commit 05af35a5d3
1 changed files with 14 additions and 26 deletions

View File

@ -1,4 +1,16 @@
class Capybara::Session
FIELDS_PATHS = {
:text_field => proc { |id| "//input[@type='text'][@id='#{id}']" },
:text_area => proc { |id| "//textarea[@id='#{id}']" },
:password_field => proc { |id| "//input[@type='password'][@id='#{id}']" },
:radio => proc { |id| "//input[@type='radio'][@id='#{id}']" },
:hidden_field => proc { |id| "//input[@type='hidden'][@id='#{id}']" },
:checkbox => proc { |id| "//input[@type='checkbox'][@id='#{id}']" },
:select => proc { |id| "//select[@id='#{id}']" },
:file_field => proc { |id| "//input[@type='file'][@id='#{id}']" }
}
attr_reader :mode, :app
def initialize(mode, app)
@ -102,18 +114,13 @@ class Capybara::Session
alias_method :field_labeled, :find_field
def find_link(locator)
link = find_element("//a[@id='#{locator}']", "//a[contains(.,'#{locator}')]", "//a[@title='#{locator}']")
link = find("//a[@id='#{locator}' or contains(.,'#{locator}') or @title='#{locator}']").first
raise Capybara::ElementNotFound, "no link with title, id or text '#{locator}' found" unless link
link
end
def find_button(locator)
button = find_element(
"//input[@type='submit'][@id='#{locator}']",
"//input[@type='submit'][@value='#{locator}']",
"//input[@type='image'][@id='#{locator}']",
"//input[@type='image'][@value='#{locator}']"
)
button = find("//input[@type='submit' or @type='image'][@id='#{locator}' or @value='#{locator}']").first
raise Capybara::ElementNotFound, "no button with value or id '#{locator}' found" unless button
button
end
@ -143,17 +150,6 @@ private
@scopes ||= []
end
FIELDS_PATHS = {
:text_field => proc { |id| "//input[@type='text'][@id='#{id}']" },
:text_area => proc { |id| "//textarea[@id='#{id}']" },
:password_field => proc { |id| "//input[@type='password'][@id='#{id}']" },
:radio => proc { |id| "//input[@type='radio'][@id='#{id}']" },
:hidden_field => proc { |id| "//input[@type='hidden'][@id='#{id}']" },
:checkbox => proc { |id| "//input[@type='checkbox'][@id='#{id}']" },
:select => proc { |id| "//select[@id='#{id}']" },
:file_field => proc { |id| "//input[@type='file'][@id='#{id}']" }
}
def find_field_by_id(locator, *kinds)
kinds.each do |kind|
path = FIELDS_PATHS[kind]
@ -173,14 +169,6 @@ private
end
return nil
end
def find_element(*locators)
locators.each do |locator|
element = find(locator).first
return element if element
end
return nil
end
def find(locator)
locator = current_scope.to_s + locator