Капибара неявное преобразование символа в целое число - PullRequest
0 голосов
/ 30 апреля 2020

Capybara вызывает эту странную ошибку, первый пример всегда работает нормально, но последующие не работают с этой же ошибкой при повторном вызове метода посещения во время выполнения:

TypeError: 'no неявное преобразование Symbol в целое число '

Я пробовал обновлять пакеты, менял свои макеты, но, похоже, ничего не изменило. Я понятия не имею, как воспроизвести это, потому что я не знаю, как это происходит.

  • Проблема впервые появилась после обновления с рельсов 3.2 до 5.2

  • Среда тестирования выдает ошибки, и Capybara передает их нормально.

  • Все тесты проходят индивидуально.

  • Это происходит всегда второй визит, независимо от того, находится ли он в том же примере или нет

Я пробовал:

  • selenium и selenium_chrome, а также безголовые варианты
  • проверка блока before(:each)
  • выполнение bundle update --conservative и bundle 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.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_spe c .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

1 Ответ

0 голосов
/ 05 мая 2020

Мне удалось это решить. Это было что-то с версией Capybara в моем проекте, возможно, конфликт с версией пакета, так как я не нашел этой проблемы нигде в Stackoverflow или проблемах Capybara Github.

Решение:

Я понизил его до 3.10.1 и все заработало, затем я постепенно обновил его до 3.15.1. Любая версия новее этой сломалась.

...