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

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

ただいまの
回答率

87.96%

Rspecでcssを見つけてくることができない

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,102

score 21

下記内容のテストが実施できません
find(".relation-btn_#{other_user.id}").click_button 'フォロー解除'
上記の部分がエラーのようです。

spec/integration/relationship_spec.rb

require 'rails_helper'

describe 'フォロー機能', type: :system do
  let!(:user){FactoryBot.create(:user,name:'一般ユーザー')}
  let!(:other_user){FactoryBot.create(:user,name:'その他ユーザー')}

  let(:active_relationship) do
    user.active_relationships.create(
      follower_id: user.id, followed_id: other_user.id
    )
  end
  let(:passive_relationship) do
    user.passive_relationships.create(
      follower_id: other_user.id, followed_id: user.id
    )
  end
  context 'フォロー時' do

    it 'フォロワー一覧に名前がある' do
      active_relationship
      visit following_user_path(user)
        expect do
          find(".relation-btn_#{other_user.id}").click_button 'フォロー解除'
          sleep 2
        end.to change(Relationship, :count).by(-1)
      end
  end
end


spec/integration/relationship_spec.rb

FactoryBot.define do
  factory :relationship do
    follower_id { 1 }
    followed_id { 1 }
  end
end

エラー

  1) フォロー機能 フォロー時 フォロワー一覧に名前がある
     Failure/Error: find(".relation-btn_#{other_user.id}").click_button 'フォロー解除'

     Capybara::ElementNotFound:
       Unable to find css ".relation-btn_4"



     # ./spec/integration/relationship_spec.rb:42:in `block (4 levels) in <top (required)>'
     # ./spec/integration/relationship_spec.rb:41:in `block (3 levels) in <top (required)>'

試したこと

save_and_open_pageを実行した際に、すべての内容が読み込まれていない気がして、
following_user_path(user)の部分のviewに記述を加えて見ました

app/views/users/show_follow.html.slim

= render 'users/profile', user:@user

= render 'users/tab', user:@user

div class="relation-btn_4"
  = render @users


すると、エラー内容が以下に変わりました。

  1) フォロー機能 フォロー時 フォロワー一覧に名前がある
     Failure/Error: find(".relation-btn_#{other_user.id}").click_button 'フォロー解除'

     Capybara::ElementNotFound:
       Unable to find button "フォロー解除" that is not disabled within #<Capybara::Node::Element tag="div" path="/html/body/div[1]/div[2]">



     # ./spec/integration/relationship_spec.rb:42:in `block (4 levels) in <top (required)>'
     # ./spec/integration/relationship_spec.rb:41:in `block (3 levels) in <top (required)>'

おそらく、renderの部分が読み込まれる前に、テストが実施されているのかと思うのですが、
これはそういうものなのでしょうか。
それとも、何か設定を変えることで、全て読み込まれた状態でテストができるのでしょうか。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

こんにちは。

save_and_open_pageを実行した際に、すべての内容が読み込まれていない気がして、

とありますが、この処理が何かは、上記だけでは分からないので、推測だけになります。
そのほかの部分に関しても推測になりますが...。
(公開できる範囲で提示していただけるといいかなあと思います)

まずは、Integratonテストは、ヘッドレス(ブラウザを立ち上げない形)で実施していますか?
ブラウザが立ち上がるモードで、Capybaraの処理が想定どおりのブラウザ操作をしているか確認されましたでしょうか?

Ajaxでの非同期処理で、あとから部分的に読み込まれる要素に対しては、タイミングで要素が読み込めない場合があります。Ajaxでの読み込みが完了するのを待って、要素を抽出ということをしたりします。

また、読み込みをしたタイミングでも、要素がDisableであったり、非表示(display: none;)だったりすると、やはりCapybaraでの要素抽出がうまくいかなかったりします。

全て表示された段階んHTMLを確認し、CSSセレクタ上問題がなく、非表示だったりdisableでなければ、タイミングの関係かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

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

関連した質問

同じタグがついた質問を見る