【问题标题】:Capybara Choose radio button not working / element click interceptedCapybara选择单选按钮不起作用/元素点击被拦截
【发布时间】:2022-02-03 00:17:46
【问题描述】:

我无法让 rspec/capybara 点击我的单选按钮。 SO上有很多类似的问题,但我找不到适合我的答案。

我的 HTML/CSS 直接来自 Bootstrap 站点:

<div class="form-group mb-3">
  <input autocomplete="off" checked="" class="btn-check" id="option1" name="options" type="radio">
  <label class="btn btn-secondary" for="option1">Vertrek</label>
  <input autocomplete="off" class="btn-check" id="option2" name="options" type="radio">
  <label class="btn btn-secondary" for="option2">Aankomst</label></div>

测试代码(迭代 #25 ;-( 是

Capybara.default_driver = :selenium
visit "/route_goals/new"
element = page.find("#option1")
element.set(true)

(我也尝试过 element.choose,但结果相同)。

我收到此错误消息:

   element click intercepted: Element <input autocomplete="off" checked="" class="btn-check" id="option1" name="options" type="radio"> is not clickable at point (295, 272). Other element would receive the click: <label class="btn btn-secondary" for="option1">...</label>

如果我解释正确,它会说标签拦截了单选按钮的点击。

【问题讨论】:

    标签: rspec radio-button capybara


    【解决方案1】:

    您是否碰巧将Capybara.ignore_hidden_elements 设置为false?如果你是 - 不要。它会让这里发生的事情更清楚。

    如果您在浏览器控制台中查看实际页面,您可能会看到实际的单选输入元素被隐藏并出于样式原因被替换为图像,或者标签元素被扩展以覆盖单选输入元素(再次出于样式原因)。这意味着用户永远不能真正点击输入元素,所以 Capybara 也不能。相反,您可以告诉choose 通过类似的方式点击标签

    choose('option1', allow_label_click: true)
    

    如果可能,它将单击复选框,否则单击关联的标签(也可以是choose('Vertrek', allow_label_click: true) 等)

    另一种选择是直接通过类似的方式专门单击标签

    find(:label, for: 'option1').click
    

    find(:label, 'Vertrek').click
    

    请注意,无论单选按钮是否已被选择,标签点击都会点击 - 只有在尚未选择单选按钮时才会点击选择

    【讨论】:

    • 非常感谢托马斯,所有 3 个选项都像魅力一样工作!实际上,我并没有在 ignore_hidden_​​elements 设置为 false 的情况下运行 Capybara。所以我想知道你希望我看得更清楚。
    • 顺便说一句@thomas,您将如何为该单选按钮定义 site_prism 元素?
    • @andreheijstek 99% 的情况下,单选按钮会被隐藏,而不仅仅是重叠。将ihe 设置为true(默认)运行会清楚地表明找不到元素。在您的情况下,这听起来像是 1% 不会有所作为。
    • @andreheijstek 回复:site-prism,我不会 - 我不使用它,因为对我来说,它比帮助更多。但是,您应该能够通过element :my_radio, :radio_button, 'Vertrek' 定义单选按钮,然后通过my_radio.choose(allow_label_click: true) 或设置Capybara.automatic_label_click = trueglobally 然后只是my_radio.choose iirc - 如果您想强制标签,您可以定义element my_radio_label, :label, 'Vertrek' 然后@ 987654334@ 虽然这只是点击当前是否选择了收音机
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2021-09-04
    • 1970-01-01
    • 2019-11-08
    • 2022-01-05
    • 2021-10-28
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多