Sha256: 0257e7641e997a11c9539b17412d27d13add575610ad1002d62f6ad092667b71
Contents?: true
Size: 1.67 KB
Versions: 2
Compression:
Stored size: 1.67 KB
Contents
require 'napybara' module Napybara class Element attr_reader :capybara_element alias_method :get, :capybara_element def initialize(capybara_element, &block) @capybara_element = capybara_element block.call(self) if block_given? end def finder(child_element_name, child_element_selector, record_selector = nil, &block) self.define_singleton_method(child_element_name) do |record = nil| selector = Selector.new(child_element_selector, record_selector, record) self.class.new(self.get.find(selector.to_s), &block) end self.define_singleton_method("has_#{child_element_name}?") do |record = nil| selector = Selector.new(child_element_selector, record_selector, record) self.get.has_css?(selector.to_s) end self.define_singleton_method("has_no_#{child_element_name}?") do |record = nil| selector = Selector.new(child_element_selector, record_selector, record) self.get.has_no_css?(selector.to_s) end self.define_singleton_method(child_element_name.to_s.pluralize) do self.get.all(child_element_selector).map do |child_element| self.class.new(child_element, &block) end end end class Selector < Struct.new(:child_element_selector, :record_selector, :record) METHOD_NAME_REGEX = /\{(\w+)\}/ def method_name record_selector.match(METHOD_NAME_REGEX)[1] end def record_id record && record.public_send(method_name) end def to_s if record record_selector.gsub(METHOD_NAME_REGEX, record_id.to_s) else child_element_selector end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
napybara-0.4.1 | lib/napybara/element.rb |
napybara-0.4.0 | lib/napybara/element.rb |