← ./articles-ja

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はafterEachafterAllfinallyへ置きます。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が起動しない時は、app codeより先にport ownerを調べます。確認済みstale driverだけを止め、port解放を待ち、lifecycle ownerを1つにして、driver互換性と起動application artifactを確認します。