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
SelenideよるDSL風E2Eテスト基盤開発の実例/Example_of_E2E_Auto...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
SHIMANE, Yoshikazu
March 07, 2017
Programming
1.1k
0
Share
SelenideよるDSL風E2Eテスト基盤開発の実例/Example_of_E2E_Automation_Test_Architecture_By_Selenide
2017年3月7日 Test Engineers Meetup #2
SelenideによるDSL風E2Eテスト基盤開発の実例
SHIMANE, Yoshikazu
March 07, 2017
More Decks by SHIMANE, Yoshikazu
See All by SHIMANE, Yoshikazu
ソフトウェア開発温故知新 古典で紐解く、ソフトウェア開発の課題 / Software_Development:Learning_from_the_Past
shimashima35
0
74
入り口から考えるソフトウェアテストエンジニアのキャリア / Thinking_About_a_Software_Test Engineer's_Career_from_the_Starting_Point
shimashima35
0
1.8k
テスト技法を使ったテストケースの表現方法/How to express test cases using test techniques
shimashima35
0
1.4k
VSTePのテスト観点出しで失敗した事例についての紹介/Failure case of test viewpoint derivation
shimashima35
0
820
組織横断部門におけるバグ数可視化の全社導入の事例/Example_of_company-wide_bug_number_visualization in_cross-organizational_departments
shimashima35
1
400
JaSST Tokyo実行委員のお仕事/Job of JaSST executive committee
shimashima35
0
890
What is “Quality” ?
shimashima35
0
1.1k
品質"実質"無料キャンペーン始めます / Start_quality_real_free_campaign
shimashima35
2
5.8k
明日から始めるSelenideによるブラウザテスト 2018年版/ Browser_test_by_selenide_to_start_from_tomorrow_in_2018
shimashima35
1
910
Other Decks in Programming
See All in Programming
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
7
1.2k
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
120
へんな働き方
yusukebe
6
2.9k
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
190
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
140
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
2.8k
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
400
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
2
410
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
340
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.3k
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
120
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
220
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
170
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
170
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
340
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
A Soul's Torment
seathinner
5
2.6k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
120
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
510
The Spectacular Lies of Maps
axbom
PRO
1
680
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
450
Transcript
SelenideによるDSL風E2Eテスト基 盤開発の実例 アカウンティング・サース・ジャパン 島根 義和 @shimashima35 https://srad.jp/~shimashima
はじめに • 社内で開発したWebDriver(Selenide)を使ったE2Eテスト基盤の実例を紹介します。 • 基本的にJavaが前提ですが、静的型付けのメリット以外は他言語でも利用可能で す。
注意 • 基本的にQiitaで公開した内容と同じです。 ◦ http://qiita.com/shimashima35/items/6d39be9a4fea05dcc84f
Selenideとは? • JavaのSelenium WebDrvierラッパーライブラリ。 • http://selenide.org/ • WebDriverの実装を抽象化し、UI Testに特化したAPIを提供している。 •
読みやすいAPI。 • IDEによるサポートを意識した作り。
基盤開発の目的 • 高い保守性 • 高い生産性 • 可能であれば仕様策定者が自分でテストをかけるようにする
階層化Page Object Pattern導入 • 一般的なPage Object Patternを拡張 ◦ BasePage ▪
抽象クラス ▪ セレクタのみが記述される ▪ WebDriver/Selenide API依存 ▪ メソッドシグネチャにも Selenideの型が現れる ◦ Page ▪ 具象クラス ▪ 抽象化した画面操作 APIを提供する層 ▪ メソッドシグネチャは Java標準APIの型のみ
階層化Page Object Pattern導入 サンプル
Selenium/Selenideの直接操作の排除 • テストシナリオでSelenium/Selenideの実装を隠蔽する。 ◦ シナリオの注力する ◦ 実装隠蔽による変更耐性向上 ◦ 特別なAPI学習の必要性を排除
全面的な日本語メソッド化 • 税務・会計・給与を対象しているため ◦ 一般的なWeb画面に比べて入力項目が多数 ◦ 似たような名前で且つ業務的に特殊な用語が使われることが多い ◦ 日本語化することで画面の項目とメソッド名とのギャップを埋める •
非プログラマでもテストをかけるように ◦ 心理的障壁をさげる
全面的な日本語メソッド化 サンプル
疑似Builder Patternによるデータ登録 • ユーザ登録などで入力項目が多数になる • シナリオで記述は大変 • 共通メソッド化を行うにしても引数が多い、また入力しなくても良い項目の存在 • Builder
Patternを導入することでわかりやすくする
疑似Builder Patternによるデータ登録 サンプル
Mix-inによる画面共通項目の一元化 • 画面単位の処理はPage Objectで対応 • 画面横断的な処理はどうするか? • Mix-inで対応 • Java8
interface の default method で実現
None
Mix-inによる画面共通項目の一元化 サンプル
画面要素の細かいObject化 • 画面上の項目数が多い & コンテキスト(配置場所)違いで同じ名称が存在している • コンテキストをすべてClass化 (Page Objectのinner class)
• コンテキストへのアクセスはメソッド経由
None
None
疑似的なDSLのために、戻り値をObject化 • Selenideのように、IDEの力を借りるため • 戻り値をObjectにすることでIDEの補完機能が使える
デモ
終わりに • テスト自動化は大変ですが、様々な手法を使うことで苦労を軽減することができま す。 • IDEの力も、可能なかぎり借りましょう。 • 自動化はコストがかかるので、頼り過ぎには注意を。 • 目的をはっきりさせた上で使いましょう。
ご静聴ありがとうございました