2014-01-17 3 views
1

Я использую capybara, чтобы установить флажок, однако он не может найти его независимо от того, что я делаю. Я могу правильно найти как пролет, так и метку внутри пролета, но не тот ввод, который мне действительно нужен.Capybara: Не удается найти элемент

Вот флажок

<span class="checkbox tos"> 
    <input id="agreement" name="agreement" onclick="agreeValidate();" type="checkbox" value="false"> 
    <label for="agreement">I accept the <a href="http://www.dev.com:3000/terms" target="_blank">Terms of Use</a>, <a href="http://www.dev.com:3000/privacy" target="_blank">Privacy Policy</a>, and am at least 13 years old</label> 
</span> 

А вот некоторые из вещей, которые я попробовал

page.check('agreement') 
find(:css, '#agreement').set(true) 
find('#agreement').set(true) 
find('#agreement').click 

Однако, все они дают мне ту же ошибку

Unable to find css "#agreement" (Capybara::ElementNotFound) 

Я также интересно, будет ли какой-либо из этих методов отключить метод onclick, когда будет установлен флажок? Я чувствую, что find(:css, '#agreement').set(true) не запускает событие onclick. Однако я не уверен в этом.

EDIT ** Я также попытался выбрать элемент через xpath. Вот различные вещи, я обнаружил

find(:xpath, '//*[@id="registration"]/span[2]') 

Это может не найти самый span элемент не проблемы

find(:xpath, '//*[@id="registration"]/span[2]/input') 

Это не может найти элемент, что мне нужно, но это XPath правильно выбирает элемент в chromes консоль

find(:xpath, '//*[@id="agreement"]') 

Это не может найти элемент Мне нужно, но XPath выбирает элемент в chromes консоли

find(:xpath, '//*[@id="registration"]/span[2]/label') 

Это может найти элемент label в span без проблем.

ответ

1

Вы можете использовать Cheatsheet для Капибара здесь: http://learn.thoughtbot.com/test-driven-rails-resources/capybara.pdf

Это плохая идея, чтобы взаимодействовать с формой через CSS. Лучший способ сделать что-то вроде этого:

check 'I accept cool agreement' 
click_button 'Submit' 

Значит, вам не нужно знать идентификатор элемента или класса. Просто используйте то, что пользователи могут видеть на странице.

+2

Не могли бы вы обосновать свое мнение (с примерами/причинами), почему это плохая идея взаимодействовать с формой через классы/идентификаторы? По крайней мере, по моему опыту, они гораздо реже меняются, чем текст вопроса. – pixelearth

Смежные вопросы