Class: PageMagic::Element

Inherits:
Object
  • Object
show all
Extended by:
Forwardable, SelectorMethods, Elements
Includes:
Locators, SelectorMethods, SessionMethods, WaitMethods, Watchers
Defined in:
lib/page_magic/element.rb,
lib/page_magic/element/query.rb,
lib/page_magic/element/locators.rb,
lib/page_magic/element/selector.rb,
lib/page_magic/element/selector_methods.rb

Overview

for the benefit of pull review :@

Defined Under Namespace

Modules: Locators, SelectorMethods Classes: Query, Selector

Constant Summary collapse

EVENT_TYPES =
[:set, :select, :select_option, :unselect_option, :click]
DEFAULT_HOOK =
proc {}.freeze

Constants included from Elements

PageMagic::Elements::INVALID_METHOD_NAME_MSG, PageMagic::Elements::TYPES

Constants included from Watchers

Watchers::ELEMENT_MISSING_MSG

Constants included from Locators

Locators::ELEMENT_NOT_DEFINED_MSG

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SelectorMethods

selector

Methods included from Elements

element, element_definitions

Methods included from Watchers

#changed?, #watch, #watcher, #watchers

Methods included from SessionMethods

#execute_script, #page, #path, #url

Methods included from WaitMethods

#wait_until

Methods included from Locators

#element_by_name, #element_definitions

Constructor Details

#initialize(browser_element) ⇒ Element

Returns a new instance of Element.



62
63
64
65
66
67
68
69
# File 'lib/page_magic/element.rb', line 62

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



77
78
79
80
81
82
# File 'lib/page_magic/element.rb', line 77

def method_missing(method, *args, &block)
  ElementContext.new(self).send(method, *args, &block)
rescue ElementMissingException
  return super unless browser_element.respond_to?(method)
  browser_element.send(method, *args, &block)
end

Instance Attribute Details

#after_eventsObject (readonly)

Returns the value of attribute after_events.



15
16
17
# File 'lib/page_magic/element.rb', line 15

def after_events
  @after_events
end

#before_eventsObject (readonly)

Returns the value of attribute before_events.



15
16
17
# File 'lib/page_magic/element.rb', line 15

def before_events
  @before_events
end

#browser_elementObject (readonly)

Returns the value of attribute browser_element.



15
16
17
# File 'lib/page_magic/element.rb', line 15

def browser_element
  @browser_element
end

#nameObject (readonly)

Returns the value of attribute name.



15
16
17
# File 'lib/page_magic/element.rb', line 15

def name
  @name
end

#parent_elementObject (readonly)

Returns the value of attribute parent_element.



15
16
17
# File 'lib/page_magic/element.rb', line 15

def parent_element
  @parent_element
end

#typeObject (readonly)

Returns the value of attribute type.



15
16
17
# File 'lib/page_magic/element.rb', line 15

def type
  @type
end

Class Method Details

.==(other) ⇒ Object



57
58
59
# File 'lib/page_magic/element.rb', line 57

def ==(other)
  other <= PageMagic::Element && element_definitions == other.element_definitions
end

.after_eventsArray

If a block is passed in, it adds it to be run after an event is triggered on an element. See EVENT_TYPES for the

Returns:

  • (Array)

    all registered blocks



# File 'lib/page_magic/element.rb', line 18

.before_eventsObject

If a block is passed in, it adds it to be run before an event is triggered on an element.

See Also:



26
27
28
29
30
31
32
33
# File 'lib/page_magic/element.rb', line 26

%i(after_events before_events).each do |method|
  define_method method do |&block|
    instance_variable_name = "@#{method}".to_sym
    instance_variable_value = instance_variable_get(instance_variable_name) || [DEFAULT_HOOK]
    instance_variable_value << block if block
    instance_variable_set(instance_variable_name, instance_variable_value)
  end
end

.inherited(clazz) ⇒ Object

called when class inherits this one

Parameters:

  • clazz (Class)

    inheriting class



45
46
47
48
49
# File 'lib/page_magic/element.rb', line 45

def inherited(clazz)
  super
  clazz.before_events.replace(before_events)
  clazz.after_events.replace(after_events)
end

.parent_element(page_element = nil) ⇒ Element

Get/Sets the parent element desribed by this class

Parameters:

  • page_element (Element) (defaults to: nil)

    parent page element

Returns:



38
39
40
41
# File 'lib/page_magic/element.rb', line 38

def parent_element(page_element = nil)
  return @parent_page_element unless page_element
  @parent_page_element = page_element
end

.watch(name, method = nil, &block) ⇒ Object

Defines watchers to be used by instances

See Also:



53
54
55
# File 'lib/page_magic/element.rb', line 53

def watch(name, method = nil, &block)
  before_events { watch(name, method, &block) }
end

Instance Method Details

#respond_to?(*args) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/page_magic/element.rb', line 84

def respond_to?(*args)
  super || element_context.respond_to?(*args) || browser_element.respond_to?(*args)
end

#sessionSession

get the current session

Returns:

  • (Session)

    returns the session of the parent page element. Capybara session



92
# File 'lib/page_magic/element.rb', line 92

def_delegator :parent_element, :session