【问题标题】:Rails and Selenium: how to stop/pause execution of a test in the browser?Rails 和 Selenium:如何在浏览器中停止/暂停执行测试?
【发布时间】:2019-04-05 09:44:48
【问题描述】:

我在使用 Cucumber、RSpec、Selenium 和 Rails 深入研究行为驱动开发方面非常困难(但非常有趣)。

我已经准备好使用 Selenium 进行测试,看到 Firefox 弹出并在我的场景中自动运行很有趣。但我想做的一件事是在某个点暂停或停止执行,这样我就可以检查 Selenium 在某个点看到的内容。

我知道 save_and_open_page 命令,但这只会显示没有格式化的纯 HTML。那么也许有一个 stop_execution 方法或什么东西可以停止 Selenium 而不关闭浏览器?

【问题讨论】:

    标签: ruby-on-rails selenium bdd


    【解决方案1】:

    安装pry,然后将binding.pry 放入您希望暂停的测试中。完成后,按 Ctrl+D 或在打开的 REPL 中键入 exit 以继续执行。

    【讨论】:

    • 这对我很有用,除非我将 binding.pry 粘贴在视图中。任何想法如何暂停在视图中执行?我知道我真的不需要这样做,但有时它真的很方便。
    【解决方案2】:

    或者只是:

     visit '/'
     sleep(inspection_time=5)
     visit '/dreamland'
    

    【讨论】:

    • "这可能会以两种方式对您造成影响。首先,您需要将睡眠时间设置得足够长,以便有足够的时间来获得响应。但这意味着您将花费大量时间在等待响应,从而拖慢你的测试。第二口是,不管你睡多久,有时还是不够。环境会发生一些变化,导致你超过睡眠- “你会得到错误的失败。因此,我强烈建议你永远不要这样裸睡。”来自martinfowler.com/articles/nonDeterminism.html
    • 我不建议将其用于测试。它仅供检查。有这样令人讨厌的东西会在检查后敦促将其删除。一种用于调试的pconsole.log
    【解决方案3】:

    在您想要stop/pause 执行的地方使用Debugger

    在 Selenium IDE 中,您可以右键单击 命令行,然后您可以选择 Set/Clear Start pointstop/pause 执行。

    【讨论】:

      【解决方案4】:

      好的,我安装了 ruby​​-debug19(适用于 Ruby 1.9.3),然后在 Cucumber 步骤中的某处设置断点。

      http://rails.vandenabeele.com/blog/2011/12/21/installing-ruby-debug19-with-ruby-1-dot-9-3-on-rvm/

      另一种选择是使用 Capybara-firebug gem,它添加了一个“然后停止并让我调试”步骤,基本上看起来是一样的(我不知道它是否依赖于 ruby​​-debug gem)。

      【讨论】:

        【解决方案5】:

        尝试使用 selenium.sleep(ms) 这将使测试执行等待指定的时间量

        【讨论】:

        • 谢谢,这是一个很好的提示,但在我的 ***_steps.rb 中硒似乎不可用:undefined local variable or method 'selenium' for #<Cucumber::Rails::World:0x007ffc6a230d70> (NameError)
        • 哎呀..使用java。所以在代码 selenium.sleep() 中,selenium 是对象名称.. 所以你必须相应地修改它:)
        • 我用page.driver.sleep(5000) 尝试过,但后来我得到private method sleep' 调用#<:selenium::driver:0x007ff87a558960> (NoMethodError)`。
        • undefined method 'pause' for #&lt;Cucumber::Rails::World:0x007f81baed2fe0&gt; (NoMethodError)...但是在 RSpec Book 中,我可以使用硒对象,我明白了...似乎已经过时了。但是现在是怎么做的呢?
        • 如果你只是想暂停,你可以使用普通的 Ruby sleep 5。但是,如果您坚持调用私有方法,您可以随时使用page.driver.send(:sleep, 5)(但请注意traps
        【解决方案6】:

        所有答案都需要安装新的 gem,甚至设置睡眠,这不是最好的方法。您可以将此行放在步骤中的任何位置:

        ask "Continue?"
        

        它将停止执行,直到您输入y(是)

        所以,例如,它看起来像这样:

        expect(page).to have_button('Submit')
        ask "Continue?"
        click_button('Submit')
        

        【讨论】:

          【解决方案7】:

          您可以使用 byebug 来执行此操作,而无需在 rails 5 或更高版本中安装任何 gem。只需在您希望暂停测试的行上输入 byebug

          例子:

          visit post_url(id: posts(:one).id)
          byebug
          click_on "...", match: :first
          

          这样做会在新页面加载后但在单击下一步按钮之前暂停测试。如果使用旧版本的 Rails,您可能必须安装 byebug gem,但它对于故障排除很有用,我建议无论如何都使用它。

          【讨论】:

            猜你喜欢
            • 2019-04-23
            • 2020-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多