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

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

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

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

Ruby

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

RSpec

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

Ruby on Rails

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

Q&A

解決済

1回答

1787閲覧

RSpecの要素の取得

GonshibaN

総合スコア2

Capybara

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

Ruby

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

RSpec

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/10 15:14

編集2020/06/13 18:38

実現したいこと
Rspec+copybaraにて
チェックボックスにチェックがされた物を一括で削除できる機能をテストを書きたいです。
しかしチェックボックス要素を取得しようとするとエラーが出てしまいます。
下記の画像の選択欄がチェックボックスです。

イメージ説明

チェックボックス自体は非表示になっており、擬似要素::beforeでクリックできる仕様です。

当該部分のHTML
countは繰り返し処理の際、各チェックボックスに繰り返し分、個別のidを与えたかったので付けてあります。できればこれでテストも取得したい

<td> <%= f.check_box :content_ids, {type: 'checkbox', class: 'checkbox-select', id: "checkbox#{@count}", multiple: true}, content.id %> <%= f.label :'', for: "checkbox#{@count}",class: 'select-label', id: "select_delete_label#{@count}" %> </td>

CSS

$color: #6C757D; /* Red */ .select-label { cursor: pointer; &:before{ display: inline-block; content: "+"; margin: 0 10px 0 0; width: 35px; height: 35px; border: 3px solid $color; border-radius: 100%; vertical-align: middle; color: $color; font-size: 30px; text-align: center; font-weight: 700; line-height: 0.8em; transition: transform 0.2s ease-in-out; } } .checkbox-select:checked + .select-label:before{ background: $color; color: #fff; transform:rotate(135deg); transform-origin: center center; } .checkbox-select { visibility: hidden; } .select_submit{ overflow: hidden; position: relative; left: -1000px; }

要素取得の際のエラー

Failure/Error: find('.select-label:before').click Capybara::ElementNotFound: Unable to find xxxxxxx

とエラーが出てしまいます。

試したのは、非表示要素も取得できる

visible: false

は試しました。

お力添えを頂きたいです。

質問力が足らず、分かりづらい部分があると思うので、そこはガンガン突っ込んで頂けると嬉しいです。
よろしくお願いします。

##解決方法

RSpec.describe "コンテンツ管理機能", type: :system do let(:user_a) {FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com')} let!(:content_a) {FactoryBot.create(:content, name: '最初のコンテンツ', url: '最初のurl', user: user_a)} describe "選択削除機能" do let( :login_user ) { user_a } before do visit contents_path find('#select_delete_label1').click find('.delete').click page.driver.browser.switch_to.alert.accept end context "選択して削除した時" do it "正常に削除される" do expect(page).to have_selector '.alert-success', text: 'ブックマークを削除しました' end end end

これで解決できました。
ご回答いただいた方に感謝です!

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

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

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

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

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

guest

回答1

0

ベストアンサー

クリックしているのはラベル要素だと思います。

投稿2020/06/13 00:20

asm

総合スコア15149

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

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

GonshibaN

2020/06/13 18:31

お答えいただき本当に感謝いたします! 無事にこのテストは完了できました。 一覧ページに飛ぶ visit contents_path ラベルにidを付けてクリック find('#select_delete_label1').click デリートボタン(SVG)をクリック find('.delete').click 確認画面(モーダル)で削除を確定 page.driver.browser.switch_to.alert.accept この流れでit評価まで行けました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問