it-swarm.com.ru

Как поставить галочку в капибаре?

Я использую 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">
115
John Dow

Я нашел следующее работает для меня:

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

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

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

check 'cityID'
uncheck 'cityID'

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

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

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

120
installero

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

53
p1100i

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

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

26
buruzaemon

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

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

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

6
Michael Cruz

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

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

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

1
kulssaka

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

find(...).click

1
HectorPerez

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

все ('input [type = checkbox]'). each do | checkbox | checkbox.should_not be_checked end

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

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

0
Willian Tenfen Wazilewski

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

check 'Option 3'
0
Obromios