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

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

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

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RSpec

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

selenium

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

Q&A

1回答

827閲覧

RailsでSeleniumを用いたfeatureテストでconfirmの中身を確認したい

terataku

総合スコア10

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RSpec

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

selenium

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

0グッド

0クリップ

投稿2018/11/09 05:52

編集2018/11/09 11:26

Railsで作成しているアプリにおいて、タイトル通りボタンを押した時のconfirmの表示を確認したいです

= form.button "ボタン", name: name, class: class, formtarget: "blank", data: {confirm: メッセージ内容}
のconfirmの中身をテストしています

テストコードとしては

RSpec.feature "テスト", type: :feature do feature "feature" do scenario "メッセージの内容テスト" do      該当ページへ遷移する処理 click_on 'ボタン' expect(page.driver.browser.switch_to.alert.text).to eq "メッセージ内容" page.driver.browser.switch_to.alert.dismiss end end end

となっています

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

NoMethodError: undefined method `switch_to' for #<Capybara::RackTest::Driver:0x00007fba5814ef78>

該当のソースコード

上記に記載してあるものになります

試したこと

Rspec Capybaraで実際テストを書いて困ったシチュエーションの解消法【Rails】Selenium/RSpecでconfirmダイアログのテストをするcapybara で確認ダイアログを含む js をテストするといったサイトを参考にしましたがswitch_toが無いと言われてしまい、その先に進めません

switch_toの定義自体は存在していて
vendor/bundle/ruby/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rbのなかに

def switch_to @switch_to ||= WebDriver::TargetLocator.new(bridge) end

と書かれていました

ドキュメントを見てみると(見ている場所があっているか少し自信がない)Driverの中にもBrowserのなかにもswitch_toという記述が無いように思います

これ以上先には進めそうになく質問しました。

どのようにすれば確認できるか教えていただけると助かります。

ここに問題に対して試したことを記載してください。

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

各種バージョン

  • Rails 5.2.1
  • Ruby 2.5.1
  • RSpec 3.8.0
  • selenium-webdriver 3.14.0

補足

該当ファイルではrails_helperを呼び出しています
中身は

rails_helper.rb

1require 'spec_helper' 2require 'rspec/rails' 3require 'shoulda/matchers' 4require File.expand_path('../../config/environment', __FILE__) 5Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } 6ActiveRecord::Migration.maintain_test_schema! 7 8abort("The Rails environment is running in production mode!") if Rails.env.production? 9ENV['RAILS_ENV'] ||= 'test' 10RSpec.configure do |config| 11 config.fixture_path = "#{::Rails.root}/spec/fixtures" 12 13 config.use_transactional_fixtures = false 14 config.infer_spec_type_from_file_location! 15 16 config.filter_rails_from_backtrace! 17 config.include FactoryBot::Syntax::Methods 18end

と書いてあり

spec_helperには

require 'database_cleaner' require 'support/capybara' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'capybara/rspec' require 'capybara/rails' RSpec.configure do |config| config.include FactoryBot::Syntax::Methods config.before(:suite) do DatabaseCleaner.clean_with :truncation load Rails.root.join('db', 'seeds.rb') end config.before(:suite) do DatabaseCleaner.strategy = :transaction end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = true end config.mock_with :rspec do |mocks| mocks.verify_partial_doubles = true end config.shared_context_metadata_behavior = :apply_to_host_groups end

とあります。

capybaraの設定は

require 'capybara/rspec' require 'selenium-webdriver' Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome( chrome_options: { args: %w(headless disable-gpu window-size=1680,1050), }, ) ) end Capybara.javascript_driver = :selenium

となっています。

require 'capybara/rspec' require 'capybara/rails'

上記の2つの中身は触っていません。

引き続きよろしくお願いします。

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

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

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

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

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

guest

回答1

0

エラーメッセージからは、Capybaraにswitch_toはないと言われているようですね。
(エラーを出しているのがselenium-webdriverではなくCapybara側)
書かれているようにselenium-webdriverにはswitch_toは存在します。

NoMethodError:

undefined method `switch_to' for #<Capybara::RackTest::Driver:0x00007fba5814ef78>

設定なども補足いただけるともう少し詳しくコメントできるかもしれません。

投稿2018/11/09 06:52

oh_rusty_nail

総合スコア319

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

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

terataku

2018/11/09 11:27

ありがとうございます。 テストで利用している設定を追加させていただきました。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問