import test, { chromium, expect } from "@playwright/test";
import path from "path";
import fs from 'fs';
test.use({ browserName: 'chromium' });
test('Open example.com and trigger the popup form', async () => {
const pathToExtension = path.resolve(__dirname, '..', 'dist');
const userDataDir = path.resolve(__dirname, '..', 'tmp-profile');
if (fs.existsSync(userDataDir)) {
fs.rmSync(userDataDir, { recursive: true, force: true });
}
const browserContext = await chromium.launchPersistentContext(userDataDir, {
headless: false,
args: [
`--disable-extensions-except=${pathToExtension}`,
`--load-extension=${pathToExtension}`
]
});
const page = await browserContext.newPage();
await page.goto('https://example.com');
await page.waitForLoadState('networkidle');
console.log('Browser launched...');
page.keyboard.press('Control+q'); // doesn't happen
const popupForm = page.getByLabel('extension-popup-form');
expect(popupForm).toBeVisible(); // fails here because the form wasn't triggered
expect(popupForm).toHaveText('https://example.com');
await popupForm.press('Enter');
expect(page).toHaveTitle('Blocked | On Pace Extension');
browserContext.close();
});
在自动快捷方式快速时,分别模拟了每个键按下:
await page.evaluate(() => {
document.dispatchEvent(new KeyboardEvent('keydown', {
key: 'q',
code: 'KeyQ',
ctrlKey: true,
bubbles: true,
cancelable: true
}));
});
Https://www.toptal.com/developers/keycode上运行测试,以确保按键的代码正确(它们是)。 在运行事件之前对超时值进行实验:
await page.keyboard.down('Control');
await page.waitForTimeout(800);
await page.keyboard.press('q');
await page.waitForTimeout(600);
await page.keyboard.up('Control');
await page.waitForTimeout(5000);
如果这不起作用,请与您的扩展程序共享实际页面和
小型,完整的示例(或简化代码以复制问题)。