会社のブラウザだとPlaywrightがエラーになる理由と対処法

会社のブラウザだとPlaywrightがエラーになる

私物のPCだとPlaywrightを問題なく実行できるコードでも、会社のPCだと同じコードなのにPlaywrightを実行しようとすると、以下のようなエラーが表示されて実行できないケースがあります。

Error: Target page, context or browser has been closed

例えば以下のような単純なテストコードでもエラーになるケースがあります。

example.spec.js
const { test, expect } = require('@playwright/test');

test('test', async ({ page }) => {
  await page.goto('https://example.com/');
  expect(await page.title()).toBe('Example Domain');
});

エラーの原因はブラウザ拡張機能

同じコードなのに私物のPCだと実行できて、会社のPCだと実行できない場合はブラウザ拡張機能が原因のケースが多いです。

会社のPCの場合、ブラウザにセキュリティ関連の拡張機能が管理者によりインストールされていることがあり、その影響でPlaywrightを実行してもエラーになるケースがあります。

Playwrightを実行するための対処法

拡張機能が原因なので、Playwrightを実行する際にブラウザの拡張機能を無効化すれば、エラーにならずに実行できます。

やり方はplaywright.config.jsにdefineConfigでブラウザの拡張機能の無効化設定を追加するだけです。

playwright.config.js
const { defineConfig } = require('@playwright/test');

module.exports = defineConfig({
  use: {
    launchOptions: {
      ignoreDefaultArgs: ['--disable-extensions'],
    },
  },
});

テストコードに直接設定を書く場合は、test.use()で追加します。

example.spec.js
const { test, expect } = require('@playwright/test');

test.use({
	launchOptions: {
		ignoreDefaultArgs: ['--disable-extensions'],
	},
});

test('test', async ({ page }) => {
  await page.goto('https://example.com/');
  expect(await page.title()).toBe('Example Domain');
});

launch内に設定を追記する場合は以下のようになります。

example.mjs
const browser = await chromium.launch({
  ignoreDefaultArgs: ['--disable-extensions'],
});

日本のIT企業だとブラウザにセキュリティ関連のブラウザ拡張機能がインストールされていることが多いので、もし同様のケースが原因でエラーになっていると思ったら、「ignoreDefaultArgs: ['--disable-extensions']」を追記してみてください。