Как совместить поиск и использование с помощью Capybara?
Следующее работает как ожидалось:
within('h2', text: 'foo') do
should have_content 'bar'
end
Я пытаюсь проверить внутри родительского элемента, используя find(:xpath, '..')
Как только вы найдете элемент, как применить .find(:xpath, '..')
, а затем проверить что-то в элементе , который?
Ответы
Ответ 1
Когда вы используете локатор XPath внутри within
, он должен начинаться с .
(если он не начинается с .
, поиск выполняется не внутри .myclass
, а внутри всего документа).
например:.
within('.myclass') do
find(:xpath, './div')
end
или
find('.myclass').find(:xpath, './div')
Код из @BS. Ответ может быть написан в одной строке:
expect(find("//h2[text()='foo']/..")).to have_text('bar')
или
expect(page).to have_xpath("//h2[.='foo']/..", text: 'bar')
Ответ 2
Ниже приведен один подход:
within('h2', text: 'foo') do
within(:xpath, '..') do
should have_content 'bar'
end
end
Ответ 3
С новым синтаксисом Rspec после 2.11 он должен быть:
within('h2', text: 'foo') do |h|
expect(h).to have_content 'bar'
end