質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

1335閲覧

rails capybaraでjavascriptが動かない

satototo

総合スコア1

Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2023/03/20 03:52

編集2023/03/20 05:29

実現したいこと

RSpecのSystem specにて
ログイン画面にあるパスワードフォームに入力された値を特定のアイコンをクリックすることによって表示⇔非表示に変える機能をテストしたい

前提

windows11
ruby 3.0.5
rails 7.0.4.2
rspec-rails 6.0.1
capybara 3.38.0
selenium-webdriver 4.8.1
webdrivers 5.2.0

ローカルでのブラウザ操作では機能しています。

発生している問題・エラーメッセージ

Failure/Error: expect(find('#textPassword1')[:type]).to eq "text" expected: "text" got: "password" (compared using ==)

該当のソースコード

systemspec.rb

1before do 2 driven_by(:rack_test) 3end 4 5it "", js:true do 6 visit login_path 7 expect(find('#textPassword1')[:type]).to eq "password" 8 find('#buttonEye1').click 9 expect(find('#textPassword1')[:type]).to eq "text" 10end

new.html.erb

1該当箇所のみ抜粋 2<div class="input-group d-flex"> 3 <%= f.password_field :password, class: 'form_control w-auto mb-0 flex-grow-1', id: "textPassword1" %> 4 <span id="buttonEye1" class="input-group-text fa fa-eye" onclick="pushHideButton(1)"></span> 5</div>

show_password.js

1function pushHideButton(num) { 2 var txtPass = document.getElementById(`textPassword${num}`); 3 var btnEye = document.getElementById(`buttonEye${num}`); 4 if (txtPass.type === "text") { 5 txtPass.type = "password"; 6 btnEye.className = "input-group-text fa fa-eye"; 7 } else { 8 txtPass.type = "text"; 9 btnEye.className = "input-group-text fa fa-eye-slash"; 10 } 11}

試したこと

visit・findの後にsleepで時間を置いてみてもダメでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

specのbefore doの
driven_by(:rack_test)を(:selenium_chrome)もしくは(:selenium)に変更したらテストが通りました。
ドライバがjavascriptを動かせない:rack_testのまま実行してしまっていたのが失敗の原因だと思います。

しかしcapybaraはjs:trueをつけるとデフォルトでドライバを:seleniumにしてくれるはずなのですが、なぜ変わらなかったのかはよくわかりませんでした、、
(rails_helperにてCapybara.javascript_driver = :selenium
を書いてもダメでした)

投稿2023/03/20 05:07

satototo

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satototo

2023/03/20 05:32

(解決) js:true より before do内の記述の方が優先されるためでした。 before do を削除してjs: trueをつけて実行したら通りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問