$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The basic architecture of Capybara
Search
Yuka Kato
November 03, 2019
Programming
0
810
The basic architecture of Capybara
Yuka Kato
November 03, 2019
Tweet
Share
More Decks by Yuka Kato
See All by Yuka Kato
Understanding DNS with ActionDispatch::HostAuthorization
yucao24hours
3
1.6k
Other Decks in Programming
See All in Programming
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.8k
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
9
1.1k
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
830
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
3
700
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
310
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
390
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
Microservices rules: What good looks like
cer
PRO
0
1.3k
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
110
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
460
愛される翻訳の秘訣
kishikawakatsumi
3
320
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Agile that works and the tools we love
rasmusluckow
331
21k
How GitHub (no longer) Works
holman
316
140k
We Have a Design System, Now What?
morganepeng
54
7.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Side Projects
sachag
455
43k
Balancing Empowerment & Direction
lara
5
800
Fireside Chat
paigeccino
41
3.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Building an army of robots
kneath
306
46k
Transcript
Capybara のしくみ Capybara のしくみ 裏側も⾒てみなイカ? 裏側も⾒てみなイカ? by @yucao24hours
ゆかお( ゆかお( ) is… ) is… 永和システムマネジメント所属、7 年⽬ よちよち.rb という初学者限定の
Ruby コミュニテ ィを主催している(していた) @yucao24hours @yucao24hours
ゆかお( ゆかお( ) is… ) is… テストが好き、テストコードが好き 趣味: 筋トレ、e スポーツ観戦
@yucao24hours @yucao24hours
この発表のきっかけ この発表のきっかけ お仕事中のとあるタスク
“Capybara を使った E2E テストで、 Headless Chrome を使って テストを実⾏できるようセットアップする”
というタスクに苦戦していた後輩
(Capybara の DSL を使ったテストコードは ちゃんと書ける)
設定をどう変えたら(書いたら)いいかわからず 困っている後輩に、 体系的に説明するための資料がほしかった。
「ネットから拾った設定をコピペしてきた、 よくわかんないけど動いてるからヨシ」 っていう⼈が少なくないような気配を感じた。
“ もう知ってるよ” という⽅もいらっしゃるかもしれませんが、 どうぞお付き合いください ( ご意⾒、ご指摘⼤歓迎です )
Capybara についておさらい Capybara についておさらい
こんなかんじのやつ書くよね こんなかんじのやつ書くよね test "creating a Post" do visit posts_url click_on
"New Post" fill_in "Title", with: @post.title fill_in "Content", with: @post.content click_on "Create Post" assert_text "Post was successfully created" click_on "Back" end
More about Capybara More about Capybara なぜE2E テストがたまに落ちるのか by @mtsmfm
https://speakerdeck.com/mtsmfm/how-do-e2e- tests-fail-randomly
さっきの” タスク” に⽴ち返る さっきの” タスク” に⽴ち返る “Capybara を使った E2E テストで、
Headless Chrome を使って テストを実⾏できるようセットアッ プする”
Headless Chrome? Headless Chrome?
Headless Chrome Headless Chrome ウェブブラウザのひとつである、「あの」 Chrome (の、ヘッドレスバージョン)のこと。
Browsers Browsers
Headless?? Headless?? ざっくり⾔うと、 GUI を持たないアーキテクチャのこと。 GUI があるものより実⾏速度が速い。
Capybara も、私たちがやっているのとおなじように ブラウザを介してアプリケーションを操作する!
では、Capybara はどうやって Headless Chrome ( ブラウザ) を操作している?
Drivers Drivers
Drivers Drivers ブラウザを操作するためのライブラリ (何も⾔っていない)
Drivers Drivers RackTest Selenium Apparition Cuprite …Or your own drivers
なんでこんないろいろあるの なんでこんないろいろあるの それぞれ特徴があって、 できることとできないことが異なる アプリケーションにあわせて選べるようになっている
たとえば… たとえば… RackTest は JS を使った処理の実⾏はできない 最近のアプリだとだいたい JS つかってるからあ んまり⾒ないかも
Selenium は JS を実⾏できる Apparition は Poltergeist という別のドライバと互 換性を保つようにして作られている
Capybara の設定次第では、 JS が必要ないテストケースでは、JS は実⾏できな いがより実⾏速度が速い RackTest を使う JS が必要なテストケースでは、JS
を実⾏可能な Selenium を使う みたいなカスタマイズもできる
さっきの” タスク” に⽴ち返る さっきの” タスク” に⽴ち返る “Capybara を使った E2E テストで、
Headless Chrome を使って テストを実⾏できるようセットアッ プする”
Capybara のドライバ設定例 Capybara のドライバ設定例 Capybara.register_driver :my_driver do |app| Capybara::Selenium::Driver.new(app, browser:
:chrome, desired_capabilities: Selenium::WebDriver::Remote::Capabiliti chrome_options: { args: %w(headless disable-gpu window-size=1680,1050), }, ) ) end Capybara.javascript_driver = :my_driver
という API を使って、 という名前をつけてドライバを定義し… Capybara.register_driver :my_driver do |app| Capybara::Selenium::Driver.new(app, browser:
:chrome, desired_capabilities: Selenium::WebDriver::Remote::Capabiliti chrome_options: { args: %w(headless disable-gpu window-size=1680,1050), }, ) ) end
その という名前のドライバを、 JS ⽤のドライバとして設定 Capybara.javascript_driver = :my_driver
Browsers Browsers Drivers Drivers
今⽇話したことのまとめ 今⽇話したことのまとめ Capybara でテストコードを動かすにあたっては、 ブラウザとドライバという要素の理解が重要である ブラウザにもドライバにもいろいろな種類があっ て、それぞれ特徴がある
詳細については、各ライブラリの説明を参照のこと https://github.com/teamcapybara/capybara https://github.com/rack-test/rack-test https://www.seleniumhq.org/projects/webdriver/ https://github.com/twalpole/apparition
お役に⽴てたなら嬉しいです
Fin. Fin.