【问题标题】:Cucumber step to pause and hand control over to the user黄瓜步骤暂停并将控制权交给用户
【发布时间】:2011-06-29 06:11:33
【问题描述】:

由于测试环境的独特条件,我在调试 cucumber 步骤时遇到了麻烦。我希望有一个步骤可以暂停硒测试并让我接管。

例如

Scenario: I want to take over here
  Given: A bunch of steps have already run
  When: I'm stuck on an error
  Then: I want to take control of the mouse

那时我可以与应用程序进行交互,就好像我在运行 rails server -e test 后自己完成了前面的所有步骤一样

是否存在这样的步骤,或者有办法实现它?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 selenium cucumber


    【解决方案1】:

    您可以将 ruby​​-debug 集成到您的 Cucumber 测试中。 Nathaniel Ritmeyer 有方向 herehere 对我有用。您基本上需要 ruby​​-debug,在您的环境文件中启动调试器,然后将“断点”放在您想查看发生了什么的地方。您既可以与浏览器/应用程序交互,也可以在测试中查看 ruby​​ 变量的值。 (我不确定它是否会让您看到 Rails 应用程序本身中的变量 - 我没有针对 Rails 应用程序进行测试来检查)。

    【讨论】:

    • 我一直在用这个。我仍然希望能够与浏览器手动交互,因为我需要查看 HTML 以进行 Selenium 测试。
    • 当我用断点中断我的测试时,我仍然可以与浏览器交互。我想知道您是否因为更深入地集成到 Rails 而不能?
    • 我可以与浏览器的当前状态进行交互,但由于调试器处于活动状态,我无法继续执行其他操作。如果我允许调试器继续运行,则测试将继续运行,而我不再有机会与应用程序交互。
    【解决方案2】:

    我想出了转储数据库的想法。它不允许您从同一页面继续工作,但如果您在测试期间运行应用程序,您可以立即对另一个浏览器(不是由 Selenium 控制的浏览器)中的当前状态采取行动。

    步骤如下:

    When /I want to take control/i do
      exec "mysqldump -u root --password=* test > #{Rails.root}/support/snapshot.sql"
    end
    

    因为被exec调用,DatabaseCleaner没有机会截断表,所以实际上该命令是数据库转储无关紧要。您无需导入 sql 即可在当前状态下使用该应用,但如果您需要,它就在那里。

    【讨论】:

    • 这不能完全正常工作。浏览器仍然活着。但是rails应用程序已经死了。不能真正点击左右。我希望有一个完整的交互状态。
    • 这是一个绝妙的建议,谢谢。我在下面展示了一个小的变化。
    【解决方案3】:

    我的队友使用 selenium 完成了这项工作,firebug a hook (@selenium_with_firebug)

    他学到的一切都来自这篇博文:

    http://www.allenwei.cn/tips-add-firebug-extension-to-capybara/

    【讨论】:

    • 这仍然不是我正在寻找的答案。我希望能够在测试环境中运行的应用程序中继续单击链接并执行操作。
    【解决方案4】:

    添加步骤

    And show me the page
    

    你想与它互动的地方

    Scenario: I want to take over here
      Given: A bunch of steps have already run
      When: I'm stuck on an error
      Then show me the page
    

    【讨论】:

    • 仍然不是我正在寻找的答案。这只允许您在那时查看应用程序的 html 快照。我想从那时起继续运行应用程序。
    • 你所说的会很棒。如果有人知道怎么做,我肯定有兴趣自己使用它。
    【解决方案5】:
    【解决方案6】:

    非常感谢@Reed G. Law 提出的转储数据库的想法。然后将它加载到开发中让我能够准确地确定为什么我的黄瓜功能没有像我预期的那样影响数据库状态。这是我对他的建议的小调整:

    When /Dump the database/i do
      `MYSQL_PWD=password mysqldump -u root my_test > #{Rails.root}/snapshot.sql`
      # To replicate state in development run:
      # `MYSQL_PWD=password mysql -u root my_development < snapshot.sql`
    end
    

    您还可以在 feature/support/debugging.rb 中使用以下内容,让您一次一步地逐步完成该功能:

    # `STEP=1 cucumber` to pause after each step
    AfterStep do |scenario|
      next unless ENV['STEP']
      unless defined?(@counter)
        puts "Stepping through #{scenario.title}"
        @counter = 0
      end
      @counter += 1
      print "At step ##{@counter} of #{scenario.steps.count}. Press Return to"\
            ' execute...'
      STDIN.getc
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      相关资源
      最近更新 更多