Tauri WebDriverが起動しない時はstale driver processを確認する
Tauri E2Eがnavigation前にtimeoutする、address already in useになる、WebDriver sessionを作れない。application codeではなく、前回のdriverがportを保持している可能性があります。
driver startupをenvironment boundaryとして扱い、listenerを特定し、自分が所有するprocessだけをcleanupし、新sessionが期待driverとapp binaryを使うことを証明します。
app codeを変える前にlifecycle failureを見分ける
driver layerの症状には次があります。
- 最初のDOM assertionより前に失敗する
- test開始前からlocal WebDriver portがlistenしている
- codeを変えずretryするとerrorが変わる
- appは開くがsession作成・attachに失敗する
verbatim errorとstartup時刻を保存します。DOM到達後のassertion失敗なら、別の原因を調べます。
portを所有するprocessを特定する
harnessで設定したportを使います。全setupが同じportとは限りません。
$port = 4444
$connection = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue
$connection | Select-Object LocalAddress, LocalPort, OwningProcess
ownerの実体も確認します。
Get-Process -Id $connection.OwningProcess |
Select-Object Id, ProcessName, Path, StartTime
pathとprocess nameからtest run所属だと確認するまでPIDを終了しません。port番号だけではownershipの証拠になりません。
stale driverを止めてport解放を待つ
process確認後、可能ならharness teardownで止めます。manual recoveryでは次のようにします。
Stop-Process -Id $connection.OwningProcess
do {
Start-Sleep -Milliseconds 200
$listener = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue
} while ($listener)
短いpollは重要です。終了直後に新driverを起動するとOS cleanupと競合します。
通常のteardownはafterEach、afterAll、finallyへ置きます。assertion failureでdriver shutdownがskipされないようにします。
native driverのownerを1つにする
現在のWebdriverIO Tauri setupはembedded providerを選べ、別native driver管理を避けられます。Windowsでtauri-driverを直接使う場合は、その下でMicrosoft Edge WebDriverを使います。
harnessが起動する設計ならmsedgedriverを先に手動起動しません。native executableを自分で管理するなら、documented pathを渡し、そのlayerがstartupとshutdownの両方を担当します。ownerが2つあるとduplicate processと曖昧なlogが生まれます。
driver互換性とbinary鮮度を確認する
direct native-driver setupではMicrosoft EdgeとEdge Driverの互換性を確認します。現在のWebdriverIO Tauri serviceはexternal-driver経路で同期を支援しますが、custom harnessではversionとexecutable pathを明示します。
application artifactも確認します。
- source変更後にrebuildする
- testが起動したbinary pathをlogに出す
- modification timeとbuild完了時刻を比較する
- binaryがconfigured dev URLを読むなら、最新frontendを配信しているか確認する
old binaryへ接続したclean sessionも、正しいtest setupではありません。
startupとteardownを証明する
4 checkpointを記録します。
Before start: no unexpected listener
After driver start: expected PID owns the port
After session creation: session ID and DOM ready observed
After teardown: process exited and port released
これでapplication failureと、leaked driver、native driver非互換、stale artifactを区別できます。
参考
- Tauri: WebDriver testing
- Tauri: WebDriver continuous integration
- 環境依存bugはcode fixから始めない
- VitestでTauri Zustand storeをテストする
まとめ
Tauri WebDriverが起動しない時は、app codeより先にport ownerを調べます。確認済みstale driverだけを止め、port解放を待ち、lifecycle ownerを1つにして、driver互換性と起動application artifactを確認します。