Sha256: ab8c56e2174145fa982265630d42b487775d30b30c71fc9e809127386d1d55c3

Contents?: true

Size: 1.5 KB

Versions: 10

Compression:

Stored size: 1.5 KB

Contents

# coding: UTF-8

module PathSelectorFallbacks
  def _selector_for(locator)
    if respond_to?(:selector_for)
      selector_for(locator)
    elsif locator =~ /^"(.+)"$/
      $1
    else
      raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
        "Add a selectors.rb file (compare #{Spreewald.github_url}/blob/master/examples/selectors.rb)"
    end
  end

  def _path_to(page_name)
    if respond_to?(:path_to)
      path_to(page_name)
    else
      begin
        page_name =~ /^the (.*) page$/
        path_components = $1.split(/\s+/)
        self.send(path_components.push('path').join('_').to_sym)
      rescue NoMethodError, ArgumentError
        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
          "Add a paths.rb file (compare #{Spreewald.github_url}/blob/master/examples/paths.rb)"
      end
    end
  end
end
World(PathSelectorFallbacks)

module WithinHelpers
  def with_scope(locator)
    if locator
      selector = _selector_for(locator)
      args, kwargs = deconstruct_selector(selector)
      within(*args, **kwargs) { yield }
    else
      yield
    end
  end

  def deconstruct_selector(selector)
    if selector.is_a?(Array)
      if selector[-1].is_a?(Hash) # selector with keyword arguments, e.g. ['.foo', { text: 'bar', visible: :all }]
        [selector[0...-1], **selector[-1]]
      else # xpath selector, e.g. [:xpath, '//header']
        [selector, {}]
      end
    else # String or Capybara::Node::Element
      [selector, {}]
    end
  end
end
World(WithinHelpers)

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
spreewald-4.6.3 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.6.2 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.6.1 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.6.0 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.5.1 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.5.0 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.4.4 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.4.3 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.4.2 lib/spreewald_support/path_selector_fallbacks.rb
spreewald-4.4.1 lib/spreewald_support/path_selector_fallbacks.rb