How to get parent node in Capybara?

By : sandrew
Source: Stackoverflow.com
Question!

I'm working with many jQuery plugins, that often create DOM elements without id or other identification properties, and the only way to get them in Capybara (for clicking for example) - is to get their neighbor (another child of its ancestor) first. But I didn't find anywhere, does Capybara support such things for example:

find('#some_button').parent.fill_in "Name:", :with => name

?

By : sandrew


Answers


I'm using a different approach by finding the parent element first using the text within this parent element:

find("<parent element>", text: "text within your #some_button").fill_in "Name:", with: name

Maybe this is useful in a similiar situation.



I needed to find an ancestor with a css class, though it was indeterminate if it the target ancestor had one or more css classes present, so I didn't see a way to make a deterministic xpath query. I worked this up instead:

def find_ancestor_with_class(field, cssClass)
  ancestor = field
  loop do
    ancestor = ancestor.find(:xpath, '..')
    break if ancestor.nil?

    break if ancestor.has_css? cssClass
  end

  ancestor
end

Warning: use this sparingly, it could cost you a lot of time in tests so make sure the ancestor is just a few hops away.

By : kross


This video can help you solving your question :)
By: admin