水豚:找不到元素

时间:2014-01-17 01:23:25

标签: ruby-on-rails ruby-on-rails-3 cucumber 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事件。但是,我不确定其余部分。

编辑** 我也试过通过xpath选择元素。以下是我发现的各种事情

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

这可以找到span元素没问题

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

这个找不到我需要的元素,但是这个xpath正确选择了chromes console中的元素

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

这找不到我需要的元素,但是xpath选择了chromes console中的元素

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

这可以在label中找到span元素而没有任何问题。

1 个答案:

答案 0 :(得分:1)

您可以在这里使用Capybara的备忘单:http://learn.thoughtbot.com/test-driven-rails-resources/capybara.pdf

通过CSS与表单进行交互是一个坏主意。做这样的事情的更好方法是:

check 'I accept cool agreement'
click_button 'Submit'

所以你不需要知道元素或类的ID。只需使用用户可以在页面上看到的内容。