module GemsOverriding
Public Instance Methods
click()
click to toggle source
# File lib/page/gems_overriding.rb, line 9 def click bridge.execute_script('arguments[0].click();', self) end
extract_args(args)
click to toggle source
need for find_element
reconstruction
# File lib/page/gems_overriding.rb, line 34 def extract_args(args) case args.size when 3 args when 2 # base timeout for find_element args.push(10) args when 1 arg = args.first unless arg.respond_to?(:shift) raise ArgumentError, "expected #{arg.inspect}:#{arg.class} to respond to #shift" end # this will be a single-entry hash, so use #shift over #first or #[] arr = arg.dup.shift unless arr.size == 2 raise ArgumentError, "expected #{arr.inspect} to have 2 elements" end arr.push(10) arr else raise ArgumentError, "wrong number of arguments (#{args.size} for 2)" end end
find_element(*args)
click to toggle source
element search with 10 seconds default
# File lib/page/gems_overriding.rb, line 61 def find_element(*args) sleep 0.4 how, what, timeout = extract_args(args) by = Selenium::WebDriver::SearchContext::FINDERS[how.to_sym] wait = Object::Selenium::WebDriver::Wait.new(timeout: timeout, message: 'element not found') wait.until do begin bridge.find_element_by(by, what.to_s, ref) rescue false end end rescue Selenium::WebDriver::Error::TimeOutError puts "element not found #{how} #{what}" if timeout > 3 nil end
find_elements(*args)
click to toggle source
# File lib/page/gems_overriding.rb, line 79 def find_elements(*args) sleep 0.4 how, what, timeout = extract_args(args) by = Selenium::WebDriver::SearchContext::FINDERS[how.to_sym] wait = Object::Selenium::WebDriver::Wait.new(timeout: timeout, message: 'element not found') wait.until do begin bridge.find_elements_by(by, what.to_s, ref) rescue false end end rescue Selenium::WebDriver::Error::TimeOutError puts "elements not found #{how} #{what}" nil end
select_list_value_set(identifier, value)
click to toggle source
# File lib/page/gems_overriding.rb, line 22 def select_list_value_set(identifier, value) process_selenium_call(identifier, PageObject::Elements::SelectList, 'select') do |how, what| select_list = @browser.find_element(how, what) select_list.find_elements(tag_name: 'option').find do |option| option.text == value end.old_click end end
send_keys(*args)
click to toggle source
# File lib/page/gems_overriding.rb, line 13 def send_keys(*args) bridge.send_keys_to_element id, Selenium::WebDriver::Keys.encode(args) # rescue if cant focus rescue Selenium::WebDriver::Error::UnknownError bridge.execute_script('arguments[0].value = arguments[1];', self, Selenium::WebDriver::Keys.encode(args)) end
standard_methods(name, identifier, method, &block)
click to toggle source
# File lib/page/gems_overriding.rb, line 100 def standard_methods(name, identifier, method, &block) define_method("#{name}_element") do return call_block(&block) if block_given? platform.send(method, identifier.clone) end define_method("#{name}?") do return call_block(&block).exists? if block_given? how, what = PageObject::Elements::Element.selenium_identifier_for(identifier.clone) element = browser.find_element(how, what, 3) element.try(:displayed?) ? true : false end end