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

无法从引用项目访问Page Object Models问题求助

问题描述

我有一个web.testing.dependent项目,需要引用web.testing.referenced项目中的Page Object Models(页面对象模型)。该引用项目已打包发布到本地注册表,并作为依赖项添加到依赖项目中。在Nightwatch测试中可以导入并访问页面对象模型的元素,但执行测试时出现报错。

引用项目配置详情:

  • Nightwatch版本:3.3
  • 包含tsconfig.json、nightwatch.conf.js配置文件

场景说明:

  • 依赖项目本身已有部分页面对象,希望复用引用项目中可供多项目共享的页面对象
  • 尝试过使用简单原生JS类封装驱动函数,问题仍未解决

解决指导

1. 核对页面对象的导出与导入

确保引用项目的页面对象采用正确的导出方式,TypeScript示例:

// web.testing.referenced 中的页面对象
export default class LoginPage {
  get usernameInput() {
    return this.element('#username');
  }
}

依赖项目中导入时,直接使用包名+路径(无需相对路径),如:

import LoginPage from 'web.testing.referenced/pages/LoginPage';

2. 同步TypeScript编译配置

两个项目的tsconfig.json需保持兼容:

  • 依赖项目compilerOptions中,moduleResolution设为NodeNext/Node16,确保npm包模块解析正常
  • 开启allowSyntheticDefaultImports: true,适配默认导出的导入逻辑
  • 引用项目需设置declaration: true,生成.d.ts类型文件,避免依赖项目类型报错

3. 调整Nightwatch配置加载外部页面对象

在依赖项目的nightwatch.conf.js中,将引用项目的页面对象路径加入page_objects_path:

module.exports = {
  src_folders: ['tests'],
  page_objects_path: [
    './pages', // 本地页面对象目录
    './node_modules/web.testing.referenced/pages' // 外部依赖的页面对象目录
  ],
  typescript: {
    tsconfig_path: './tsconfig.json',
    auto_compile: true
  }
  // 其他配置项...
}

4. 确保页面对象绑定Nightwatch上下文

Nightwatch页面对象需要绑定浏览器实例,避免手动实例化导致上下文丢失:

// 测试用例中正确调用外部页面对象
module.exports = {
  '登录测试': async function (browser) {
    // 通过browser.page()方法实例化,自动绑定上下文
    const loginPage = browser.page('web.testing.referenced/pages/LoginPage')();
    await loginPage.navigate();
    await loginPage.setValue('@usernameInput', 'test_user');
  }
}

如果是自定义JS驱动类,需在构造函数中传入浏览器实例:

class AuthDriver {
  constructor(browser) {
    this.browser = browser;
  }

  async login(username) {
    const loginPage = this.browser.page('web.testing.referenced/pages/LoginPage')();
    await loginPage.navigate();
    await loginPage.setValue('@usernameInput', username);
  }
}

5. 检查依赖包的打包完整性

确认引用项目的package.json配置正确,指向打包后的文件:

{
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "files": ["dist"]
}

使用打包工具(如tsup、rollup)时,需保留类结构与导出逻辑,避免过度压缩导致Nightwatch无法识别页面对象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:57:27