javascript - 使用 Cucumber + capybara + selenium 测试 Rails 应用程序会导致空白页

标签 javascript ruby-on-rails selenium cucumber capybara

我正在尝试使用 cucumber 1.2.1、capybara 1.1.2 和 selenium 在 javascript 中测试确认对话。 Ruby 是 1.9.3,RoR 是 3.2.6。

我的 features/env.rb 是:

require 'cucumber/rails'

Capybara.default_selector = :css
Capybara.default_driver = :selenium

ActionController::Base.allow_rescue = false

begin
  DatabaseCleaner.strategy = :transaction
rescue NameError
  raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
end

Cucumber::Rails::Database.javascript_strategy = :truncation

# For testing email
require 'email_spec/cucumber'

# Load FactoryGirl methods
World(FactoryGirl::Syntax::Methods)

require 'declarative_authorization/maintenance'
World(Authorization::TestHelper)

# To handle popups
require 'prickle/capybara'
World(Prickle::Capybara)

我的步骤是:

# To test popups. The popup object is define by the gem prickle
Entonces /^debería ver "([^"]*)" en un cuadro de diálogo$/ do |text|
  popup.message.should have_content(text)
end

Cuando /^(cancelo|confirmo) el cuadro de diálogo$/ do |option|
  popup.send(option == "cancelo" ? "dismiss" : "confirm")
end

gem prickle 使用 page.driver.browser.switch_to.alert 打开这些弹出窗口(这只是一个快捷方式)。

我安装的 gem 是:

group :test do
  gem 'cucumber-rails'
  # database_cleaner is not required, but highly recommended
  gem 'database_cleaner'
  gem 'capybara'
  # To test email delivery with cucumber
  gem 'email_spec'
  # Rspec
  gem 'rspec-rails'
  gem 'rspec'
  # To create instance of objects in the database
  gem 'factory_girl_rails'
  # To generate random data
  gem 'faker'
  # To open pages with capybara
  gem 'launchy'

  #To test popups
  gem 'prickle'
  # To open web browser while testing and test javascript
  gem 'selenium'
end

当我运行测试时,它在我的浏览器(firefox)中没有显示任何内容。它说“连接已重置”,当然 capybara 无法在页面中找到任何元素。如果我删除该行:

Capybara.default_driver = :selenium

来自 env.rb,没有 javascript 的测试工作正常,但是当尝试运行弹出窗口的步骤时,它显示:

undefined method `switch_to' for #<Capybara::RackTest::Browser:0x00000005424cf8> (NoMethodError)

我可以尝试什么?我花了很多时间尝试不同的方法,但没有一个有效。我也尝试过 webkit,但由于神秘错误而无法安装。

已更新以显示功能内容

    #language: es
    Característica: Eliminar usuario

    Antecedentes: Usuarios registrados

        Dado que los siguientes usuarios existen:

           | email                     | password      |
           | bstornelli@integra.la     | b12345        |
           | eliminame@integra.la      | e12345        |

        Y estoy autenticado como "bstornelli@integra.la"


    Escenario: Eliminación exitosa    
        Dado que estoy autorizado para "eliminar usuario"
        Cuando visito la página "ver usuario" para "eliminame@integra.la"
        Y presiono "Eliminar usuario"
        Entonces debería ver "¿Está seguro que desea eliminar el usuario eliminame@integra.la?" en un cuadro de diálogo
        Cuando confirmo el cuadro de diálogo
        Entonces debería estar en la página "listar usuarios"
        Y debería ver "El usuario 'eliminame@integra.la' ha sido eliminado exitosamente"
        Y no debería existir un "usuario" con "email" "eliminame@integra.la"

最佳答案

当我的测试数据库没有迁移到最新版本时,我遇到了同样的问题,但发生的情况并不明显,因为错误没有显示在控制台中,我只是遇到了像您一样的“连接重置”错误正在得到。我终于能够通过在 features/support/env.rb 中设置以下内容来获取问题出现的堆栈跟踪

Capybara.app = Rack::ShowExceptions.new(YourRailsApp::Application)

关于javascript - 使用 Cucumber + capybara + selenium 测试 Rails 应用程序会导致空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12179461/

相关文章:

python - 尝试创建一个机器人来与 Selenium Python 连接不和谐

javascript - Firefox 中可调整大小的 div 宽度轮廓

javascript - Json.Parse 转义换行符

ruby-on-rails - 尝试在本地访问我的应用程序时,我得到 : "could not translate host name ... to address" and "Temporary failure in name resolution"

python - 我怎样才能用python找到我的IP地址而不是本地IP?

selenium - 如何在Selenium Webdriver(Python)中使用变量名存储包含特定文本的元素来存储字符串?

javascript - NPM错误: Cannot find module 'are-we-there-yet'

javascript - 这个模式 f(a)(b)(c) 叫什么?

ruby-on-rails - 如何将验证与模型分开

ruby-on-rails - ActiveStorage::FileNotFoundError 但文件实际存在