Как выбрать из нескольких селекторов CSS с помощью Capybara

Использование RSpec и Capybara для проверки существования элемента в div с классом 'foo'.

<div class="foo">
  <p>Text zzz</p>
  Looking for element here
</div>
<div class="foo">
  <p>Text aaa</p>
  Element should not exist within this div.
</div>

На странице много элементов div с классом 'foo', и я могу присвоить им разные идентификаторы на основе идентификатора foo в базе данных.

Но я не знаю идентификатор foo из теста. И я не хочу проверять родителя div, потому что элемент должен присутствовать в одном div и отсутствовать в другом.

Каков наилучший способ проверки элемента в этом случае?


person B Seven    schedule 16.08.2012    source источник
comment
Судя по тому, как вы сформулировали вопрос, невозможно определить, в каком элементе должно быть содержимое. Вы говорите, что у вас нет идентификатора foo в тестовой среде, но что у вас есть?   -  person Sam Peacey    schedule 16.08.2012


Ответы (2)


Если я правильно понимаю вопрос (и я не уверен на 100%, что понимаю), я думаю, что это должно сработать:

el1 = find(:xpath, '//div[@class="foo"][./p[contains(.,"Text zzz")]]')
el2 = find(:xpath, '//div[@class="foo"][./p[contains(.,"Text aaa")]]')

Вероятно, есть более простой способ сделать это с помощью css вместо xpath, но я обнаружил, что это работает для такого типа ситуаций. (Примечание: я на самом деле не тестировал этот код.)

person Chris Salzberg    schedule 16.08.2012

parent = find("p[text()='zzz']").find(:xpath,"..")
within parent do
  ...

https://github.com/jnicklas/capybara/pull/505

person B Seven    schedule 16.08.2012