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

如何在Karma运行的SAPUI5 Opa5测试中获取Puppeteer的Page对象

获取Karma启动的Chrome对应Puppeteer Page对象的实现方法

第一步:调整Karma配置开启远程调试端口

修改karma.conf.js中的自定义启动器配置,给Chrome增加远程调试端口启动参数:

process.env.CHROME_BIN = require( 'puppeteer' ).executablePath();
config.customLaunchers = {
    'ChromeHeadlessNoSandbox': {
        base: 'ChromeHeadless',
        flags: [ 
            '--no-sandbox',
            // 新增远程调试端口配置,可自定义未被占用的端口
            '--remote-debugging-port=9222'
        ]
    }
};
config.browsers = [ 'ChromeHeadlessNoSandbox' ];

第二步:封装获取当前测试页面的方法

无需调用puppeteer.launch启动新浏览器,直接通过调试端口连接Karma已经启动的Chrome实例,再过滤出运行测试的目标页面即可:

const puppeteer = require('puppeteer');

async function getCurrentTestPage() {
    // 连接到已启动的Chrome实例
    const browser = await puppeteer.connect({
        browserURL: 'http://localhost:9222',
        // 保留原有窗口尺寸,不自动修改视口
        defaultViewport: null
    });
    // 获取所有已打开的页面对象
    const pages = await browser.pages();
    // 过滤出Karma测试运行的上下文页面,可根据实际场景调整匹配规则
    return pages.find(page => page.url().includes('/context'));
}

第三步:在测试中调用截图能力

在Opa5测试用例中直接调用封装好的方法获取Page对象,再执行截图操作:

// Opa5测试用例示例
iTakeScreenshotOfCurrentPage: async function() {
    const testPage = await getCurrentTestPage();
    await testPage.screenshot({
        path: './screenshots/test-page.png',
        fullPage: true
    });
}

注意事项

  • 确保9222端口未被其他进程占用,若占用可更换为其他空闲端口,同步修改配置和连接地址即可
  • 若测试页面存在iframe、多标签页等场景,可调整pages.find的匹配规则,通过URL、页面标题等特征精准定位目标页面
  • 项目依赖中需已安装对应版本的puppeteer,保证和配置中使用的Chrome版本兼容

内容的提问来源于stack exchange,提问作者Graeme Perrow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:39:04