class PageMagic::Element
class Element
- represents an element in a html page.
for the benefit of pull review :@
Capybara::Finder
Constants
- DEFAULT_HOOK
- EVENT_NOT_SUPPORTED_MSG
- EVENT_TYPES
Attributes
after_events[R]
before_events[R]
browser_element[R]
name[R]
parent_element[R]
type[R]
Public Class Methods
==(other)
click to toggle source
# File lib/page_magic/element.rb, line 74 def ==(other) other <= PageMagic::Element && element_definitions == other.element_definitions end
inherited(clazz)
click to toggle source
called when class inherits this one @param [Class] clazz inheriting class
Calls superclass method
# File lib/page_magic/element.rb, line 56 def inherited(clazz) super clazz.before_events.replace(before_events) clazz.after_events.replace(after_events) end
load(source)
click to toggle source
# File lib/page_magic/element.rb, line 62 def load(source) new(Capybara::Node::Simple.new(source)) end
new(browser_element)
click to toggle source
# File lib/page_magic/element.rb, line 79 def initialize(browser_element) @browser_element = browser_element @parent_element = self.class.parent_element @before_events = self.class.before_events @after_events = self.class.after_events @element_definitions = self.class.element_definitions.dup wrap_events(browser_element) end
parent_element(page_element = nil)
click to toggle source
Get/Sets the parent element desribed by this class @param [Element] page_element parent page element @return [Element]
# File lib/page_magic/element.rb, line 48 def parent_element(page_element = nil) return @parent_page_element unless page_element @parent_page_element = page_element end
watch(name, method = nil, &block)
click to toggle source
Defines watchers to be used by instances @see Watchers#watch
# File lib/page_magic/element.rb, line 68 def watch(name, method = nil, &block) before_events do watch(name, method: method, &block) end end
Public Instance Methods
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/page_magic/element.rb, line 103 def method_missing(method, *args, &block) ElementContext.new(self).send(method, *args, &block) rescue ElementMissingException begin return browser_element.send(method, *args, &block) if browser_element.respond_to?(method) parent_element.send(method, *args, &block) rescue NoMethodError super end end
respond_to_missing?(*args)
click to toggle source
Calls superclass method
# File lib/page_magic/element.rb, line 115 def respond_to_missing?(*args) super || contains_element?(args.first) || browser_element.respond_to?(*args) || parent_element.respond_to?(*args) end
Private Instance Methods
apply_hooks(raw_element:, capybara_method:, before_events:, after_events:)
click to toggle source
# File lib/page_magic/element.rb, line 131 def apply_hooks(raw_element:, capybara_method:, before_events:, after_events:) original_method = raw_element.method(capybara_method) this = self raw_element.define_singleton_method(capybara_method) do |*arguments, &block| before_events.each { |event| this.instance_exec(&event) } original_method.call(*arguments, &block) after_events.each { |event| this.instance_exec(&event) } end end
contains_element?(name)
click to toggle source
# File lib/page_magic/element.rb, line 142 def contains_element?(name) element_definitions.keys.include?(name) end
element_context()
click to toggle source
# File lib/page_magic/element.rb, line 146 def element_context ElementContext.new(self) end
wrap_events(raw_element)
click to toggle source
# File lib/page_magic/element.rb, line 150 def wrap_events(raw_element) EVENT_TYPES.each do |action_method| next unless raw_element.respond_to?(action_method) apply_hooks(raw_element: raw_element, capybara_method: action_method, before_events: before_events, after_events: after_events) end end