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
Selenium あるある
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
460
複数の LLM モデルを扱う上で直面した辛みまとめ
kazuyaseki
3
2.5k
エンジニアにオススメの Figma 活用
kazuyaseki
16
15k
なぜ私はコードをデザインに使いたいのか
kazuyaseki
9
3.8k
フロントエンド開発のための Figma
kazuyaseki
20
26k
PWAに取り組む前に知っておきたい SPAとSEO
kazuyaseki
10
4.6k
State of SEO for SPA 2018
kazuyaseki
8
5.4k
Vue コンポーネント実装パターン
kazuyaseki
16
4.1k
Other Decks in Programming
See All in Programming
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
280
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
270
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
210
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.4k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
350
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.3k
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
200
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
120
dRuby over BLE
makicamel
2
380
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
260
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
110
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
860
Producing Creativity
orderedlist
PRO
348
40k
KATA
mclloyd
PRO
35
15k
Building the Perfect Custom Keyboard
takai
2
800
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
620
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
Rails Girls Zürich Keynote
gr2m
96
14k
Why Our Code Smells
bkeepers
PRO
340
58k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
600
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
240
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の自動化はとても片手間でできるものでは ない
教訓 優秀なテストエンジニアを雇おう!
ご静聴ありがとうございました。