Capybara, находящийся внутри элемента css

Я работаю с Ruby on Rails 3, Cucumber и Capybara

Я искал довольно много времени, и я не могу понять, как найти определенный элемент страницы в теге css. В моем случае мне нужно убедиться, что имя найдено внутри таблицы, а не в "Приветствие [Имя]".

Я пробовал что-то вроде:

within('table') do
  page.body.index("[Name]")
end

И у меня есть таблица с id='table'.

Но я хотел бы знать, как это сделать для любого элемента css, например:

within('h2') do
  page.body.should have_content ('stuff')
end

Я думаю, что моя проблема связана с page.body, но я не уверен, как скрыть ее к определенному тегу css.

Спасибо заранее!

Ответ 1

Матч Capybara within соответствует только первому результату, поэтому, если у вас несколько тегов h2, он будет выглядеть только в первом.

Вместо этого попробуйте have_css с опцией :text.

page.should have_css("#table", :text => "[Name]")
page.should have_css('h2', :text => 'stuff')

Ответ 2

Чтобы найти конкретный элемент:

page.find('#table').should have_text('stuff')

Ответ 3

Я думаю, что все ответы должны работать, но теперь Capybara не использует больше, он использует ожидание

expect(page).to have_css("#table", :text => "[Name]")
expect(page).to have_css('h2', :text => 'stuff')

Ответ 4

Я сделал такие вещи: page.all(:css, 'button.btn-primary.days.active').size.should == 1

Проверить, есть ли какие-либо элементы, содержащие определенный набор классов. Однако мне не нужно было искать определенное текстовое значение элемента. Я просто хотел обеспечить существование элемента и сколько их было.