2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails6】ログインできない!テスト(Rspec4)でchromedriverが98になってから困ったこと【メモ】

Last updated at Posted at 2022-02-09

なんでメアドが入らんの…

先日chromeが98.0.4758.80に更新され、私の環境でも更新が入ったのですが、それ以降Capybaraを使ったテスト環境で変なエラーが続出したので対処メモを残します。

こんな方向け

  • プログラミング初学者
  • Railsユーザーでテスト環境でなぜかログインに失敗する方
  • とりあえず応急処置したい!という方

環境

  • Ruby : ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin20]
  • Rails : 6.0.0
  • rspec-rails : 4.0.2
  • capybara : 3.36.0
  • selenium-webdriver (4.1.0)
  • webdrivers (5.0.0)

エラーの内容

Rspecを使用した結合テストを実施中。
ログイン画面にていつも通りFakerで作成したアドレスをfill_inメソッドを用いて入力させようとした

すると以下のようなエラーが…

terminal
Failure/Error: fill_in 'session_email', with: user.email
     
     Selenium::WebDriver::Error::UnknownError:
       unknown error: Cannot construct KeyEvent from non-typeable key
         (Session info: chrome=98.0.4758.80)

 [Screenshot]: /Users/host.mac/hoge/app/fuga/tmp/screenshots/failures_r_spec_example_groups_nested_nested_hogehogeができる_XXX.png


     # 0   chromedriver                        0x00000001047e23c9 chromedriver + 5018569
     # 1   chromedriver                        0x000000010476d333 chromedriver + 4539187
     # 2   chromedriver                        0x0000000104342a88 chromedriver + 170632
     # 3   chromedriver                        0x000000010437f04b chromedriver + 417867
     # 4   chromedriver                        0x00000001043a1f7f chromedriver + 561023
     # 5   chromedriver                        0x0000000104371823 chromedriver + 362531
     # 6   chromedriver                        0x0000000104370e7b chromedriver + 360059
     # 7   chromedriver                        0x00000001043947e2 chromedriver + 505826
     # 8   chromedriver                        0x000000010436bde5 chromedriver + 339429
     # 9   chromedriver                        0x00000001043948ee chromedriver + 506094
     # 10  chromedriver                        0x00000001043a7604 chromedriver + 583172
     # 11  chromedriver                        0x00000001043946d3 chromedriver + 505555
     # 12  chromedriver                        0x000000010436a95e chromedriver + 334174
     # 13  chromedriver                        0x000000010436b935 chromedriver + 338229
     # 14  chromedriver                        0x000000010479e1ee chromedriver + 4739566
     # 15  chromedriver                        0x00000001047b7f51 chromedriver + 4845393
     # 16  chromedriver                        0x00000001047bd928 chromedriver + 4868392
     # 17  chromedriver                        0x00000001047b8a7a chromedriver + 4848250
     # 18  chromedriver                        0x0000000104792c31 chromedriver + 4693041
     # 19  chromedriver                        0x00000001047d3978 chromedriver + 4958584
     # 20  chromedriver                        0x00000001047d3b01 chromedriver + 4958977
     # 21  chromedriver                        0x00000001047e9795 chromedriver + 5048213
     # 22  libsystem_pthread.dylib             0x00007fff203168fc _pthread_start + 224
     # 23  libsystem_pthread.dylib             0x00007fff20312443 thread_start + 15
     # ./spec/support/sign_in_support.rb:7:in `sign_in'
     # ./spec/system/reviews_spec.rb:63:in `block (3 levels) in <top (required)>'

見慣れないエラーが。
Selenium::WebDriver::Error::UnknownError:
unknown error: Cannot construct KeyEvent from non-typeable key
(Session info: chrome=98.0.4758.80)

というわけで検索してみたところstackoverflowでも同じようなスレッドを発見したため確認しました。どうもchromeのアップデートに伴う仕様みたいで、過去のアップデートでも似たような件があったそうです。

Selenium-chromedriver: Cannot construct KeyEvent from non-typeable key (stack overflow)

[🐛 Bug]: Send_keys does not accept underscore when I use chromedriver 98 (GitHub)

どうやらchromedriverのバージョン98(98.0.4758.8098.0.4758.48のどちらも)では入力できない文字があるみたいでして、今回は運悪く「@」が該当になるみたいです。確認されているのは[]{}@<>とのこと(githubのコメより)

というわけでこれらのスレッドやissueを参考に手っ取り早い解決方法を導入しました。

ずばり、前バージョンを使う

以上です。
お好みのテスト環境にこれを書き加えてください
私はRspecを使っているので…↓

spec/rails_helper.rb

require 'webdrivers/chromedriver'
Webdrivers::Chromedriver.required_version = '97.0.4692.71'

とりあえずこれで解決しました。記述場所はわかりませんでしたので、ひとまずネストなしです。

chromedriverの履歴を見るとchrome99の記載もありますが、こちらはまだβ版であるため、ひとまずは前バージョンの97を導入する方が確実かと思います。

リンク先の記事にはfill_inメソッドを上書きするという方法も紹介されていましたが、とりあえず応急処置でいいやと思ったので割愛します。

他にこんな方法があるよ!という方はよろしければご教授ください!

参考記事一覧

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?