Как установить флажок в capybara?

Я использую Rspec и Capybara.

Как я могу написать шаг для проверки checkbox? Я пробовал check по значению, но он не может найти мой checkbox. Я не уверен, что делать, поскольку у меня есть тот же идентификатор с разными значениями

Вот код:

 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">

Ответ 1

Я нашел для меня следующее:

# Check
find(:css, "#cityID[value='62']").set(true)

# Uncheck
find(:css, "#cityID[value='62']").set(false)

Ответ 2

Лучше не создавать несколько элементов с одним и тем же id, поэтому (и не только для этого) вы можете легко проверить/снять флажок с элегантным p >

check 'cityID'
uncheck 'cityID'

Если не удается избежать нескольких элементов с одним и тем же идентификатором и по-прежнему необходимо установить флажок с определенным значением, он может сделать это с помощью

find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)

Более подробную информацию о входных манипуляциях capybara можно найти здесь

Ответ 3

При запуске теста capybara вы получаете объект page. Это можно использовать для проверки/снятия флажков. Как уже упоминал @buruzaemon:

чтобы найти и установить флажок по имени, идентификатору или меток.

Так что давайте предположим, что у вас есть флажок в вашем html, например:

<label>  
  <input type="checkbox" value="myvalue" name="myname" id="myid">
  MyLabel
</label>

Вы можете проверить это с помощью:

page.check('myid')
page.check('MyLabel')
page.check('myname')

Снимите отметку - это то же самое, что использовать метод page.uncheck.

Ответ 5

Я знаю, что это старый вопрос, но я сам работал над этим, и, пробовав все это, это то, что, наконец, помогло мне:

find("input[type='checkbox'][value='#{cityID.id}']").set(true)

Надеюсь, это кому-то поможет. Я использую Capybara 2.4.4.

Ответ 6

Если поле связано с текстом, например, "Вариант 3", то с capybara 3.0.3 вы можете просто сделать

check 'Option 3'

Ответ 7

вы также можете использовать: xpath вместо: css, если у вас есть проблемы с поиском.

find (: xpath, '//* [@id = "example" ]'). set (true)

в Chrome (и, конечно же, в других браузерах) вы можете "проверить элемент", а затем щелкнув правой кнопкой мыши на интересующем вас элементе, есть "copy xpath", если вы не знаете, что такое xpath, теперь вы делаете.

Ответ 8

Вы также можете проверить, что в этом примере все флажки не отмечены.

all ('input [type = checkbox]'). each do | checkbox |   checkbox.should_not be_checked конец

Ответ 9

.set(true) не работает для меня, поэтому мне пришлось вызвать .click:

find(...).click

Ответ 10

check find(".whenever input")[:id]

Я думаю, что это заставит capybara подождать, когда какой-либо прослушиватель событий присоединяется к этому входу, что иногда является болью в заднице, если он не ждет. Если этот вход не имеет идентификатора, выберите другое свойство (должно быть одно)...

Ответ 11

Старая тема, но другое решение:

check('Option 3', allow_label_click: true)