Class: WatirDrops::PageObject

Inherits:
Object
  • Object
show all
Defined in:
lib/watir_drops/page_object.rb

Direct Known Subclasses

TrainingWheels

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(browser_input = @@browser) ⇒ PageObject

Returns a new instance of PageObject.



84
85
86
# File 'lib/watir_drops/page_object.rb', line 84

def initialize(browser_input = @@browser)
  @browser = browser_input
end

Class Attribute Details

.element_listObject



16
17
18
# File 'lib/watir_drops/page_object.rb', line 16

def element_list
  @element_list ||= []
end

Instance Attribute Details

#browserObject (readonly)

Returns the value of attribute browser.



82
83
84
# File 'lib/watir_drops/page_object.rb', line 82

def browser
  @browser
end

Class Method Details

.browserObject



76
77
78
# File 'lib/watir_drops/page_object.rb', line 76

def browser
  @@browser
end

.browser=(browser_input) ⇒ Object



72
73
74
# File 'lib/watir_drops/page_object.rb', line 72

def browser=(browser_input)
  @@browser = browser_input
end

.element(name, &block) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/watir_drops/page_object.rb', line 32

def element(name, &block)
  define_method(name) do |*args|
    self.instance_exec(*args, &block)
  end

  define_method("#{name}=") do |val|
    watir_element = self.instance_exec &block
    watir_element.wait_until_present
    case watir_element
    when Watir::Radio
      watir_element.set if val
    when Watir::CheckBox
      val ? watir_element.set : watir_element.clear
    when Watir::Select
      watir_element.select val
    when Watir::Button
      watir_element.click
      # TODO - Email & Password types are not set to UserEditable in Watir
    when Watir::Input
      watir_element.wd.clear
      watir_element.send_keys val
    else
      watir_element.click if val
    end
  end

  element_list << name.to_sym
end

.elements(name, &block) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/watir_drops/page_object.rb', line 24

def elements(name, &block)
  define_method(name) do |*args|
    self.instance_exec(*args, &block)
  end

  element_list << name.to_sym
end

.inherited(subclass) ⇒ Object



20
21
22
# File 'lib/watir_drops/page_object.rb', line 20

def inherited(subclass)
  subclass.element_list = element_list.dup
end

.page_urlObject



10
11
12
13
14
# File 'lib/watir_drops/page_object.rb', line 10

def page_url
  define_method("goto") do |*args|
    browser.goto yield(*args)
  end
end

.useObject



68
69
70
# File 'lib/watir_drops/page_object.rb', line 68

def use
  new.tap { yield if block_given? }
end

.visit(*args) ⇒ Object



61
62
63
64
65
66
# File 'lib/watir_drops/page_object.rb', line 61

def visit(*args)
  new.tap do |page|
    page.goto(*args)
    yield if block_given?
  end
end

Instance Method Details

#fill_form(model) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/watir_drops/page_object.rb', line 88

def fill_form(model)
  intersect = case model
              when OpenStruct
                self.class.element_list & model.to_h.keys
              when Hash
                self.class.element_list & model.keys
              else
                self.class.element_list & model.keys.select { |el| !model.send(el).nil? }
              end
  intersect.each do |val|
    self.send("#{val}=", model[val])
  end
end

#titleObject



102
103
104
# File 'lib/watir_drops/page_object.rb', line 102

def title
  browser.title
end

#urlObject



106
107
108
# File 'lib/watir_drops/page_object.rb', line 106

def url
  browser.url
end