Sha256: 80ebe2610587f492b6f974b603de85b96701d1384f8ca65b40f35115065cabe4

Contents?: true

Size: 1.88 KB

Versions: 19

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

Capybara.add_selector(:button, locator_type: [String, Symbol]) do
  xpath(:value, :title, :type, :name) do |locator, **options|
    input_btn_xpath = XPath.descendant(:input)[XPath.attr(:type).one_of('submit', 'reset', 'image', 'button')]
    btn_xpath = XPath.descendant(:button)
    image_btn_xpath = XPath.descendant(:input)[XPath.attr(:type) == 'image']

    unless locator.nil?
      locator = locator.to_s
      locator_matchers = XPath.attr(:id).equals(locator) |
                         XPath.attr(:name).equals(locator) |
                         XPath.attr(:value).is(locator) |
                         XPath.attr(:title).is(locator)
      locator_matchers |= XPath.attr(:'aria-label').is(locator) if enable_aria_label
      locator_matchers |= XPath.attr(test_id) == locator if test_id

      input_btn_xpath = input_btn_xpath[locator_matchers]

      btn_xpath = btn_xpath[locator_matchers |
                            XPath.string.n.is(locator) |
                            XPath.descendant(:img)[XPath.attr(:alt).is(locator)]]

      alt_matches = XPath.attr(:alt).is(locator)
      alt_matches |= XPath.attr(:'aria-label').is(locator) if enable_aria_label
      image_btn_xpath = image_btn_xpath[alt_matches]
    end

    %i[value title type name].inject(input_btn_xpath.union(btn_xpath).union(image_btn_xpath)) do |memo, ef|
      memo[find_by_attr(ef, options[ef])]
    end
  end

  node_filter(:disabled, :boolean, default: false, skip_if: :all) { |node, value| !(value ^ node.disabled?) }
  expression_filter(:disabled) { |xpath, val| val ? xpath : xpath[~XPath.attr(:disabled)] }

  describe_expression_filters do |disabled: nil, **options|
    desc = +''
    desc << ' that is not disabled' if disabled == false
    desc << describe_all_expression_filters(options)
  end

  describe_node_filters do |disabled: nil, **|
    ' that is disabled' if disabled == true
  end
end

Version data entries

19 entries across 19 versions & 3 rubygems

Version Path
tdiary-5.1.2 vendor/bundle/ruby/2.6.0/gems/capybara-3.29.0/lib/capybara/selector/definition/button.rb
tdiary-5.1.1 vendor/bundle/ruby/2.6.0/gems/capybara-3.29.0/lib/capybara/selector/definition/button.rb
tdiary-5.1.0 vendor/bundle/gems/capybara-3.29.0/lib/capybara/selector/definition/button.rb
chatops-rpc-0.0.2 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/capybara-3.29.0/lib/capybara/selector/definition/button.rb
chatops-rpc-0.0.1 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/capybara-3.29.0/lib/capybara/selector/definition/button.rb
capybara-3.29.0 lib/capybara/selector/definition/button.rb
capybara-3.28.0 lib/capybara/selector/definition/button.rb
capybara-3.27.0 lib/capybara/selector/definition/button.rb
capybara-3.26.0 lib/capybara/selector/definition/button.rb
capybara-3.25.0 lib/capybara/selector/definition/button.rb
capybara-3.24.0 lib/capybara/selector/definition/button.rb
capybara-3.23.0 lib/capybara/selector/definition/button.rb
capybara-3.22.0 lib/capybara/selector/definition/button.rb
capybara-3.21.0 lib/capybara/selector/definition/button.rb
capybara-3.20.2 lib/capybara/selector/definition/button.rb
capybara-3.20.1 lib/capybara/selector/definition/button.rb
capybara-3.20.0 lib/capybara/selector/definition/button.rb
capybara-3.19.1 lib/capybara/selector/definition/button.rb
capybara-3.19.0 lib/capybara/selector/definition/button.rb