在我的rspec特性中,我尝试检查与其相关标签的复选框,因为输入是隐藏的。我的标签包含链接(<a>
标签),所以每次我使用check('user[agree_terms]', allow_label_click: true)
时,它从不检查框,而是打开标签中的链接包含。
这是我从ERB
生成的视图
<p class="col boolean required user_agree_terms">
<input name="user[agree_terms]" type="hidden" value="0">
<input class="boolean required" required="required" aria-required="true" type="checkbox" value="1" name="user[agree_terms]" id="user_agree_terms">
<label class="boolean required" for="user_agree_terms">
<abbr title="required">*</abbr>
J'ai accepté les <a target="_blank" href="https://somelink">Conditions Générales d'Utilisation</a> et la <a target="_blank" href="https://somelink">Politique de Confidentialité</a>
</label>
</p>
这是我的规格
# I tried both but its behave the same way : open the <a> tag
find('label[for="influencer_agree_terms"]').click
check('influencer[agree_terms]', allow_label_click: true)
你知道另一种选择方法吗?
顺便说一下,当我点击标签时,浏览器上的UI工作正常。
当您告诉Capybara单击一个元素时,它会在该元素的中间单击,在这种情况下是您有conditions
链接的地方,因此在标签元素之前单击。一种选择是专门单击abbr元素,该元素位于标签中,但远离链接
find('label[for="influencer_agree_terms"] abbr').click
另一个选择是利用allow_label_click支持指定点击位置的偏移量
check('influencer[agree_terms]', allow_label_click: { x: 10, y: 10 })
根据Capybara.w3c_click_offset
的设置,偏移量可以从标签元素的中心或左上角开始,因此根据需要调整值。从技术上讲,你可以在调用click
find('label[for="influencer_agree_terms"]').click(x: 10, y: 10)
但是在处理复选框
时通常使用check
更好默认情况下,capybara#click
方法将在元素的中间单击,就在我的链接所在的位置。幸运的是#click
有像#click(x: 0, y: 0)
一样的偏移选项。
因此,要在包含链接的标签的帮助下选中一个框:find('label[for="influencer_agree_terms"]').click(x: 0, y: 0)