Capybara没有将Symbol隐式转换为Integer。

问题描述 投票:0回答:1

Capybara引发了这个奇怪的错误,第一个例子总是能正常工作,但后续的例子在执行过程中第二次调用visit方法时,也出现了同样的错误。

TypeError:'no implicit conversion of Symbol into Integer' TypeError:'没有将符号隐式转换为整数'。

我已经尝试过捆绑更新,改变我的mocks周围,但似乎没有任何改变.我不知道如何重现它,因为我不知道它是如何发生的。

  • 问题首次出现在从rails 3.2升级到5.2之后。

  • 测试环境会出现错误,而Capybara却能正常通过。

  • 所有测试都能单独通过。

  • 无论是否在同一个例子中,它总是在第二次访问调用时发生。

我已经试过了。

  • seleniumselenium_chrome 以及无头变体
  • 核对 before(:each) 阻止
  • 运转 bundle update --conservativebundle update
  • 添加 config.raise_server_errors 在Capybara配置中
  • 不同 selenium-webdriver 版本

编辑1: 只发生在 js: true 测试

溯源。

Editar Documentação
  Editar Documentação
    com falha
      documentação adicional não entregue
Capybara starting Puma...
* Version 4.3.1 , codename: Mysterious Traveller
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:37485
        não consegue editar de pendente para indeferido
    com sucesso
      indeferido para deferido
        consegue editar de indeferido para deferido (FAILED - 1)
      pendente para indeferido
        consegue editar de pendente para indeferido (FAILED - 2)

Failures:

  1) Editar Documentação Editar Documentação com sucesso indeferido para deferido consegue editar de indeferido para deferido
     Failure/Error: visit edit_candidatura_path(candidatura)
     
     TypeError:
       no implicit conversion of Symbol into Integer
     # /home/gurja/.rvm/gems/ruby-2.5.3@sispos_novo/gems/capybara-3.32.1/lib/capybara/session.rb:271:in `[]='
     # /home/gurja/.rvm/gems/ruby-2.5.3@sispos_novo/gems/capybara-3.32.1/lib/capybara/session.rb:271:in `visit'
     # /home/gurja/.rvm/gems/ruby-2.5.3@sispos_novo/gems/capybara-3.32.1/lib/capybara/dsl.rb:58:in `block (2 levels) in <module:DSL>'
     # ./spec/features/candidatos/editar_documentacao_spec.rb:41:in `block (5 levels) in <top (required)>'

  2) Editar Documentação Editar Documentação com sucesso pendente para indeferido consegue editar de pendente para indeferido
     Failure/Error: visit edit_candidatura_path(candidatura)
     
     TypeError:
       no implicit conversion of Symbol into Integer
     # /home/gurja/.rvm/gems/ruby-2.5.3@sispos_novo/gems/capybara-3.32.1/lib/capybara/session.rb:271:in `[]='
     # /home/gurja/.rvm/gems/ruby-2.5.3@sispos_novo/gems/capybara-3.32.1/lib/capybara/session.rb:271:in `visit'
     # /home/gurja/.rvm/gems/ruby-2.5.3@sispos_novo/gems/capybara-3.32.1/lib/capybara/dsl.rb:58:in `block (2 levels) in <module:DSL>'
     # ./spec/features/candidatos/editar_documentacao_spec.rb:73:in `block (5 levels) in <top (required)>'

Top 3 slowest examples (15.28 seconds, 89.3% of total time):
  Editar Documentação Editar Documentação com falha documentação adicional não entregue não consegue editar de pendente para indeferido
    10.53 seconds ./spec/features/candidatos/editar_documentacao_spec.rb:106
  Editar Documentação Editar Documentação com sucesso indeferido para deferido consegue editar de indeferido para deferido
    2.43 seconds ./spec/features/candidatos/editar_documentacao_spec.rb:40
  Editar Documentação Editar Documentação com sucesso pendente para indeferido consegue editar de pendente para indeferido
    2.32 seconds ./spec/features/candidatos/editar_documentacao_spec.rb:72

Finished in 17.11 seconds (files took 5 seconds to load)
3 examples, 2 failures

Failed examples:

rspec ./spec/features/candidatos/editar_documentacao_spec.rb:40 # Editar Documentação Editar Documentação com sucesso indeferido para deferido consegue editar de indeferido para deferido
rspec ./spec/features/candidatos/editar_documentacao_spec.rb:72 # Editar Documentação Editar Documentação com sucesso pendente para indeferido consegue editar de pendente para indeferido

Capybara配置。


Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: { args: %w(headless disable-gpu) }
  )
  Capybara::Selenium::Driver.new(app, { browser: :chrome, desired_capabilities: capabilities })
end

Capybara.javascript_driver = :chrome

Capybara.configure do |config|
  config.raise_server_errors
