class WatirDrops::PageObject

Attributes

element_list[W]
require_url[R]
required_element_list[W]
browser[R]

Public Class Methods

browser() click to toggle source
# File lib/watir_drops/page_object.rb, line 92
def browser
  @@browser
end
browser=(browser_input) click to toggle source
# File lib/watir_drops/page_object.rb, line 88
def browser=(browser_input)
  @@browser = browser_input
end
element(name, required: false, &block) click to toggle source
# File lib/watir_drops/page_object.rb, line 47
def element(name, required: false, &block)
  define_method(name) do |*args|
    self.instance_exec(*args, &block)
  end

  define_method("#{name}=") do |val|
    watir_element = self.instance_exec &block
    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
    when Watir::TextField, Watir::TextArea
      watir_element.set val if val
    else
      watir_element.click if val
    end
  end
  element_list << name.to_sym
  required_element_list << name.to_sym if required
end
element_list() click to toggle source
# File lib/watir_drops/page_object.rb, line 26
def element_list
  @element_list ||= []
end
elements(name, &block) click to toggle source
# File lib/watir_drops/page_object.rb, line 39
def elements(name, &block)
  define_method(name) do |*args|
    self.instance_exec(*args, &block)
  end

  element_list << name.to_sym
end
inherited(subclass) click to toggle source
# File lib/watir_drops/page_object.rb, line 34
def inherited(subclass)
  subclass.element_list = element_list.dup
  subclass.required_element_list = required_element_list.dup
end
new(browser_input = @@browser) click to toggle source
# File lib/watir_drops/page_object.rb, line 100
def initialize(browser_input = @@browser)
  @browser = browser_input
end
page_title() { |*args| ... } click to toggle source
# File lib/watir_drops/page_object.rb, line 20
def page_title
  define_method("page_title") do |*args|
    yield(*args)
  end
end
page_url(required: false) { |*args| ... } click to toggle source
# File lib/watir_drops/page_object.rb, line 12
def page_url(required: false)
  @require_url = required

  define_method("page_url") do |*args|
    yield(*args)
  end
end
required_element_list() click to toggle source
# File lib/watir_drops/page_object.rb, line 30
def required_element_list
  @required_element_list ||= []
end
visit(*args) click to toggle source
# File lib/watir_drops/page_object.rb, line 73
def visit(*args)
  new.tap do |page|
    page.goto(*args)
    exception = Selenium::WebDriver::Error::WebDriverError
    message = "Expected to be on #{page.class}, but conditions not met"
    if page.page_verifiable?
      begin
        page.wait_until(&:on_page?)
      rescue Watir::Wait::TimeoutError
        raise exception, message
      end
    end
  end
end

Public Instance Methods

fill_form(model) click to toggle source
# File lib/watir_drops/page_object.rb, line 104
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
goto(*args) click to toggle source
# File lib/watir_drops/page_object.rb, line 147
def goto(*args)
  browser.goto page_url(*args)
end
inspect() click to toggle source
# File lib/watir_drops/page_object.rb, line 118
def inspect
  '#<%s url=%s title=%s>' % [self.class, url.inspect, title.inspect]
end
Also aliased as: selector_string
method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/watir_drops/page_object.rb, line 151
def method_missing(method, *args, &block)
  if @browser.respond_to?(method) && method != :page_url
    @browser.send(method, *args, &block)
  else
    super
  end
end
on_page?() click to toggle source
# File lib/watir_drops/page_object.rb, line 125
def on_page?
  exception = Selenium::WebDriver::Error::WebDriverError
  message = "Can not verify page without any requirements set"
  raise exception, message unless page_verifiable?

  if self.class.require_url
    expected = page_url.gsub("#{URI.parse(page_url).scheme}://", '').chomp('/')
    actual = browser.url.gsub("#{URI.parse(browser.url).scheme}://", '').chomp('/')
    return false unless expected == actual
  end

  if self.respond_to?(:page_title) && browser.title != page_title
    return false
  end

  if !self.class.required_element_list.empty? && self.class.required_element_list.any? { |e| !send(e).present? }
    return false
  end

  true
end
page_verifiable?() click to toggle source
# File lib/watir_drops/page_object.rb, line 163
def page_verifiable?
  self.class.require_url || self.respond_to?(:page_title) || self.class.required_element_list.any?
end
respond_to_missing?(method, _include_all = false) click to toggle source
Calls superclass method
# File lib/watir_drops/page_object.rb, line 159
def respond_to_missing?(method, _include_all = false)
  @browser.respond_to?(method) || super
end
selector_string()
Alias for: inspect