Ответ 1
Я нашел для меня следующее:
# Check
find(:css, "#cityID[value='62']").set(true)
# Uncheck
find(:css, "#cityID[value='62']").set(false)
Я использую 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">
Я нашел для меня следующее:
# Check
find(:css, "#cityID[value='62']").set(true)
# Uncheck
find(:css, "#cityID[value='62']").set(false)
Лучше не создавать несколько элементов с одним и тем же id, поэтому (и не только для этого) вы можете легко проверить/снять флажок с элегантным p >
check 'cityID'
uncheck 'cityID'
Если не удается избежать нескольких элементов с одним и тем же идентификатором и по-прежнему необходимо установить флажок с определенным значением, он может сделать это с помощью
find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)
Более подробную информацию о входных манипуляциях capybara можно найти здесь
При запуске теста 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
.
Я думаю, вам, возможно, придется предоставить уникальный id
вашим элементам формы, в первую очередь.
Но что касается Capybara и checkboxes, метод Capybara:: Node:: Действия # проверить способ позволит вам найти и установите флажок по имени, идентификатору или меток.
Я знаю, что это старый вопрос, но я сам работал над этим, и, пробовав все это, это то, что, наконец, помогло мне:
find("input[type='checkbox'][value='#{cityID.id}']").set(true)
Надеюсь, это кому-то поможет. Я использую Capybara 2.4.4.
Если поле связано с текстом, например, "Вариант 3", то с capybara 3.0.3
вы можете просто сделать
check 'Option 3'
вы также можете использовать: xpath вместо: css, если у вас есть проблемы с поиском.
find (: xpath, '//* [@id = "example" ]'). set (true)
в Chrome (и, конечно же, в других браузерах) вы можете "проверить элемент", а затем щелкнув правой кнопкой мыши на интересующем вас элементе, есть "copy xpath", если вы не знаете, что такое xpath, теперь вы делаете.
Вы также можете проверить, что в этом примере все флажки не отмечены.
all ('input [type = checkbox]'). each do | checkbox | checkbox.should_not be_checked конец
.set(true) не работает для меня, поэтому мне пришлось вызвать .click:
find(...).click
check find(".whenever input")[:id]
Я думаю, что это заставит capybara подождать, когда какой-либо прослушиватель событий присоединяется к этому входу, что иногда является болью в заднице, если он не ждет. Если этот вход не имеет идентификатора, выберите другое свойство (должно быть одно)...
Старая тема, но другое решение:
check('Option 3', allow_label_click: true)