1
0
Fork 0
mirror of https://github.com/teamcapybara/capybara.git synced 2022-11-09 12:08:07 -05:00

Move fieldset, table and content into xpath class

This commit is contained in:
Jonas Nicklas 2009-12-09 19:11:52 +01:00
parent 8d44e8cb74
commit 39081f3c7d
2 changed files with 34 additions and 32 deletions

View file

@ -78,7 +78,7 @@ module Capybara
end end
def has_content?(content) def has_content?(content)
has_xpath?("//*[contains(.,#{sanitized_xpath_string(content)})]") has_xpath?(XPath.content(content).to_s)
end end
def has_xpath?(path, options={}) def has_xpath?(path, options={})
@ -107,13 +107,13 @@ module Capybara
end end
def within_fieldset(locator) def within_fieldset(locator)
within "//fieldset[@id='#{locator}' or contains(legend,'#{locator}')]" do within XPath.fieldset(locator).to_s do
yield yield
end end
end end
def within_table(locator) def within_table(locator)
within "//table[@id='#{locator}' or contains(caption,'#{locator}')]" do within XPath.table(locator).to_s do
yield yield
end end
end end
@ -170,27 +170,5 @@ module Capybara
def scopes def scopes
@scopes ||= [] @scopes ||= []
end end
def sanitized_xpath_string(string)
if string.include?("'")
string = string.split("'", -1).map do |substr|
"'#{substr}'"
end.join(%q{,"'",})
"concat(#{string})"
else
"'#{string}'"
end
end
def sanitized_xpath_string(string)
if string.include?("'")
string = string.split("'", -1).map do |substr|
"'#{substr}'"
end.join(%q{,"'",})
"concat(#{string})"
else
"'#{string}'"
end
end
end end
end end

View file

@ -26,33 +26,45 @@ module Capybara
def fillable_field(locator) def fillable_field(locator)
text_field(locator).password_field(locator).text_area(locator) text_field(locator).password_field(locator).text_area(locator)
end end
def content(locator)
append("//*[contains(.,#{s(locator)})]")
end
def table(locator)
append("//table[@id=#{s(locator)} or contains(caption,#{s(locator)})]")
end
def fieldset(locator)
append("//fieldset[@id=#{s(locator)} or contains(legend,#{s(locator)})]")
end
def text_field(locator) def text_field(locator)
append("//input[@type='text'][@id='#{locator}' or @id=//label[contains(.,'#{locator}')]/@for]") append("//input[@type='text'][@id=#{s(locator)} or @id=//label[contains(.,#{s(locator)})]/@for]")
end end
def password_field(locator) def password_field(locator)
append("//input[@type='password'][@id='#{locator}' or @id=//label[contains(.,'#{locator}')]/@for]") append("//input[@type='password'][@id=#{s(locator)} or @id=//label[contains(.,#{s(locator)})]/@for]")
end end
def text_area(locator) def text_area(locator)
append("//textarea[@id='#{locator}' or @id=//label[contains(.,'#{locator}')]/@for]") append("//textarea[@id=#{s(locator)} or @id=//label[contains(.,#{s(locator)})]/@for]")
end end
def radio_button(locator) def radio_button(locator)
append("//input[@type='radio'][@id='#{locator}' or @id=//label[contains(.,'#{locator}')]/@for]") append("//input[@type='radio'][@id=#{s(locator)} or @id=//label[contains(.,#{s(locator)})]/@for]")
end end
def checkbox(locator) def checkbox(locator)
append("//input[@type='checkbox'][@id='#{locator}' or @id=//label[contains(.,'#{locator}')]/@for]") append("//input[@type='checkbox'][@id=#{s(locator)} or @id=//label[contains(.,#{s(locator)})]/@for]")
end end
def select(locator) def select(locator)
append("//select[@id='#{locator}' or @id=//label[contains(.,'#{locator}')]/@for]") append("//select[@id=#{s(locator)} or @id=//label[contains(.,#{s(locator)})]/@for]")
end end
def file_field(locator) def file_field(locator)
append("//input[@type='file'][@id='#{locator}' or @id=//label[contains(.,'#{locator}')]/@for]") append("//input[@type='file'][@id=#{s(locator)} or @id=//label[contains(.,#{s(locator)})]/@for]")
end end
def to_s def to_s
@ -60,6 +72,18 @@ module Capybara
end end
private private
# Sanitize a String for putting it into an xpath query
def s(string)
if string.include?("'")
string = string.split("'", -1).map do |substr|
"'#{substr}'"
end.join(%q{,"'",})
"concat(#{string})"
else
"'#{string}'"
end
end
def append(path) def append(path)
XPath.new(*[@paths, path].flatten) XPath.new(*[@paths, path].flatten)