Files
watrbx-game-engine/RobloxMobileTest/Appium/POM/lib/pages/generic_base_page.rb
T
2025-09-18 17:55:52 -04:00

52 lines
1.6 KiB
Ruby

class GenericBasePage
def initialize(browser, visit = false)
@browser = browser
goto if visit
# respond_to? is a Ruby method for detecting whether the class has a particular method on it
expected_element if respond_to? :expected_element
has_expected_title? if respond_to? :has_expected_title?
end
def method_missing(sym, *args, &block)
@browser.send sym, *args, &block
end
def self.page_url(url)
define_method 'goto' do
@browser.goto url
end
end
# This is a class level method
class << self
alias direct_url page_url
end
# Even this is a class method. Just another way to specify. So either class << self or self.method are same
# Class methods are for anything that does not deal with an individual instance of a class
def self.expected_element(type, identifier, timeout = 30)
define_method 'expected_element' do
@browser.send(type.to_s, identifier).wait_until_present timeout
end
end
def self.expected_title(expected_title)
define_method 'has_expected_title?' do
has_expected_title = expected_title.is_a?(Regexp) ? expected_title =~ @browser.title : expected_title == @browser.title
raise "Expected title '#{expected_title}' instead of '#{@browser.title}'" unless has_expected_title
end
end
def self.element(element_name)
define_method element_name.to_s do
# yield self enters block, associated with method call, passing current object as argument to the block
yield self
end
end
class << self
alias value element
alias action element
end
end