Sha256: 0ee679d3539548a30a760e1f6612f65bdf517eb15c4f5715b6b73df56d7e4b95
Contents?: true
Size: 1.96 KB
Versions: 6
Compression:
Stored size: 1.96 KB
Contents
require "webrat/core/locators/locator" module Webrat module Locators class LinkLocator < Locator # :nodoc: def locate Link.load(@session, link_element) end def link_element matching_links.min { |a, b| Webrat::XML.all_inner_text(a).length <=> Webrat::XML.all_inner_text(b).length } end def matching_links @matching_links ||= link_elements.select do |link_element| matches_text?(link_element) || matches_id?(link_element) || matches_class?(link_element) end end def matches_text?(link) if @value.is_a?(Regexp) matcher = @value else matcher = /#{Regexp.escape(@value.to_s)}/i end replace_nbsp(Webrat::XML.all_inner_text(link)) =~ matcher || replace_nbsp_ref(Webrat::XML.inner_html(link)) =~ matcher || Webrat::XML.attribute(link, "title")=~ matcher end def matches_id?(link) if @value.is_a?(Regexp) (Webrat::XML.attribute(link, "id") =~ @value) ? true : false else (Webrat::XML.attribute(link, "id") == @value) ? true : false end end def matches_class?(link) if @value.is_a?(Regexp) (Webrat::XML.attribute(link, "class") =~ @value) ? true : false else Webrat::XML.attribute(link, "class").split(%r{\s}).include?(@value) unless Webrat::XML.attribute(link, "class").nil? end end def link_elements Webrat::XML.xpath_search(@dom, *Link.xpath_search) end def replace_nbsp(str) str.gsub([0xA0].pack('U'), ' ') end def replace_nbsp_ref(str) str.gsub(' ',' ').gsub(' ', ' ') end def error_message "Could not find link with text, title, id or class #{@value.inspect}" end end def find_link(text_or_title_or_id) #:nodoc: LinkLocator.new(@session, dom, text_or_title_or_id).locate! end end end
Version data entries
6 entries across 6 versions & 3 rubygems