带rspec的水豚不';t始终查找按钮(测试失败)

带rspec的水豚不';t始终查找按钮(测试失败),rspec,capybara,ruby-on-rails-6,Rspec,Capybara,Ruby On Rails 6,我正在用rspec和一个按钮战斗。在我的html.erb中,我有 <button name="Collapse bank accounts" class="btn btn-sm btn-primary rounded-circle" type="button" data-bs-toggle="collapse" data-bs-target="#of-bank-ucties" aria-ex

我正在用rspec和一个按钮战斗。在我的html.erb中,我有

<button name="Collapse bank accounts" class="btn btn-sm btn-primary rounded-circle" type="button" data-bs-toggle="collapse" data-bs-target="#of-bank-ucties" aria-expanded="false" aria-controls="of-bank-ucties">
     <i class="fa fa-plus"></i>
</button>
问题是测试在50%的运行中失败,我不明白为什么它如此不可靠

我尝试使用find(path)、click_button(button)、find()查找按钮。单击,但每个按钮都有相同的结果。有时它会过去,有时它不会

这到底是怎么回事


我正在使用最新的宝石的每一个按钮是可见的,我看到他的截图,没有办法它可以隐形。当测试在chromium中进行时,我看到测试在应该单击按钮时停止,等待1秒并显示失败…

因为错误来自您的
expect(第页)…
行,这意味着水豚相信它已单击按钮(否则错误将来自
find_按钮
单击
行。这意味着您的问题只有几个原因

  • 您正在检查的CSS不正确 这可能不是事实,因为您声称它在50%的时间内都有效

  • 单击正在发生,但您没有给它足够的时间来更改CSS 通过增加最长时间来测试have#u selector是否将等待-
    expect(第页)。要使用_selector(:css,[data bs toggle=“collapse”][data bs target=“#of bank ucties”][aria expanded=“true”],等待:10)

  • 单击正在发生,但页面尚未准备好进行单击。通过在
    单击
    调用之前添加
    sleep 3
    来测试这一点-如果这解决了问题,那么在单击指示页面已准备好的按钮之前,您需要找到一些可以期待的内容

  • 您正在将该按钮设置到页面上,并且该按钮正在移动,而水豚正在尝试单击它。以与#3相同的方式进行测试(睡眠以给动画完成时间),如果它解决了问题,您需要设置一个期望值,指示动画已完成,或者在测试时禁用动画


  • 注意:
    click\u按钮
    定义为
    find\u按钮(…)。单击
    ——因此,作为两个单独的调用进行操作没有任何好处,除非您需要访问按钮元素(
    button\u to\u expand\u bu
    )稍后在您的代码中。

    您得到的确切错误是什么,错误来自测试的哪一行?无法找到具有给定css的元素,错误行是expect(第页)。。。
    button_to_expand_bu = find_button('Collapse bank accounts')
    button_to_expand_bu.click
    
    expect(page).to have_selector(:css, '[data-bs-toggle="collapse"][data-bs-target="#of-bank-ucties"][aria-expanded="true"]')