Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Selenium あるある
Search
seya
May 30, 2018
Programming
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Selenium あるある
seya
May 30, 2018
More Decks by seya
See All by seya
継続的な評価基準と評価の実行の仕方をアップデートするワークフロー
kazuyaseki
2
500
複数の LLM モデルを扱う上で直面した辛みまとめ
kazuyaseki
3
2.6k
エンジニアにオススメの Figma 活用
kazuyaseki
16
15k
なぜ私はコードをデザインに使いたいのか
kazuyaseki
9
3.8k
フロントエンド開発のための Figma
kazuyaseki
20
27k
PWAに取り組む前に知っておきたい SPAとSEO
kazuyaseki
10
6.9k
State of SEO for SPA 2018
kazuyaseki
8
5.5k
Vue コンポーネント実装パターン
kazuyaseki
16
4.1k
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
330
Performance Optimization With LLMs
xleitix
0
180
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
ChromeでローカルLLM
ryu1013
0
160
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.7k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
JIS keyboard support in Omarchy
lef237
0
150
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
230
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
360
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
820
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
34k
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
4
1.4k
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
Darren the Foodie - Storyboard
khoart
PRO
4
4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
580
Done Done
chrislema
187
17k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Product Roadmaps are Hard
iamctodd
55
13k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
870
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
640
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Transcript
Selenium 失敗あるある @D‑Cube 【自動化】ワーストプラクティス ~まずはやってみる~
自己紹介
E2E自動化、やってますか?
私はやったことがあります
1ヶ月半かけてSeleniumの勉強 + 設計と実装 を経て
ついに完成!!!
しかし…
ものの数ヶ月で使われなくなり、私が初めて 作った自動テストスイートはゴミと化しまし た。
本日は当時を振り返って失敗の原因と そこから得られる教訓を語ります。
原因1. 信頼性のないテスト
Seleniumのテストは "タイミング次第" で落 ちる。
前提としてSeleniumでテストを書く際には様々な状況でDOMを選択す る必要があります。 この時問題になるのが、まだ存在していないDOMを選択しようとしてテ ストが失敗することで、これがまた結構な頻度で起こる。
これを防ぐためには、起きる可能性がある部分(大抵はページ遷移後の タイミング)にそのDOMがマウントするまで待つような処理を挟む browser.waitUntil( () => browser.isExisting(".search-field"); );
しかし疲れてきた私は…
browser.pause(300);
それでも…
None
↓ 私
結論 信頼性のないテストはゴミ
教訓 ページロードや非同期処理を待つことが手軽にできる Cypressなどのツールを検討してみよう。
原因2. マルチブラウザ対応を頑張ってしまう
対応しようとしたブラウザ
EdgeのDriverで click が動作しない Excpetion "org.openqa.selenium.WebDriverException: Element is obscured "
clickイベントを注入するJSでwrapすること によって無事解決 browser.click = selector => browser.selectorExecute(selector, element => element[0].click());
FirefoxでActionクラスが存在しない 要するにDrag & Dropとかができない。
Drag & Dropイベントを注入するJSで(ry browser.execute(function (selectorDrag, selectorDrop) { // function for
triggering mouse events var fireMouseEvent = function (type, elem, centerX, centerY var evt = document.createEvent('MouseEvents'); evt.initMouseEvent(type, true, true, window, 1, 1, 1, centerX elem.dispatchEvent(evt); }; var elemDrag = document.querySelector(selectorDrag); var elemDrop = document.querySelector(selectorDrop); if (!elemDrag || !elemDrop) return false; var pos = elemDrag.getBoundingClientRect(); var center1X = Math.floor((pos.left + pos.right) / 2); ・ ・ ・
信じられるのはChromeだけ…
教訓 マルチブラウザテストで見たい観点は何かを考えよう。 違うブラウザでJSの挙動が違うということは最近ではあまりなくなっ た。自動テストは一ブラウザだけで、ブラウザ間の差異を見るのはシナ リオテストを手動で見る、みたいなキリであれば現実的かもしれない。
原因3. メンテナンスコストをなめてた
メンテナンスはとても大変 テストケースのアップデート テストコードのアップデート selectorが変わった時壊れまくる… 変更の影響範囲をちゃんと連携しないクソ開発者(私)
業務にちゃんと組み込ませることを最初から意識する。 経験ある人がいないのであれば、スモールスタートで始めるのでも価値 があると思う。 (よくいじられるところ1ページ選んで、そこだけ導入するとか) 慣れてきてハマりそうだと確信したら対象範囲を増やすとか。
あと E2Eの自動化はとても片手間でできるものでは ない
教訓 優秀なテストエンジニアを雇おう!
ご静聴ありがとうございました。