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