electron(electron-forge + vite)でE2Eテストツールを試しました。webdriverio と Playwright が比較対象です。
結論
Playwright がハマらず手軽で高機能なのでオススメです。
自分はがっつりとelectron-forge (vite template)でpackage/make/publishまで作り込んであるので、webdriverioは注意点が多く辛かった感じになります。
確認したバージョン
- electron 36.2.0
- electron-forge 7.8.0
- webdriverio 9.12.7
- playwright 1.52.0
webdriverio
npm run package
でバンドルした後、npm run wdio
でE2Eテストを実行します。簡単なアプリで画面いじってassertするだけなら問題ないのですが、以下不具合がありました。
- electron-storeが読み込めていない
- システムDialogが出てないっぽい(面倒なので未調査)
electron-storeが読み込めていない原因
getPath("userData")が通常のフォルダではなく、 C:\Users\XXXX\AppData\Local\Temp\scoped_dir12740_1640172050 みたいに、Temp以下に毎回ランダムにフォルダが作られるみたいで、毎回初期状態の起動になってしまうっぽいです。
electron APIへのアクセス
まず、electronのドキュメント(https://www.electronjs.org/docs/latest/tutorial/automated-testing) がAPIへのアクセス方法が古かったっぽいのでPR投げておきました。以下のように呼ばないといけません。
await browser.electron.execute((electron) => {
const userData = electron.app.getPath("userData");
console.log(`userData ${userData}`);
});
それ以外でも、結局electron-forge(vite)では環境変数の取り込みが煩雑 (https://vite.dev/config/) なので TEST==="true" の手法ではうまくいかず、wdioモジュールを読み込む、までを作り込むのが結構大変そう でした(サンプルのままでは動きません!)。
結局、
import "wdio-electron-service/main";
import "wdio-electron-service/preload";
をテスト時に手でコメントアウトしてnpm run packageした方が早そうでした、、、
Playwright
npm run package
でバンドルした後、npx playwright test
でE2Eテストを実行します。webdriverioで発生したトラブルには遭遇せず、electron-forgeの環境を特にいじらないでも動きました。いや、はじめて触りましたが、Playwrightサイコーですねコレ、、。