You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Playwright测试的Chrome窗口仅在主屏幕打开?

解决Playwright测试窗口固定在主屏幕打开的问题

我用Playwright搭配TypeScript做测试,设备配有两块屏幕,主屏幕是笔记本自带屏幕,副屏为外接显示器。运行测试套件时,Chrome窗口有时会在主屏幕打开,有时会跳去副屏幕。尝试了以下代码但无效:

async initPage(): Promise<void> {
        super.initPage()
        try {
            await this.page.waitForLoadState('domcontentloaded')
            await this.page.waitForLoadState('networkidle')
        } catch (error) {}
        await this.page.evaluate(() => {
            window.moveTo(0, 0)
        })
    }

原因分析

用page.evaluate执行window.moveTo无效,主要有两个原因:

  1. 浏览器安全策略限制:脚本无法随意移动非自身创建的窗口,测试启动的浏览器窗口不属于页面脚本创建的范畴,会被拦截。
  2. 时机滞后:页面加载后再移动窗口,此时浏览器可能已经根据系统窗口布局策略把窗口分配到副屏,移动操作可能不生效或有延迟。

有效解决方案

1. 启动浏览器时直接指定窗口位置

在启动Chromium浏览器时,通过args参数强制指定窗口位置为(0,0)(主屏幕左上角),同时可以指定主屏的分辨率,确保窗口完全在主屏内:

import { chromium } from '@playwright/test';

async function runTest() {
  const browser = await chromium.launch({
    args: [
      '--window-position=0,0', // 固定到主屏幕左上角
      '--window-size=1920,1080' // 替换为你的主屏幕实际分辨率
    ],
    headless: false // 必须关闭无头模式才会显示窗口
  });
  const context = await browser.newContext();
  const page = await context.newPage();
  // 测试逻辑...
  await browser.close();
}

2. 在Playwright配置文件中全局配置

如果使用Playwright Test框架,可以在playwright.config.ts里全局设置启动参数,所有测试都会遵循这个配置:

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  use: {
    launchOptions: {
      args: [
        '--window-position=0,0',
        '--window-size=1920,1080'
      ]
    },
    // 其他配置如baseURL、viewport等...
  },
});

注意事项

  • 确认主屏幕的分辨率:可以在系统显示设置里查看主屏幕的实际分辨率,替换代码中的1920,1080。
  • 如果使用的是其他浏览器(如Firefox),类似的参数也适用,但参数名称可能略有不同,比如Firefox用--window-position同样有效。

内容的提问来源于stack exchange,提问作者Tal Angel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:38:10