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
ぼくのかんがえたさいきょうのE2Eフレームワーク with CodeceptJS
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tsuemura
June 26, 2019
Technology
250
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ぼくのかんがえたさいきょうのE2Eフレームワーク with CodeceptJS
未発表作品
tsuemura
June 26, 2019
More Decks by tsuemura
See All by tsuemura
AIに気持ちよく働いていただく技術.pdf
tsuemura
0
52
Breaking your system
tsuemura
0
1.5k
自分の軸足を見つけろ
tsuemura
3
1.7k
事業継続を支える自動テストの考え方
tsuemura
0
1.6k
テスト自動化ことはじめ(202412_オープンロジ版) / Enter the testing automation (2024 Dec, for OPENLOGI)
tsuemura
0
1.8k
E2Eテストのシナリオと抽象化の粒度の話.pdf
tsuemura
6
1.4k
テスト自動化ことはじめ
tsuemura
3
670
ようこそ、ソフトウェアテストの世界へ!
tsuemura
1
190
リーダブルなE2Eテストコードのための3つのC
tsuemura
7
1.3k
Other Decks in Technology
See All in Technology
Claude Code本って、 読む必要あるの?
oikon48
2
470
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
320
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
0
170
AI に書かせたその API、 “信頼” できますか?
nagix
0
110
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
190
AI de Idea
kawaguti
PRO
2
110
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
2
1.6k
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
2
1k
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
HHKBエバンジェリストになる方法
941
0
110
あるけみー式LTスライド作成術
alchemy1115
1
210
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Speed Design
sergeychernyshev
33
2.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Site-Speed That Sticks
csswizardry
13
1.5k
It's Worth the Effort
3n
188
29k
Designing Powerful Visuals for Engaging Learning
tmiket
1
550
Making Projects Easy
brettharned
120
6.8k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
520
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Transcript
ぼくのかんがえた ぼくのかんがえた ぼくのかんがえた ぼくのかんがえた ぼくのかんがえた ぼくのかんがえた さいきょうのE2E フレームワーク さいきょうのE2E フレームワーク
さいきょうのE2E フレームワーク さいきょうのE2E フレームワーク さいきょうのE2E フレームワーク さいきょうのE2E フレームワーク with CodeceptJS with CodeceptJS with CodeceptJS with CodeceptJS with CodeceptJS with CodeceptJS 末村 拓也 @ 株式会社オープンロジ 末村 拓也 @ 株式会社オープンロジ 末村 拓也 @ 株式会社オープンロジ 末村 拓也 @ 株式会社オープンロジ 末村 拓也 @ 株式会社オープンロジ 末村 拓也 @ 株式会社オープンロジ 1 / 25
おまえ誰? おまえ誰? おまえ誰? おまえ誰? おまえ誰? おまえ誰? 末村 拓也( すえむら たくや)
末村 拓也( すえむら たくや) 末村 拓也( すえむら たくや) 末村 拓也( すえむら たくや) 末村 拓也( すえむら たくや) 末村 拓也( すえむら たくや) 物流スタートアップ OPENLOGI で1 年半ほどQA エンジニアを 物流スタートアップ OPENLOGI で1 年半ほどQA エンジニアを 物流スタートアップ OPENLOGI で1 年半ほどQA エンジニアを 物流スタートアップ OPENLOGI で1 年半ほどQA エンジニアを 物流スタートアップ OPENLOGI で1 年半ほどQA エンジニアを 物流スタートアップ OPENLOGI で1 年半ほどQA エンジニアを しています しています しています しています しています しています 新卒から5 年ぐらい倉庫でフォークリフト乗り回す生活→いろ 新卒から5 年ぐらい倉庫でフォークリフト乗り回す生活→いろ 新卒から5 年ぐらい倉庫でフォークリフト乗り回す生活→いろ 新卒から5 年ぐらい倉庫でフォークリフト乗り回す生活→いろ 新卒から5 年ぐらい倉庫でフォークリフト乗り回す生活→いろ 新卒から5 年ぐらい倉庫でフォークリフト乗り回す生活→いろ いろあってPHPer に→いまはQA エンジニアやってる いろあってPHPer に→いまはQA エンジニアやってる いろあってPHPer に→いまはQA エンジニアやってる いろあってPHPer に→いまはQA エンジニアやってる いろあってPHPer に→いまはQA エンジニアやってる いろあってPHPer に→いまはQA エンジニアやってる 2 / 25
おまえ誰? おまえ誰? おまえ誰? おまえ誰? おまえ誰? おまえ誰? 神龍に自動テストを作ってもらう記事で一瞬有名人になった 神龍に自動テストを作ってもらう記事で一瞬有名人になった 神龍に自動テストを作ってもらう記事で一瞬有名人になった 神龍に自動テストを作ってもらう記事で一瞬有名人になった
神龍に自動テストを作ってもらう記事で一瞬有名人になった 神龍に自動テストを作ってもらう記事で一瞬有名人になった https://qiita.com/tsuemura/items/56ba9942565963858d8f https://qiita.com/tsuemura/items/56ba9942565963858d8f https://qiita.com/tsuemura/items/56ba9942565963858d8f https://qiita.com/tsuemura/items/56ba9942565963858d8f https://qiita.com/tsuemura/items/56ba9942565963858d8f https://qiita.com/tsuemura/items/56ba9942565963858d8f 3 / 25
マイクの存在を忘れがちなので、 マイクの存在を忘れがちなので、 マイクの存在を忘れがちなので、 マイクの存在を忘れがちなので、 マイクの存在を忘れがちなので、 マイクの存在を忘れがちなので、 マイク持つの忘れたらLT 中でもいいので マイク持つの忘れたらLT 中でもいいので
マイク持つの忘れたらLT 中でもいいので マイク持つの忘れたらLT 中でもいいので マイク持つの忘れたらLT 中でもいいので マイク持つの忘れたらLT 中でもいいので 指摘してください 指摘してください 指摘してください 指摘してください 指摘してください 指摘してください 4 / 25
何話すの? 何話すの? 何話すの? 何話すの? 何話すの? 何話すの? ぼくのかんがえたさいきょうのE2E フレームワークについて ぼくのかんがえたさいきょうのE2E フレームワークについて
ぼくのかんがえたさいきょうのE2E フレームワークについて ぼくのかんがえたさいきょうのE2E フレームワークについて ぼくのかんがえたさいきょうのE2E フレームワークについて ぼくのかんがえたさいきょうのE2E フレームワークについて 話します 話します 話します 話します 話します 話します 現時点で一番理想に近いCodeceptJS というフレームワークに 現時点で一番理想に近いCodeceptJS というフレームワークに 現時点で一番理想に近いCodeceptJS というフレームワークに 現時点で一番理想に近いCodeceptJS というフレームワークに 現時点で一番理想に近いCodeceptJS というフレームワークに 現時点で一番理想に近いCodeceptJS というフレームワークに ついても話します ついても話します ついても話します ついても話します ついても話します ついても話します 5 / 25
CodeceptJS とは? CodeceptJS とは? CodeceptJS とは? CodeceptJS とは? CodeceptJS とは?
CodeceptJS とは? NodeJS 製のE2E テストフレームワーク NodeJS 製のE2E テストフレームワーク NodeJS 製のE2E テストフレームワーク NodeJS 製のE2E テストフレームワーク NodeJS 製のE2E テストフレームワーク NodeJS 製のE2E テストフレームワーク OSS OSS OSS OSS OSS OSS WebDriver やPuppeteer 、Appium などのブラウザ自動操作フ WebDriver やPuppeteer 、Appium などのブラウザ自動操作フ WebDriver やPuppeteer 、Appium などのブラウザ自動操作フ WebDriver やPuppeteer 、Appium などのブラウザ自動操作フ WebDriver やPuppeteer 、Appium などのブラウザ自動操作フ WebDriver やPuppeteer 、Appium などのブラウザ自動操作フ レームワークをラップして、単一のAPI で操作できる レームワークをラップして、単一のAPI で操作できる レームワークをラップして、単一のAPI で操作できる レームワークをラップして、単一のAPI で操作できる レームワークをラップして、単一のAPI で操作できる レームワークをラップして、単一のAPI で操作できる 受け入れテスト(UAT )をそのままテストコードにしたっぽい 受け入れテスト(UAT )をそのままテストコードにしたっぽい 受け入れテスト(UAT )をそのままテストコードにしたっぽい 受け入れテスト(UAT )をそのままテストコードにしたっぽい 受け入れテスト(UAT )をそのままテストコードにしたっぽい 受け入れテスト(UAT )をそのままテストコードにしたっぽい 雰囲気でテストが書ける 雰囲気でテストが書ける 雰囲気でテストが書ける 雰囲気でテストが書ける 雰囲気でテストが書ける 雰囲気でテストが書ける 6 / 25
既存のテスティングフレームワークに 既存のテスティングフレームワークに 既存のテスティングフレームワークに 既存のテスティングフレームワークに 既存のテスティングフレームワークに 既存のテスティングフレームワークに 感じている不満 感じている不満 感じている不満 感じている不満
感じている不満 感じている不満 意味のないロケータ 意味のないロケータ 意味のないロケータ 意味のないロケータ 意味のないロケータ 意味のないロケータ 安定しない 安定しない 安定しない 安定しない 安定しない 安定しない メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い 7 / 25
意味のないロケータ 意味のないロケータ 意味のないロケータ 意味のないロケータ 意味のないロケータ 意味のないロケータ 8 / 25
意味のあるロケータを使いたい 意味のあるロケータを使いたい 意味のあるロケータを使いたい 意味のあるロケータを使いたい 意味のあるロケータを使いたい 意味のあるロケータを使いたい // こう書かざるを得ない // こう書かざるを得ない
$ $( ('button.btn-primary[type=submit]' 'button.btn-primary[type=submit]') ). .click click( () ) // 本当はこう書きたい // 本当はこう書きたい $ $( (' 送信' ' 送信') ). .click click( () ) クラスとかXPath は要素へのパスでしかなく、テスト的には無意 クラスとかXPath は要素へのパスでしかなく、テスト的には無意 クラスとかXPath は要素へのパスでしかなく、テスト的には無意 クラスとかXPath は要素へのパスでしかなく、テスト的には無意 クラスとかXPath は要素へのパスでしかなく、テスト的には無意 クラスとかXPath は要素へのパスでしかなく、テスト的には無意 味 味 味 味 味 味 ロケータ自身にきちんと意味をもたせたい ロケータ自身にきちんと意味をもたせたい ロケータ自身にきちんと意味をもたせたい ロケータ自身にきちんと意味をもたせたい ロケータ自身にきちんと意味をもたせたい ロケータ自身にきちんと意味をもたせたい 9 / 25
どうしたいのか どうしたいのか どうしたいのか どうしたいのか どうしたいのか どうしたいのか 文言でロケートしたい 文言でロケートしたい 文言でロケートしたい 文言でロケートしたい
文言でロケートしたい 文言でロケートしたい click(' 送信') click(' 送信') click(' 送信') click(' 送信') click(' 送信') click(' 送信') で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ ックされる ックされる ックされる ックされる ックされる ックされる byLinkText() byLinkText() byLinkText() byLinkText() byLinkText() byLinkText() に近いアプローチだが、リンク以外でもそう に近いアプローチだが、リンク以外でもそう に近いアプローチだが、リンク以外でもそう に近いアプローチだが、リンク以外でもそう に近いアプローチだが、リンク以外でもそう に近いアプローチだが、リンク以外でもそう したい したい したい したい したい したい テキストエリアは対応するラベルやプレースホルダでロケー テキストエリアは対応するラベルやプレースホルダでロケー テキストエリアは対応するラベルやプレースホルダでロケー テキストエリアは対応するラベルやプレースホルダでロケー テキストエリアは対応するラベルやプレースホルダでロケー テキストエリアは対応するラベルやプレースホルダでロケー トしたい トしたい トしたい トしたい トしたい トしたい fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') で で で で で で名前 名前 名前 名前 名前 名前というラベルのつい というラベルのつい というラベルのつい というラベルのつい というラベルのつい というラベルのつい たinput に たinput に たinput に たinput に たinput に たinput にすえむら すえむら すえむら すえむら すえむら すえむらが入力される が入力される が入力される が入力される が入力される が入力される 10 / 25
CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか
CodeceptJS でどこまでできてるか click(' 送信') click(' 送信') click(' 送信') click(' 送信') click(' 送信') click(' 送信') で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ で送信というテキストを持つボタンがクリ ックされる ックされる ックされる ックされる ックされる ックされる fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') fillField(' 名前', ' すえむら') で で で で で で名前 名前 名前 名前 名前 名前というラベルのつい というラベルのつい というラベルのつい というラベルのつい というラベルのつい というラベルのつい たinput に たinput に たinput に たinput に たinput に たinput にすえむら すえむら すえむら すえむら すえむら すえむらが入力される が入力される が入力される が入力される が入力される が入力される 11 / 25
実装 実装 実装 実装 実装 実装 ndClickable (クリック可能な要素の探索)の実装 ndClickable (クリック可能な要素の探索)の実装
ndClickable (クリック可能な要素の探索)の実装 ndClickable (クリック可能な要素の探索)の実装 ndClickable (クリック可能な要素の探索)の実装 ndClickable (クリック可能な要素の探索)の実装 リテラルから探索するために、XPath の合成による泥臭いことを リテラルから探索するために、XPath の合成による泥臭いことを リテラルから探索するために、XPath の合成による泥臭いことを リテラルから探索するために、XPath の合成による泥臭いことを リテラルから探索するために、XPath の合成による泥臭いことを リテラルから探索するために、XPath の合成による泥臭いことを やっている やっている やっている やっている やっている やっている Locator Locator. .clickable clickable = = { { narrow narrow: : literal literal => => xpathLocator xpathLocator. .combine combine( ([ [ `.//a[normalize-space(.)= `.//a[normalize-space(.)=${ ${literal literal} }]` ]`, , `.//button[normalize-space(.)= `.//button[normalize-space(.)=${ ${literal literal} }]` ]`, , `.//a/img[normalize-space(@alt)= `.//a/img[normalize-space(@alt)=${ ${literal literal} }]/ancestor::a` ]/ancestor::a`, , `.//input[./@type = 'submit' or ./@type = 'image' or ./@type = `.//input[./@type = 'submit' or ./@type = 'image' or ./@type = 'button'][normalize-space(@value)= 'button'][normalize-space(@value)=${ ${literal literal} }]` ]`, , ] ]) ), , 12 / 25
夢 夢 夢 夢 夢 夢 画像も画像認識でセレクトできると最高だよね 画像も画像認識でセレクトできると最高だよね 画像も画像認識でセレクトできると最高だよね 画像も画像認識でセレクトできると最高だよね
画像も画像認識でセレクトできると最高だよね 画像も画像認識でセレクトできると最高だよね click(' ゴリラ') click(' ゴリラ') click(' ゴリラ') click(' ゴリラ') click(' ゴリラ') click(' ゴリラ') でゴリラの画像をクリックしてくれるみ でゴリラの画像をクリックしてくれるみ でゴリラの画像をクリックしてくれるみ でゴリラの画像をクリックしてくれるみ でゴリラの画像をクリックしてくれるみ でゴリラの画像をクリックしてくれるみ たいな未来が欲しい たいな未来が欲しい たいな未来が欲しい たいな未来が欲しい たいな未来が欲しい たいな未来が欲しい AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね 文言でのセレクトがもうちょっと賢いといいね 文言でのセレクトがもうちょっと賢いといいね 文言でのセレクトがもうちょっと賢いといいね 文言でのセレクトがもうちょっと賢いといいね 文言でのセレクトがもうちょっと賢いといいね 文言でのセレクトがもうちょっと賢いといいね clickable の対象はa, button, input, label だけなので、div と clickable の対象はa, button, input, label だけなので、div と clickable の対象はa, button, input, label だけなので、div と clickable の対象はa, button, input, label だけなので、div と clickable の対象はa, button, input, label だけなので、div と clickable の対象はa, button, input, label だけなので、div と かspan とかはクリックしてくれない かspan とかはクリックしてくれない かspan とかはクリックしてくれない かspan とかはクリックしてくれない かspan とかはクリックしてくれない かspan とかはクリックしてくれない AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね AI とかでいいかんじにしてくれるといいね 13 / 25
安定しない(Flaky) テスト 安定しない(Flaky) テスト 安定しない(Flaky) テスト 安定しない(Flaky) テスト 安定しない(Flaky) テスト
安定しない(Flaky) テスト 14 / 25
安定性が悪い(Flaky) 安定性が悪い(Flaky) 安定性が悪い(Flaky) 安定性が悪い(Flaky) 安定性が悪い(Flaky) 安定性が悪い(Flaky) DOM 的には存在するが、他の要素の下に隠れてたりして操作 DOM 的には存在するが、他の要素の下に隠れてたりして操作
DOM 的には存在するが、他の要素の下に隠れてたりして操作 DOM 的には存在するが、他の要素の下に隠れてたりして操作 DOM 的には存在するが、他の要素の下に隠れてたりして操作 DOM 的には存在するが、他の要素の下に隠れてたりして操作 できない要素との戦い できない要素との戦い できない要素との戦い できない要素との戦い できない要素との戦い できない要素との戦い 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい デフォルトのスクロールはTop or Bottom にしかできない デフォルトのスクロールはTop or Bottom にしかできない デフォルトのスクロールはTop or Bottom にしかできない デフォルトのスクロールはTop or Bottom にしかできない デフォルトのスクロールはTop or Bottom にしかできない デフォルトのスクロールはTop or Bottom にしかできない のでnavbar との相性が悪い のでnavbar との相性が悪い のでnavbar との相性が悪い のでnavbar との相性が悪い のでnavbar との相性が悪い のでnavbar との相性が悪い 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい E2E なのでデータの変更(たとえばブログの記事が増えたり減 E2E なのでデータの変更(たとえばブログの記事が増えたり減 E2E なのでデータの変更(たとえばブログの記事が増えたり減 E2E なのでデータの変更(たとえばブログの記事が増えたり減 E2E なのでデータの変更(たとえばブログの記事が増えたり減 E2E なのでデータの変更(たとえばブログの記事が増えたり減 ったり的なもの)に左右されやすい ったり的なもの)に左右されやすい ったり的なもの)に左右されやすい ったり的なもの)に左右されやすい ったり的なもの)に左右されやすい ったり的なもの)に左右されやすい 15 / 25
CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか CodeceptJS でどこまでできてるか
CodeceptJS でどこまでできてるか 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 自動スクロールで要素を真ん中あたりに持ってきてほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい 要素の表示待ちは適宜考慮してほしい データによって可変な領域とそうでない領域を区別してよ データによって可変な領域とそうでない領域を区別してよ データによって可変な領域とそうでない領域を区別してよ データによって可変な領域とそうでない領域を区別してよ データによって可変な領域とそうでない領域を区別してよ データによって可変な領域とそうでない領域を区別してよ しなにやってほしい しなにやってほしい しなにやってほしい しなにやってほしい しなにやってほしい しなにやってほしい 16 / 25
実装 実装 実装 実装 実装 実装 要素の表示待ちも含め、 要素の表示待ちも含め、 要素の表示待ちも含め、 要素の表示待ちも含め、
要素の表示待ちも含め、 要素の表示待ちも含め、 失敗したらちょっと待ってリトライする 失敗したらちょっと待ってリトライする 失敗したらちょっと待ってリトライする 失敗したらちょっと待ってリトライする 失敗したらちょっと待ってリトライする 失敗したらちょっと待ってリトライする と と と と と と いうアプローチ いうアプローチ いうアプローチ いうアプローチ いうアプローチ いうアプローチ Plugin で実現 Plugin で実現 Plugin で実現 Plugin で実現 Plugin で実現 Plugin で実現 plugins plugins: : { { retryFailedStep retryFailedStep: : { { enabled enabled: : true true } } } } 17 / 25
雑感 雑感 雑感 雑感 雑感 雑感 いままで多くのテスト自動化エンジニアを苦しめてきた いままで多くのテスト自動化エンジニアを苦しめてきた いままで多くのテスト自動化エンジニアを苦しめてきた いままで多くのテスト自動化エンジニアを苦しめてきた
いままで多くのテスト自動化エンジニアを苦しめてきた いままで多くのテスト自動化エンジニアを苦しめてきた 「Wait 書くの辛い問題」は、単純なAutoRetry →Fallback で解消 「Wait 書くの辛い問題」は、単純なAutoRetry →Fallback で解消 「Wait 書くの辛い問題」は、単純なAutoRetry →Fallback で解消 「Wait 書くの辛い問題」は、単純なAutoRetry →Fallback で解消 「Wait 書くの辛い問題」は、単純なAutoRetry →Fallback で解消 「Wait 書くの辛い問題」は、単純なAutoRetry →Fallback で解消 できる できる できる できる できる できる データによって変化する領域をよしなにハンドリングする技 データによって変化する領域をよしなにハンドリングする技 データによって変化する領域をよしなにハンドリングする技 データによって変化する領域をよしなにハンドリングする技 データによって変化する領域をよしなにハンドリングする技 データによって変化する領域をよしなにハンドリングする技 術はなんか出てきてほしい 術はなんか出てきてほしい 術はなんか出てきてほしい 術はなんか出てきてほしい 術はなんか出てきてほしい 術はなんか出てきてほしい スクロール周りはSelenium 側で直してくれるの期待してる スクロール周りはSelenium 側で直してくれるの期待してる スクロール周りはSelenium 側で直してくれるの期待してる スクロール周りはSelenium 側で直してくれるの期待してる スクロール周りはSelenium 側で直してくれるの期待してる スクロール周りはSelenium 側で直してくれるの期待してる Capability にScrollOption 的なの付けてほしいよね Capability にScrollOption 的なの付けてほしいよね Capability にScrollOption 的なの付けてほしいよね Capability にScrollOption 的なの付けてほしいよね Capability にScrollOption 的なの付けてほしいよね Capability にScrollOption 的なの付けてほしいよね 技術的にはCodeceptJS のPlugin としても実装可能なので令 技術的にはCodeceptJS のPlugin としても実装可能なので令 技術的にはCodeceptJS のPlugin としても実装可能なので令 技術的にはCodeceptJS のPlugin としても実装可能なので令 技術的にはCodeceptJS のPlugin としても実装可能なので令 技術的にはCodeceptJS のPlugin としても実装可能なので令 和が終わるころまでにはPR 出したい 和が終わるころまでにはPR 出したい 和が終わるころまでにはPR 出したい 和が終わるころまでにはPR 出したい 和が終わるころまでにはPR 出したい 和が終わるころまでにはPR 出したい 18 / 25
メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い メンテナンス・デバッグ効率が悪い 19 / 25
夢 夢 夢 夢 夢 夢 タイムマシン タイムマシン タイムマシン タイムマシン
タイムマシン タイムマシン ステップごとにDOM のスナップショットをとってくれる ステップごとにDOM のスナップショットをとってくれる ステップごとにDOM のスナップショットをとってくれる ステップごとにDOM のスナップショットをとってくれる ステップごとにDOM のスナップショットをとってくれる ステップごとにDOM のスナップショットをとってくれる 任意の場所からリスタートできる 任意の場所からリスタートできる 任意の場所からリスタートできる 任意の場所からリスタートできる 任意の場所からリスタートできる 任意の場所からリスタートできる 動かなかったところはその場で修正して続きを実行できる 動かなかったところはその場で修正して続きを実行できる 動かなかったところはその場で修正して続きを実行できる 動かなかったところはその場で修正して続きを実行できる 動かなかったところはその場で修正して続きを実行できる 動かなかったところはその場で修正して続きを実行できる 20 / 25
CodeceptJS でどこまで出来てるか CodeceptJS でどこまで出来てるか CodeceptJS でどこまで出来てるか CodeceptJS でどこまで出来てるか CodeceptJS でどこまで出来てるか
CodeceptJS でどこまで出来てるか タイムマシン タイムマシン タイムマシン タイムマシン タイムマシン タイムマシン 21 / 25
Workaround Workaround Workaround Workaround Workaround Workaround Cypress をつかう Cypress をつかう
Cypress をつかう Cypress をつかう Cypress をつかう Cypress をつかう CodeceptJS とは無関係のE2E フレームワーク CodeceptJS とは無関係のE2E フレームワーク CodeceptJS とは無関係のE2E フレームワーク CodeceptJS とは無関係のE2E フレームワーク CodeceptJS とは無関係のE2E フレームワーク CodeceptJS とは無関係のE2E フレームワーク ステップごとにDOM のスナップショットを取ってくれる ステップごとにDOM のスナップショットを取ってくれる ステップごとにDOM のスナップショットを取ってくれる ステップごとにDOM のスナップショットを取ってくれる ステップごとにDOM のスナップショットを取ってくれる ステップごとにDOM のスナップショットを取ってくれる リスタートとか編集とかはさすがにできない リスタートとか編集とかはさすがにできない リスタートとか編集とかはさすがにできない リスタートとか編集とかはさすがにできない リスタートとか編集とかはさすがにできない リスタートとか編集とかはさすがにできない クロスブラウザ要らない感じなら使いやすいよ クロスブラウザ要らない感じなら使いやすいよ クロスブラウザ要らない感じなら使いやすいよ クロスブラウザ要らない感じなら使いやすいよ クロスブラウザ要らない感じなら使いやすいよ クロスブラウザ要らない感じなら使いやすいよ 22 / 25
Workaround Workaround Workaround Workaround Workaround Workaround Allure Reporter を使う Allure
Reporter を使う Allure Reporter を使う Allure Reporter を使う Allure Reporter を使う Allure Reporter を使う OSS のレポート作成ツール OSS のレポート作成ツール OSS のレポート作成ツール OSS のレポート作成ツール OSS のレポート作成ツール OSS のレポート作成ツール CodeceptJS ももちろんサポートしている CodeceptJS ももちろんサポートしている CodeceptJS ももちろんサポートしている CodeceptJS ももちろんサポートしている CodeceptJS ももちろんサポートしている CodeceptJS ももちろんサポートしている ステップごとにスクリーンショットを取ってくれる ステップごとにスクリーンショットを取ってくれる ステップごとにスクリーンショットを取ってくれる ステップごとにスクリーンショットを取ってくれる ステップごとにスクリーンショットを取ってくれる ステップごとにスクリーンショットを取ってくれる 何をしたときにどう落ちたか分かりやすくて良い 何をしたときにどう落ちたか分かりやすくて良い 何をしたときにどう落ちたか分かりやすくて良い 何をしたときにどう落ちたか分かりやすくて良い 何をしたときにどう落ちたか分かりやすくて良い 何をしたときにどう落ちたか分かりやすくて良い 普通にレポーターとして優秀なのでみんな使ってみてほし 普通にレポーターとして優秀なのでみんな使ってみてほし 普通にレポーターとして優秀なのでみんな使ってみてほし 普通にレポーターとして優秀なのでみんな使ってみてほし 普通にレポーターとして優秀なのでみんな使ってみてほし 普通にレポーターとして優秀なのでみんな使ってみてほし い い い い い い http://allure.qatools.ru/ http://allure.qatools.ru/ http://allure.qatools.ru/ http://allure.qatools.ru/ http://allure.qatools.ru/ http://allure.qatools.ru/ https://demo.qameta.io/allure/ https://demo.qameta.io/allure/ https://demo.qameta.io/allure/ https://demo.qameta.io/allure/ https://demo.qameta.io/allure/ https://demo.qameta.io/allure/ 23 / 25
あんな夢こんな夢いっぱいあるけど あんな夢こんな夢いっぱいあるけど あんな夢こんな夢いっぱいあるけど あんな夢こんな夢いっぱいあるけど あんな夢こんな夢いっぱいあるけど あんな夢こんな夢いっぱいあるけど みんなみんな誰かが叶えてくれるわけではない みんなみんな誰かが叶えてくれるわけではない みんなみんな誰かが叶えてくれるわけではない みんなみんな誰かが叶えてくれるわけではない
みんなみんな誰かが叶えてくれるわけではない みんなみんな誰かが叶えてくれるわけではない 欲しい機能があればコミットして世の中を良くしていこう 欲しい機能があればコミットして世の中を良くしていこう 欲しい機能があればコミットして世の中を良くしていこう 欲しい機能があればコミットして世の中を良くしていこう 欲しい機能があればコミットして世の中を良くしていこう 欲しい機能があればコミットして世の中を良くしていこう 24 / 25
おしまい おしまい おしまい おしまい おしまい おしまい 25 / 25