デバッグ
複数のプロセスが複数のブラウザで何十ものテストを実行する場合、デバッグは格段に難しくなります。
まず始めに、maxInstances
を1
に設定し、デバッグが必要な特定のスペックとブラウザのみをターゲットにすることで並列処理を制限することが非常に役立ちます。
wdio.conf
での設定例:
export const config = {
// ...
maxInstances: 1,
specs: [
'**/myspec.spec.js'
],
capabilities: [{
browserName: 'firefox'
}],
// ...
}
デバッグコマンド
多くの場合、browser.debug()
を使用してテストを一時停止し、ブラウザを検査することができます。
コマンドラインインターフェースもREPLモードに切り替わります。このモードでは、コマンドやページ上の要素を操作することができます。REPLモードでは、テスト内と同様にbrowser
オブジェクト、または$
と$$
関数にアクセスできます。
browser.debug()
を使用する場合は、テストが長時間実行されることでテストランナーがテストを失敗とみなさないように、テストランナーのタイムアウト時間を増やす必要があるでしょう。例えば:
wdio.conf
での設定例:
jasmineOpts: {
defaultTimeoutInterval: (24 * 60 * 60 * 1000)
}
他のフレームワークでの設定方法についてはtimeoutsを参照してください。
デバッグ後にテストを続行するには、シェルで^C
ショートカットまたは.exit
コマンドを使用しま す。
動的設定
wdio.conf.js
はJavascriptを含むことができます。タイムアウト値を永続的に1日に変更したくない場合は、環境変数を使用してコマンドラインからこれらの設定を変更すると便利です。
この技術を使用すると、設定を動的に変更できます:
const debug = process.env.DEBUG
const defaultCapabilities = ...
const defaultTimeoutInterval = ...
const defaultSpecs = ...
export const config = {
// ...
maxInstances: debug ? 1 : 100,
capabilities: debug ? [{ browserName: 'chrome' }] : defaultCapabilities,
execArgv: debug ? ['--inspect'] : [],
jasmineOpts: {
defaultTimeoutInterval: debug ? (24 * 60 * 60 * 1000) : defaultTimeoutInterval
}
// ...
}
その後、wdio
コマンドの前にdebug
フラグを付けることができます:
$ DEBUG=true npx wdio wdio.conf.js --spec ./tests/e2e/myspec.test.js
...そしてDevToolsでスペックファイルをデバッグできます!
Visual Studio Code(VSCode)でのデバッグ
最新のVSCodeでブレークポイントを使用してテストをデバッグする場合、デバッガーを起動するための2つのオプションがあります。オプション1が最も簡単な方法です:
- デバッガーを自動的にアタッチする
- 設定ファイルを使用してデバッガーをアタッチする
VSCode自動アタッチの切り替え
次の手順でデバッガーを自動的にアタッチできます:
- CMD + Shift + P(LinuxとMacos)またはCTRL + Shift + P(Windows)を押す
- 入力フィールドに「attach」と入力
- 「Debug: Toggle Auto Attach」を選択
- 「Only With Flag」を選択
これで完了です!テストを実行すると(前述のように--inspectフラグを設定する必要があります)、自動的にデバッガーが起動し、最初のブレークポイントで停止します。