Как поставить галочку в капибаре? - PullRequest
120 голосов
/ 28 ноября 2011

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

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

Вот код:

 <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">

Ответы [ 11 ]

150 голосов
/ 28 ноября 2011

Я обнаружил, что у меня работает следующее:

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

# Uncheck
find(:css, "#cityID[value='62']").set(false)
127 голосов
/ 13 марта 2013

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

check 'cityID'
uncheck 'cityID'

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

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

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

54 голосов
/ 11 февраля 2013

При запуске теста на капибару вы получили объект 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 метод.

26 голосов
/ 28 ноября 2011

Я думаю, вам, возможно, придется дать уникальные id с элементам формы , прежде всего.

Но, что касается Capybara и флажков, метод экземпляра Capybara :: Node :: Actions # check * позволит вам найти и проверить флажок по имени, идентификатору или тексту метки.

6 голосов
/ 14 ноября 2014

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

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

Надеюсь, это кому-нибудь пригодится. Я использую Capybara 2.4.4.

5 голосов
/ 23 ноября 2018

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

check 'Option 3'
1 голос
/ 11 ноября 2015

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

find(...).click

1 голос
/ 15 мая 2015

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

all ('input [type = checkbox]'). Each do | checkbox |checkbox.should_not be_checked end

1 голос
/ 16 ноября 2012

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

find (: xpath, '// * [@ id = "example"]').Установите (true)

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

0 голосов
/ 19 июня 2019

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

check('Option 3', allow_label_click: true)

...