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
830
0
Share
The basic architecture of Capybara
Yuka Kato
November 03, 2019
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
AIエージェントで業務改善してみた
taku271
0
540
Going Multiplatform with Your Android App (Android Makers 2026)
zsmb
2
450
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
210
GoogleCloudとterraform完全に理解した
terisuke
1
160
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
170
AI-DLC Deep Dive
yuukiyo
9
4.8k
エラー処理の温故知新 / history of error handling technic
ryotanakaya
6
1.5k
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
290
PHPer、Cloudflare に引っ越す
suguruooki
1
110
アーキテクチャモダナイゼーションとは何か
nwiizo
19
5.4k
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
360
의존성 주입과 모듈화
fornewid
0
150
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
300
sira's awesome portfolio website redesign presentation
elsirapls
0
220
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Odyssey Design
rkendrick25
PRO
2
580
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Faster Mobile Websites
deanohume
310
31k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
140
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
340
Heart Work Chapter 1 - Part 1
lfama
PRO
6
35k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
200
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
100
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.