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

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

ただいまの
回答率

89.97%

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 902

terataku

score 4

 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を呼び出しています
中身は

require 'spec_helper'
require 'rspec/rails'
require 'shoulda/matchers'
require File.expand_path('../../config/environment', __FILE__)
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!

abort("The Rails environment is running in production mode!") if Rails.env.production?
ENV['RAILS_ENV'] ||= 'test'
RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.use_transactional_fixtures = false
  config.infer_spec_type_from_file_location!

  config.filter_rails_from_backtrace!
  config.include FactoryBot::Syntax::Methods
end

と書いてあり

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つの中身は触っていません。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 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 20:27

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

    よろしくお願いいたします。

    キャンセル

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる