Adding FormLocator. Removing some dead methods
This commit is contained in:
parent
0eee6d75e4
commit
c05c0f6c73
@ -131,7 +131,7 @@ module Webrat
|
|||||||
def label_elements
|
def label_elements
|
||||||
return @label_elements unless @label_elements.nil?
|
return @label_elements unless @label_elements.nil?
|
||||||
@label_elements = []
|
@label_elements = []
|
||||||
|
|
||||||
parent = @element.parent
|
parent = @element.parent
|
||||||
while parent.respond_to?(:parent)
|
while parent.respond_to?(:parent)
|
||||||
if parent.name == 'label'
|
if parent.name == 'label'
|
||||||
@ -140,11 +140,11 @@ module Webrat
|
|||||||
end
|
end
|
||||||
parent = parent.parent
|
parent = parent.parent
|
||||||
end
|
end
|
||||||
|
|
||||||
unless id.blank?
|
unless id.blank?
|
||||||
@label_elements += Webrat::XML.css_search(form.element, "label[@for='#{id}']")
|
@label_elements += Webrat::XML.css_search(form.element, "label[@for='#{id}']")
|
||||||
end
|
end
|
||||||
|
|
||||||
@label_elements
|
@label_elements
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -32,10 +32,6 @@ module Webrat
|
|||||||
possible_fields.detect { |possible_field| possible_field.matches_name?(name) }
|
possible_fields.detect { |possible_field| possible_field.matches_name?(name) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def matches_id?(id)
|
|
||||||
Webrat::XML.attribute(@element, "id") == id.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def fields_by_type(field_types)
|
def fields_by_type(field_types)
|
||||||
|
@ -26,25 +26,8 @@ module Webrat
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def matches_text?(link_text)
|
|
||||||
if link_text.is_a?(Regexp)
|
|
||||||
matcher = link_text
|
|
||||||
else
|
|
||||||
matcher = /#{Regexp.escape(link_text.to_s)}/i
|
|
||||||
end
|
|
||||||
|
|
||||||
replace_nbsp(text) =~ matcher || replace_nbsp_ref(inner_html) =~ matcher || title =~ matcher
|
|
||||||
end
|
|
||||||
|
|
||||||
def inner_html
|
|
||||||
Webrat::XML.inner_html(@element)
|
|
||||||
end
|
|
||||||
|
|
||||||
def text
|
|
||||||
Webrat::XML.all_inner_text(@element)
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def id
|
def id
|
||||||
Webrat::XML.attribute(@element, "id")
|
Webrat::XML.attribute(@element, "id")
|
||||||
end
|
end
|
||||||
@ -106,14 +89,6 @@ module Webrat
|
|||||||
raise Webrat::WebratError.new("No HTTP method for _method param in #{onclick.inspect}")
|
raise Webrat::WebratError.new("No HTTP method for _method param in #{onclick.inspect}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
def replace_nbsp(str)
|
|
||||||
str.gsub([0xA0].pack('U'), ' ')
|
|
||||||
end
|
|
||||||
|
|
||||||
def replace_nbsp_ref(str)
|
|
||||||
str.gsub(' ',' ').gsub(' ', ' ')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -7,6 +7,7 @@ require "webrat/core/locators/field_by_id_locator"
|
|||||||
require "webrat/core/locators/select_option_locator"
|
require "webrat/core/locators/select_option_locator"
|
||||||
require "webrat/core/locators/link_locator"
|
require "webrat/core/locators/link_locator"
|
||||||
require "webrat/core/locators/field_locator"
|
require "webrat/core/locators/field_locator"
|
||||||
|
require "webrat/core/locators/form_locator"
|
||||||
|
|
||||||
module Webrat
|
module Webrat
|
||||||
module Locators
|
module Locators
|
||||||
|
19
lib/webrat/core/locators/form_locator.rb
Normal file
19
lib/webrat/core/locators/form_locator.rb
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
require "webrat/core/locators/locator"
|
||||||
|
|
||||||
|
module Webrat
|
||||||
|
module Locators
|
||||||
|
|
||||||
|
class FormLocator < Locator
|
||||||
|
|
||||||
|
def locate
|
||||||
|
Form.load(@scope.session, form_element)
|
||||||
|
end
|
||||||
|
|
||||||
|
def form_element
|
||||||
|
Webrat::XML.css_at(@scope.dom, "#" + @value)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
@ -261,8 +261,7 @@ module Webrat
|
|||||||
webrat_deprecate :clicks_button, :click_button
|
webrat_deprecate :clicks_button, :click_button
|
||||||
|
|
||||||
def submit_form(id)
|
def submit_form(id)
|
||||||
form = forms.detect { |f| f.matches_id?(id) }
|
FormLocator.new(self, id).locate.submit
|
||||||
form.submit
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def dom # :nodoc:
|
def dom # :nodoc:
|
||||||
|
@ -71,6 +71,10 @@ module Webrat #:nodoc:
|
|||||||
xpath_search(*args).first
|
xpath_search(*args).first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.css_at(*args)
|
||||||
|
css_search(*args).first
|
||||||
|
end
|
||||||
|
|
||||||
def self.xpath_search(element, *searches)
|
def self.xpath_search(element, *searches)
|
||||||
searches.flatten.map do |search|
|
searches.flatten.map do |search|
|
||||||
if Webrat.configuration.parse_with_nokogiri?
|
if Webrat.configuration.parse_with_nokogiri?
|
||||||
|
@ -398,4 +398,71 @@ describe "click_link" do
|
|||||||
webrat_session.should_receive(:get).with("/page?foo=bar", {})
|
webrat_session.should_receive(:get).with("/page?foo=bar", {})
|
||||||
click_link "Jump to foo bar"
|
click_link "Jump to foo bar"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should matches_text? on regexp" do
|
||||||
|
pending "need to update these"
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
||||||
|
link.matches_text?(/link/i).should == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should matches_text? on link_text" do
|
||||||
|
pending "need to update these"
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
||||||
|
link.matches_text?("Link Text").should == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should matches_text? on substring" do
|
||||||
|
pending "need to update these"
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
||||||
|
link.matches_text?("nk Te").should_not be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not matches_text? on link_text case insensitive" do
|
||||||
|
pending "need to update these"
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
||||||
|
link.should_receive(:inner_html).and_return('Link Text')
|
||||||
|
link.should_receive(:title).and_return(nil)
|
||||||
|
link.matches_text?("link_text").should == false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should match text not include " do
|
||||||
|
pending "need to update these"
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
link.should_receive(:text).and_return('LinkText')
|
||||||
|
link.matches_text?("LinkText").should == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not matches_text? on wrong text" do
|
||||||
|
pending "need to update these"
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
nbsp = [0xA0].pack("U")
|
||||||
|
link.should_receive(:text).and_return("Some"+nbsp+"Other"+nbsp+"Link")
|
||||||
|
link.should_receive(:inner_html).and_return("Some Other Link")
|
||||||
|
link.should_receive(:title).and_return(nil)
|
||||||
|
link.matches_text?("Link Text").should == false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should match text including character reference" do
|
||||||
|
pending "need to update these"
|
||||||
|
no_ko_gi_ri = [0x30CE,0x30B3,0x30AE,0x30EA]
|
||||||
|
nokogiri_ja_kana = no_ko_gi_ri.pack("U*")
|
||||||
|
nokogiri_char_ref = no_ko_gi_ri.map{|c| "&#x%X;" % c }.join("")
|
||||||
|
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
link.should_receive(:text).and_return(nokogiri_ja_kana)
|
||||||
|
link.matches_text?(nokogiri_ja_kana).should == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should match img link" do
|
||||||
|
pending "need to update these"
|
||||||
|
link = Webrat::Link.new(webrat_session, nil)
|
||||||
|
link.should_receive(:text).and_return('')
|
||||||
|
link.should_receive(:inner_html).and_return('<img src="logo.png" />')
|
||||||
|
link.matches_text?('logo.png').should == 10
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -21,62 +21,4 @@ describe Webrat::Link do
|
|||||||
link.click
|
link.click
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should matches_text? on regexp" do
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
|
||||||
link.matches_text?(/link/i).should == 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should matches_text? on link_text" do
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
|
||||||
link.matches_text?("Link Text").should == 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should matches_text? on substring" do
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
|
||||||
link.matches_text?("nk Te").should_not be_nil
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should not matches_text? on link_text case insensitive" do
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
link.should_receive(:text).and_return(@link_text_with_nbsp)
|
|
||||||
link.should_receive(:inner_html).and_return('Link Text')
|
|
||||||
link.should_receive(:title).and_return(nil)
|
|
||||||
link.matches_text?("link_text").should == false
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should match text not include " do
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
link.should_receive(:text).and_return('LinkText')
|
|
||||||
link.matches_text?("LinkText").should == 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should not matches_text? on wrong text" do
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
nbsp = [0xA0].pack("U")
|
|
||||||
link.should_receive(:text).and_return("Some"+nbsp+"Other"+nbsp+"Link")
|
|
||||||
link.should_receive(:inner_html).and_return("Some Other Link")
|
|
||||||
link.should_receive(:title).and_return(nil)
|
|
||||||
link.matches_text?("Link Text").should == false
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should match text including character reference" do
|
|
||||||
no_ko_gi_ri = [0x30CE,0x30B3,0x30AE,0x30EA]
|
|
||||||
nokogiri_ja_kana = no_ko_gi_ri.pack("U*")
|
|
||||||
nokogiri_char_ref = no_ko_gi_ri.map{|c| "&#x%X;" % c }.join("")
|
|
||||||
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
link.should_receive(:text).and_return(nokogiri_ja_kana)
|
|
||||||
link.matches_text?(nokogiri_ja_kana).should == 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should match img link" do
|
|
||||||
link = Webrat::Link.new(webrat_session, nil)
|
|
||||||
link.should_receive(:text).and_return('')
|
|
||||||
link.should_receive(:inner_html).and_return('<img src="logo.png" />')
|
|
||||||
link.matches_text?('logo.png').should == 10
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user