I am using capybara to click a checkbox, however it can't seem to find it no matter what I do. I am able to correctly find both the span and the label inside the span, but not the input I actually need.
Here is the checkbox
<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>
And here are some of the things I have tried
page.check('agreement')
find(:css, '#agreement').set(true)
find('#agreement').set(true)
find('#agreement').click
However, they all give me the same error
Unable to find css "#agreement" (Capybara::ElementNotFound)
I am also wondering will any of these methods fire off the onclick
method, when the checkbox is clicked? I feel like find(:css, '#agreement').set(true)
will not trigger the onclick
event. However, I am not sure about the rest.
Update
I have also tried selecting the element through xpath. Here are the various things I have found out
find(:xpath, '//*[@id="registration"]/span[2]')
This is able to find the span
element no problem
find(:xpath, '//*[@id="registration"]/span[2]/input')
This can't find the element I need, but this xpath correctly selects the element in chrome's console
find(:xpath, '//*[@id="agreement"]')
This can't find the element I need, but the xpath selects the element in chrome's console
find(:xpath, '//*[@id="registration"]/span[2]/label')
This is able to find the label
element in the span
with no problem.
find('#agreement')
should work to find that checkbox, so if that's not working, there might be something wrong with the surrounding code (maybe it isn't loading the page correctly at all, or maybe there is invalid markup in the page). – Tim MooreCapybara.default_wait_time
? – Andrei Botalov