Remove some looping and reduce the number of xpath queries run to locate elements.

This commit is contained in:
Rob Holland 2009-12-04 11:15:28 +00:00
parent 59931016cc
commit f652f4857a
1 changed files with 5 additions and 10 deletions

View File

@ -165,21 +165,16 @@ module Capybara
end
def find_field_by_id(locator, *kinds)
kinds.each do |kind|
path = FIELDS_PATHS[kind]
element = find(path.call(locator)).first
return element if element
end
return nil
field_locator = kinds.map { |kind| FIELDS_PATHS[kind].call(locator) }.join("|")
element = find(field_locator).first
return element
end
def find_field_by_label(locator, *kinds)
label = find("//label[text()='#{locator}']").first || find("//label[contains(.,'#{locator}')]").first
if label
kinds.each do |kind|
element = find_field_by_id(label[:for], kind)
return element if element
end
element = find_field_by_id(label[:for], *kinds)
return element if element
end
return nil
end