• 作成:

ElectronのテストをPlaywrightで行う時Linux環境だとMissing X server or $DISPLAYで動かなかったのを解決

問題

microsoft/playwright: Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.を使って、 Electronの自動テストを行う計画を立てました。

前はSpectronで行ってたのがElectronをちゃんとバージョンアップしたら爆散してしまいました。 Spectron 非推奨通知 | Electron

とりあえず最初は起動することだけを確認すれば良いので、そのように他の人に指示をしました。

しかしコマンドによって動いたり動かなかったりするらしいので私が調査することにしました。

自分の環境の場合は、どのコマンドを使っても動きませんでした。

エラー内容はこんな感じで、

[err] [295:0730/134029.164788:ERROR:ozone_platform_x11.cc(248)] Missing X server or $DISPLAY
[err] [295:0730/134029.164838:ERROR:env.cc(226)] The platform failed to initialize.  Exiting.

問題のエラーになる場所はここ。

  const electronApp = await electron.launch({
    args: ['app/main.js'],
    env: { NODE_ENV: 'development' },
  });

Xを認識してないのか。

[BUG] electron.launch: Process failed to launch on Ubuntu github action · Issue #11932 · microsoft/playwright で似たような状況になることは分かったので、ここの対策を試してみます。 xvfb-runを試しても問題になるのは同じ。

とりあえず問題を切り分けするためにWindowsでテスト起動してみたら普通に動きますね。 CircleCI Dockerでは公式イメージのmcr.microsoft.com/playwright:v1.24.2-focalを使ってるのに動きません。

解決

勘が働いてenvを書き換えました。

  const electronApp = await electron.launch({
    args: ['app/main.js'],
    env: { ...process.env, NODE_ENV: 'development' },
  });

動きました。 Xの情報を環境変数で渡しているのでNODE_ENVだけにしたらリセットされてしまい動きませんね。中々気が付きませんでした。