end

RSpec.configure do |config|
  config.before(:each, js: true) do
    Capybara.page.driver.browser.manage.window.maximize
  end
end

Gemfile:

ruby '2.5.3'

# Aplicações Gerais
gem 'rails', '~> 5.2'
gem 'rake', '13.0.1'
# gem 'rack-cache'
gem 'mysql2', '0.5.2'
gem 'cancancan', '3.0.2'
gem 'nokogiri', '1.10.8'
# gem 'exception_notification', '2.6.1', :require => 'exception_notifier'
gem 'acts_as_votable', '0.12.1'
gem 'time_splitter', '1.1.0'
gem 'httparty', '0.17.3'
# gem 'rails-erd', '1.5.2', require: false
# gem 'sprockets-rails', :require => 'sprockets/railtie'
gem 'iconv', '1.0.8'
gem 'has_scope', '0.7.2'
gem 'font-awesome-rails', '4.7.0.5'
gem 'responders', '~> 2.0'

# JSON
gem 'json', '2.3.0'
gem 'multi_json', '~> 1.14', '>= 1.14.1'

# JQuery
gem 'jquery-rails', '4.3.5'
gem 'jquery-ui-rails', '6.0.1'
# gem 'bxslider-rails'
gem 'select2-rails', '4.0.3'
gem 'multi-select-rails', '0.9.12'

# Javascript
gem 'js-routes', '1.4.9'
gem 'therubyracer', '0.12.3'
# gem 'highcharts-rails'
gem 'sprockets', '3.7.2'
gem 'uglifier', '4.2.0'

# Query
gem 'will_paginate', '3.1.7'

# ActiveRecord
gem 'paperclip', '6.1.0'
gem 'delayed_job_active_record', '4.1.4'
gem 'amoeba', '3.1.0'
gem 'activeresource', '5.1.0'

# Validations
gem 'validates_timeliness', '4.1.1'
gem 'charlock_holmes_bundle_icu', '~> 0.6.9.2'
# gem 'rqrcode'

# Documentos
gem 'spreadsheet', '1.2.6'
gem 'to_xls', '1.5.3'
gem 'rtf', '0.3.3'
gem 'prawn', '2.2.2'
gem 'prawn-table', '0.2.2'
gem 'prawn-qrcode', '0.5.1'

# Ruby
# gem 'whenever'
# gem 'daemons', '1.0.10'
# gem 'websocket', '1.2.1'
# gem 'concurrent-ruby'

# GrayLog
gem 'gelf', '3.1.0'

# Assets Pipeline
gem 'sass-rails', '6.0.0'
gem 'coffee-rails', '5.0.0'
gem 'tinymce-rails', '5.2.0'
gem 'highcharts-rails', '6.0.3'

# Migracao para o docker
gem 'puma', '4.3.1'

# Acertos
gem 'rubocop', require: false

group :development, :test do
  gem 'byebug'
  gem 'uniform_notifier', '1.13.0'
  gem 'factory_bot_rails', '5.1.1'
  # gem 'awesome_print'
  gem 'rspec-rails'
  gem 'rails3-generators'
  # gem 'mongrel', '1.2.0.pre2'
  # gem 'email_spec', '1.5.0'
  # gem 'public_suffix', '1.4.6'
  # gem 'webrick', '~> 1.3.1'
end

group :development do
  gem 'bullet'
  gem 'brakeman', :require => false
end

group :test do
  gem 'shoulda-matchers'
  gem 'capybara'
  gem 'selenium-webdriver'
  gem 'database_cleaner', '1.7.0'
  # gem 'launchy'
  gem 'webmock'
  # # gem "activerecord-mysql2-retry-ext"
  gem 'simplecov'
  gem 'simplecov-rcov'
  # gem 'transpec'
  # gem 'parser', '2.3.3.1'
end

group :production, :homologacao do
  gem 'SyslogLogger'
  # gem 'newrelic_rpm'
end

group :development, :test, :homologacao do
  gem 'letter_opener'
end

editar_documentacao_spec.rb。

# coding: UTF-8
require 'spec_helper'

