水豚不想 select 输入节点

Capybara doesn't want to select an input node

我的HTML/ERB看起来像这样

<fieldset class="row notifications">
    <legend>
        <hr class="dash blue inline">
        <%= t :my_notifications %>
    </legend>

    <label>
        <%= f.check_box(:subscribed_to_news) %>
        <span></span>
        <span class="checkbox-text"><%= t :accepts_to_receive_news %></span>
        <br>
    </label>
</fieldset>

当我用 Capybara 调试我的 Cucumber 测试时,我确实在这个混乱中找到了通知复选框 f.check_box(:subscribed_to_news)

page.find('.notifications label')['innerHTML']
# => "\n\t\t<input name=\"user[subscribed_to_news]\" type=\"hidden\" value=\"0\"><input type=\"checkbox\" value=\"1\" checked=\"checked\" name=\"user[subscribed_to_news]\" id=\"user_subscribed_to_news\">\n\t\t<span></span>\n\t\t<span class=\"checkbox-text\">blahblahblah</span>\n\t\t<br>\n\t"

但出于某种原因,我找不到嵌套的输入,也无法通过 ID 找到它们

page.find('.notifications label input') 
# => Capybara::ElementNotFound Exception: Unable to find css ".notifications label input"
page.find('.notifications label #user_subscribed_to_news') # => Capybara::ElementNotFound Exception: Unable to find css ".notifications label #user_subscribed_to_news"

虽然选择标签确实有效

page.find('.notifications label')
# => #<Capybara::Node::Element tag="label" path="//HTML[1]/BODY[1]/DIV[1]/MAIN[1]/SECTION[1]/FORM[1]/FIELDSET[3]/LABEL[1]">

我做错了什么?我只想检查该死的复选框:'(

最有可能的原因是复选框实际上被 CSS 隐藏,然后用图像替换,以便在不同的浏览器中启用相同样式的复选框。如果您使用的是最新的 Capybara,您可以通过调用

隐藏复选框时让它单击标签
page.check('user_subscribed_to_news', allow_label_click: true) # you can also set Capybara.automatic_label_click = true to default to this behavior

或者如果使用较旧的水豚,您需要自己点击标签

page.find(:label, "blahblahblah").click #match on labels text

page.find(:label, for: 'user_subscribed_to_news').click #match on labels for attribute if set

似乎无法通过正常 css /xpath...

访问该复选框

我用了一些 javascript

page.execute_script(%Q{document.querySelector('#{area} input##{selector}').click()})