class Bucky::TestEquipment::PageObject::BasePageObject
Constants
Public Class Methods
new(service, device, page_name, driver)
click to toggle source
# File lib/bucky/test_equipment/pageobject/base_pageobject.rb, line 28 def initialize(service, device, page_name, driver) @driver = driver generate_parts(service, device, page_name) end
Private Instance Methods
find_elem(method, value)
click to toggle source
@param [String] method Method name for searching WebElement
http://www.rubydoc.info/gems/selenium-webdriver/0.0.28/Selenium/WebDriver/Find
@param [String] Condition of search (xpath/id) @return [Selenium::WebDriver::Element]
# File lib/bucky/test_equipment/pageobject/base_pageobject.rb, line 57 def find_elem(method, value) method_name = method.downcase.to_sym raise StandardError, "Invalid finder. #{method_name}" unless FINDERS.key? method_name # wait until driver find element elements = wait_until_helper(3, 0.1, Selenium::WebDriver::Error::NoSuchElementError) { @driver.find_elements(method_name, value) } raise_if_elements_empty(elements, method_name, value) get_element_or_attribute = lambda do |elems, arg| # return WebElement return elems[arg] if arg.is_a? Integer # return String(Value of WebElement`s attribute) return elems.first.attribute(arg) if [String, Symbol].include? arg.class raise StandardError, "Invalid argument type. Expected type is Integer/String/Symbol.\n\ | Got argument:#{arg}, type:#{arg.class}." end elements.first.instance_eval do define_singleton_method('[]') { |arg| get_element_or_attribute.call(elements, arg) } %w[each map length].each { |m| define_singleton_method(m) { |&block| elements.send(m, &block) } } end elements.first end
generate_parts(service, device, page_name)
click to toggle source
Load parts file and define parts method @param [String] service @param [String] device (pc, sp) @param [String] page_name
# File lib/bucky/test_equipment/pageobject/base_pageobject.rb, line 39 def generate_parts(service, device, page_name) Dir.glob("./services/#{service}/#{device}/parts/#{page_name}.yml").each do |file| parts_data = load_yaml(file) if parts_data.nil? warn("Warning: #{file} is empty") next end # Define part method e.g.) page.parts parts_data.each do |part_name, value| self.class.class_eval { define_method(part_name) { find_elem(value[0], value[1]) } } end end end
raise_if_elements_empty(elements, method, value)
click to toggle source
# File lib/bucky/test_equipment/pageobject/base_pageobject.rb, line 83 def raise_if_elements_empty(elements, method, value) raise Selenium::WebDriver::Error::NoSuchElementError, "#{method} #{value}" if elements.empty? end