RSpec.feature 'Editar Documentação', type: :feature do
  let(:admin) { create :administrador_suporte }
  let(:iduff) { admin.vinculacao.identificacao_login.iduff }

  let(:candidato) { create :candidato }
  let(:deferido) { create :situacao_documentacao, :deferido }
  let(:indeferido) { create :situacao_documentacao, :indeferido }
  let(:pendente) { create :situacao_documentacao, :pendente }

  let(:cpf_xpath) { '//*[@id="edit_candidatura_1"]/fieldset[2]/div[1]/span[2]/input' }
  let(:rg_xpath) { '//*[@id="edit_candidatura_1"]/fieldset[2]/div[2]/span[2]/input' }
  let(:diploma_xpath) { '//*[@id="edit_candidatura_1"]/fieldset[2]/div[3]/div/div/span[2]/input' }
  let(:documentao_adicional_xpath) { '//*[@id="doc_adicional"]/span/input' }

  before(:each) do
    deferido
    indeferido
    pendente
    candidatura
    situacao

    login_user(iduff)
  end

  describe 'Editar Documentação', js: true do
    context 'com sucesso' do
      context 'indeferido para deferido' do
        let(:situacao) do
          create :situacao_candidatura, :aguardando_avaliacao_desempenho
        end

        let(:candidatura) do
          create :candidatura_documentacao_indeferida, candidato: candidato
        end

        scenario 'consegue editar de indeferido para deferido' do
          visit edit_candidatura_path(candidatura)

          attach_file('candidatura_documentacoes_candidatura_attributes_0_documento',
                      "#{Rails.root}/spec/fixtures/documentos/cpf.pdf")
          xpath_fill_autocomplete(cpf_xpath, with: deferido.descricao)

          attach_file('candidatura_documentacoes_candidatura_attributes_1_documento',
                      "#{Rails.root}/spec/fixtures/documentos/rg.pdf")
          xpath_fill_autocomplete(rg_xpath, with: deferido.descricao)

          attach_file('candidatura_documentacoes_candidatura_attributes_2_documento',
                      "#{Rails.root}/spec/fixtures/documentos/diploma.pdf")
          xpath_fill_autocomplete(diploma_xpath, with: deferido.descricao)

          xpath_fill_autocomplete(documentao_adicional_xpath, with: deferido.descricao)

          click_on 'Salvar'

          expect(page).to have_content "Documentos Atualizados com sucesso!"
        end
      end

      context 'pendente para indeferido' do
        let(:situacao) do
          create :situacao_candidatura, :indeferido_aguardando_reenvio
        end

        let(:candidatura) do
          create :candidatura_aguardando_avaliacao, candidato: candidato
        end

        scenario 'consegue editar de pendente para indeferido' do
          visit edit_candidatura_path(candidatura)

          attach_file('candidatura_documentacoes_candidatura_attributes_0_documento',
                      "#{Rails.root}/spec/fixtures/documentos/cpf.pdf")
          xpath_fill_autocomplete(cpf_xpath, with: indeferido.descricao)

          attach_file('candidatura_documentacoes_candidatura_attributes_1_documento',
                      "#{Rails.root}/spec/fixtures/documentos/rg.pdf")
          xpath_fill_autocomplete(rg_xpath, with: indeferido.descricao)

          attach_file('candidatura_documentacoes_candidatura_attributes_2_documento',
                      "#{Rails.root}/spec/fixtures/documentos/diploma.pdf")
          xpath_fill_autocomplete(diploma_xpath, with: indeferido.descricao)
          
          xpath_fill_autocomplete(documentao_adicional_xpath, with: deferido.descricao)

          click_on 'Salvar'

          expect(page).to have_content "Documentos Indeferidos!"
        end
      end
    end

    context 'com falha' do
      let(:situacao) do
        create :situacao_candidatura, :indeferido_aguardando_reenvio
      end

      context 'documentação adicional não entregue' do
        let(:candidatura) do
          create :candidatura_aguardando_avaliacao, candidato: candidato
        end

        scenario 'não consegue editar de pendente para indeferido' do
          visit edit_candidatura_path(candidatura)

          attach_file('candidatura_documentacoes_candidatura_attributes_0_documento',
                      "#{Rails.root}/spec/fixtures/documentos/cpf.pdf")
          xpath_fill_autocomplete(cpf_xpath, with: indeferido.descricao)

          attach_file('candidatura_documentacoes_candidatura_attributes_1_documento',
                      "#{Rails.root}/spec/fixtures/documentos/rg.pdf")
          xpath_fill_autocomplete(rg_xpath, with: indeferido.descricao)

          attach_file('candidatura_documentacoes_candidatura_attributes_2_documento',
                      "#{Rails.root}/spec/fixtures/documentos/diploma.pdf")
          xpath_fill_autocomplete(diploma_xpath, with: indeferido.descricao)

          click_on 'Salvar'

          expect(page).to have_content "Documentação adicional não entregue!"
        end
      end
    end
  end
end
ruby rspec ruby-on-rails-5 capybara rspec-rails
1个回答
0
投票

我设法解决了这个问题。这是Capybara在我的项目中的版本问题,可能是包的版本冲突,因为我在Stackoverflow或Capybara的Github问题中没有发现这个问题。

解决方法。

我把它降级到了3.10.1,它就能正常工作了,然后我逐步升级,直到3.15.1。比这更新的版本都坏了。

© www.soinside.com 2019 - 2024. All rights reserved.