Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
790
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.5k
Other Decks in Programming
See All in Programming
Android 16KBページサイズ対応をはじめからていねいに
mine2424
0
810
Gemini CLI のはじめ方
ttnyt8701
1
110
GPUを計算資源として使おう!
primenumber
1
300
MCPを使ってイベントソーシングのAIコーディングを効率化する / Streamlining Event Sourcing AI Coding with MCP
tomohisa
0
190
NEWT Backend Evolution
xpromx
1
170
抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking
shin1x1
1
890
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
130
PHPカンファレンス関西2025 基調講演
sugimotokei
6
1k
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
390
それ CLI フレームワークがなくてもできるよ / Building CLI Tools Without Frameworks
orgachem
PRO
13
3.3k
CIを整備してメンテナンスを生成AIに任せる
hazumirr
0
370
Vibe Codingの幻想を超えて-生成AIを現場で使えるようにするまでの泥臭い話.ai
fumiyakume
20
9.7k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
200k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Why Our Code Smells
bkeepers
PRO
337
57k
Designing for Performance
lara
610
69k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Designing for humans not robots
tammielis
253
25k
A Tale of Four Properties
chriscoyier
160
23k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Code Reviewing Like a Champion
maltzj
524
40k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
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.