Sha256: e5b0abc5dfdb5a4cff9fa59d8b9ed2863b6131f770e7c7d4ff69f875770a5202

Contents?: true

Size: 1.74 KB

Versions: 2

Compression:

Stored size: 1.74 KB

Contents

require 'yaml'

class Xpaths
  attr_reader :driver

  def initialize(driver)
    @driver = driver
  end

  def element(*path_elements)
    element_xpath = self.for(*path_elements)

    driver.find_element(:xpath, element_xpath)
  end

  def child_element(element, *path_elements)
    element.find_element(:xpath, self.for(*path_elements))
  end

  def element_exists?(*path_elements)
    element(*path_elements)
    true
  rescue Selenium::WebDriver::Error::NoSuchElementError
    false
  end

  def element_has_child?(element, *path_elements)
    child_element(element, *path_elements)
    true
  rescue Selenium::WebDriver::Error::NoSuchElementError
    false
  end

  def elements(*path_elements)
    element_xpath = self.for(*path_elements)

    driver.find_elements(:xpath, element_xpath)
  end

  def element_containing_text(text)
    results = elements_containing_text(text)

    raise "Too many elements found containing text '#{text}'" if results.count > 1
    raise "No elements found containing text '#{text}'" if results.count.zero?

    results[0]
  end

  def elements_containing_text(text)
    driver.find_elements(:xpath, "//*[text() = '#{text}']")
  end

  def wait_for_element(*path_elements)
    found_element = nil

    Selenium::WebDriver::Wait.new.until do
      found_element = element(*path_elements)
      true
    rescue Selenium::WebDriver::Error::TimeoutError
      false
    end

    found_element
  end

  def for(*path_elements)
    result = XPATHS.dig(*path_elements)

    raise 'Could not find xpath' if result.empty?

    result
  end

  private_class_method def self.xpaths_from_file
    xpaths_file = File.join(File.dirname(__FILE__), '../xpaths.yaml')
    YAML.load_file(xpaths_file, symbolize_names: true)
  end

  XPATHS = xpaths_from_file
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fuck_facebook-0.1.1 src/xpaths.rb
fuck_facebook-0.1.0 src/xpaths.rb