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

WebdriverIO安卓APK测试加载失败:模块导入与配置排查求助

WebdriverIO安卓自动化测试失败:模块找不到+Browser对象未初始化

问题背景

使用WebdriverIO进行安卓APK自动化测试,采用页面对象模型编写测试用例,但执行失败,不确定是模块导入还是配置问题。

测试代码

import { expect }  from '@wdio/globals'
import homePage from '../pageobjects/home.page'
import loginPage from '../pageobjects/login.page'
import profilePage from '../pageobjects/profile.page'

describe('Abrir o Aplicativo', () => {
    it('Deve abrir o app aguarda 10 segundo e sair', async () => {
        await driver.pause(10000)
        await homePage.openMenu('profile')//abrir o menu detalhes pageobjects homepage
        await loginPage.login('cliente@ebac.art.br','GD*peToHNJ1#c$sgk08EaYJQ')//preencher email e senha detalhes page objects login
        await homePage.openMenu('profile')
        expect ((await profilePage.ProfileName('EBAC Cliente')).isDisplayed()).toBeTruthy()
        await driver.pause(10000)//Aguardando 10 segundos aplicativo
    })
})

错误日志

0-0] 2024-03-19T02:06:14.073Z ERROR @wdio/runner: Error: Unable to load spec files quite likely because they rely on `browser` object that is not fully initialized.
[0-0] `browser` object has only `capabilities` and some flags like `isMobile`.
[0-0] Helper files that use other `browser` commands have to be moved to `before` hook.
[0-0] Spec file(s): file:///C:/repositorio/Test_mobile_novo/test/specs/login.test.js
[0-0] Error: Error: Cannot find module 'C:\repositorio\Test_mobile_novo\test\pageobjects\home.page' imported from C:\repositorio\Test_mobile_novo\test\specs\login.test.js
[0-0]     at finalizeResolution (C:\repositorio\Test_mobile_novo\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:366:11)
[0-0]     at moduleResolve (C:\repositorio\Test_mobile_novo\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:801:10)
[0-0]     at Object.defaultResolve (C:\repositorio\Test_mobile_novo\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:912:11)
[0-0]     at C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:218:35
[0-0]     at entrypointFallback (C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:168:34)
[0-0]     at C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:217:14
[0-0]     at addShortCircuitFlag (C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:409:21)
[0-0]     at resolve (C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:197:12)
[0-0]     at nextResolve (node:internal/modules/esm/hooks:865:28)
[0-0]     at Hooks.resolve (node:internal/modules/esm/hooks:303:30)
[0-0]     at MochaAdapter._loadFiles (file:///C:/repositorio/Test_mobile_novo/node_modules/@wdio/mocha-framework/build/index.js:91:35)
[0-0]     at async MochaAdapter.init (file:///C:/repositorio/Test_mobile_novo/node_modules/@wdio/mocha-framework/build/index.js:66:9)
[0-0]     at async Object.adapterFactory.init (file:///C:/repositorio/Test_mobile_novo/node_modules/@wdio/mocha-framework/build/index.js:222:22)
[0-0]     at async Runner.run (file:///C:/repositorio/Test_mobile_novo/node_modules/@wdio/runner/build/index.js:83:27)
[0-0]  Error:  Unable to load spec files quite likely because they rely on `browser` object that is not fully initialized.     
`browser` object has only `capabilities` and some flags like `isMobile`.
Helper files that use other `browser` commands have to be moved to `before` hook.
Spec file(s): file:///C:/repositorio/Test_mobile_novo/test/specs/login.test.js
Error: Error: Cannot find module 'C:\repositorio\Test_mobile_novo\test\pageobjects\home.page' imported from C:\repositorio\Test_mobile_novo\test\specs\login.test.js
    at finalizeResolution (C:\repositorio\Test_mobile_novo\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:366:11)
    at moduleResolve (C:\repositorio\Test_mobile_novo\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:801:10)
    at Object.defaultResolve (C:\repositorio\Test_mobile_novo\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:912:11)
    at C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:218:35
    at entrypointFallback (C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:168:34)
    at C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:217:14
    at addShortCircuitFlag (C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:409:21)
    at resolve (C:\repositorio\Test_mobile_novo\node_modules\ts-node\src\esm.ts:197:12)
    at nextResolve (node:internal/modules/esm/hooks:865:28)
    at Hooks.resolve (node:internal/modules/esm/hooks:303:30)
[0-0] 2024-03-19T02:06:14.078Z INFO webdriver: COMMAND deleteSession()
[0-0] 2024-03-19T02:06:14.080Z INFO webdriver: [DELETE] http://0.0.0.0:4723/session/6f0f1396-276b-41b7-ac17-e72116080c48       
[0-0] 2024-03-19T02:06:15.284Z INFO webdriver: RESULT null
[0-0] FAILED in Android - file:///C:/repositorio/Test_mobile_novo/test/specs/login.test.js
2024-03-19T02:06:15.430Z INFO @wdio/cli:launcher: Run onWorkerEnd hook
2024-03-19T02:06:15.430Z INFO @wdio/cli:launcher: Run onComplete hook

Spec Files:      0 passed, 1 failed, 1 total (100% completed) in 00:00:26

2024-03-19T02:06:15.432Z INFO @wdio/local-runner: Shutting down spawned worker
2024-03-19T02:06:15.688Z INFO @wdio/local-runner: Waiting for 0 to shut down gracefully
2024-03-19T02:06:15.689Z INFO @wdio/local-runner: shutting down
PS C:\repositorio\Test_mobile_novo> 

问题分析与修复方案

1. 模块找不到错误(核心问题)

日志明确指出无法找到home.page模块,按以下步骤排查修复:

  • 验证文件存在性:检查test/pageobjects/目录下是否有home.page.js(或home.page.ts)文件,文件名、路径必须与导入语句完全匹配(注意大小写,即便Windows不区分大小写,模块解析逻辑可能严格校验)。
  • 确认路径正确性:测试文件位于test/specs/,../pageobjects/home.page的路径指向test/pageobjects/home.page,确认目录结构是否符合预期。
  • TypeScript配置检查:若使用TS,确保tsconfig.json中moduleResolution设为"node",且页面对象文件的后缀(.ts/.js)被正确识别。

2. Browser对象未初始化警告

日志提到页面对象可能在browser完成初始化前调用了相关命令,修复方式:

  • 避免顶层调用browser API:页面对象中不要在模块顶层直接执行$、browser.$等操作,而是将元素定位封装为类的getter方法,或在类的实例方法内部调用。
    错误示例:
    // 模块加载时就执行定位,此时browser未初始化
    const menuBtn = $('~menu')
    class HomePage {
        async openMenu() { await menuBtn.click() }
    }
    
    正确示例:
    class HomePage {
        get menuBtn() { return $('~menu') }
        async openMenu() { await this.menuBtn.click() }
    }
    
  • 延迟初始化逻辑:若页面对象有初始化操作,将其移到测试文件的before/beforeEach钩子中,确保在browser就绪后执行。

3. 额外验证项

  • 检查wdio.conf.js的specs配置,确保指向正确的测试文件路径(如test/specs/**/*.test.js)。
  • 执行npm install重新安装依赖,排除依赖缺失导致的加载问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:05:54