.closest () в Капибара - PullRequest
       4

.closest () в Капибара

6 голосов
/ 11 августа 2011

Я бы хотел найти ближайшего родителя элемента HTML в огурце. как и функция .closest () в jQuery.

это мой (псевдо) код:

  aspect = find('.dropdown li:contains('+selector+')')
  dropdown = aspect.closest('.dropdown') #<-- the closest() function does not exist

  if not aspect.hasClass('.selected')
    dropdown.click
    sleep 1
    aspect.click
  end

Может кто-нибудь сказать мне, как сделать это с помощью капибары?

Ура!

Manuel

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Это не универсальное решение, но если все, что вы хотите сделать, это щелкнуть элемент, я бы предложил использовать jQuery напрямую:

page.execute_script('$(...).closest(...).click()')

Кроме этого, у Capybara нет метода .closest, но во многих случаях более творческий подход к селекторам (возможно, с использованием XPath) может помочь.

0 голосов
/ 10 сентября 2018

Попробуйте это.

module CapybaraNodeElementExtension
  def closest(*args)
    parent = first(:xpath, './/..', wait: false)
    until parent.matches_selector?(*args)
      # return nil if not found
      if parent.matches_selector?(:xpath, '/HTML')
        parent = nil
        break
      end
      parent = parent.first(:xpath, './/..', wait: false)
    end

    parent
  end
end

Capybara::Node::Element.send(:include, CapybaraNodeElementExtension)

Этот код не работал с версией 2.18.matches_selector? терпит неудачу.Пожалуйста, попробуйте 3.7.

...