Подтвердить что ты не робот

Как совместить поиск и использование с помощью Capybara?

Следующее работает как ожидалось:

 within('h2', text: 'foo') do
      should have_content 'bar'
 end

Я пытаюсь проверить внутри родительского элемента, используя find(:xpath, '..')

Как только вы найдете элемент, как применить .find(:xpath, '..'), а затем проверить что-то в элементе , который?

4b9b3361

Ответ 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