WebdriverIO+Appium+TypeScript测试Android应用遇匹配器错误求助
Android自动化测试问题排查与解决
环境信息
- Node.js: v18.5.0
- TypeScript: v4.9.5
- WebdriverIO: ^8.7.0
- Appium: ^1.22.3
- Mocha: ^10.2.0
- 操作系统: Windows 10 Enterprise
package.json 配置
{... "dependencies": { "@capacitor-community/bluetooth-le": "^2.1.0", "@capacitor/android": "4.6.3", "@capacitor/app": "4.1.1", "@capacitor/core": "4.6.3", "@capacitor/haptics": "4.1.0", "@capacitor/keyboard": "4.1.1", "@capacitor/status-bar": "4.1.1", "@ionic/react": "^6.0.0", "@ionic/react-router": "^6.0.0", "@testing-library/jest-dom": "^5.11.9", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^12.6.3", "@types/node": "^12.19.15", "@types/react": "^18.0.17", "@types/react-dom": "^18.0.6", "@types/react-router": "^5.1.11", "@types/react-router-dom": "^5.1.7", "ble-wrapper": "^1.0.7", ... }, ... "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, ... "devDependencies": { "@babel/cli": "^7.21.0", "@babel/core": "^7.21.4", "@babel/preset-env": "^7.21.4", "@babel/register": "^7.21.0", "@capacitor/cli": "^4.6.3", "@types/chai": "^4.3.4", "@types/jquery": "^3.5.16", "@types/mocha": "^10.0.1", "@types/web-bluetooth": "^0.0.16", "@types/webdriverio": "^5.0.0", "@wdio/allure-reporter": "^8.6.8", "@wdio/appium-service": "^8.7.0", "@wdio/cli": "^8.7.0", "@wdio/devtools-service": "^8.7.0", "@wdio/globals": "^8.6.9", "@wdio/local-runner": "^8.7.0", "@wdio/mocha-framework": "^8.7.0", "@wdio/spec-reporter": "^8.6.8", "@wdio/sync": "^7.27.0", "@wdio/types": "^8.6.8", "allure-commandline": "^2.21.0", "appium": "^1.22.3", "appium-uiautomator2-driver": "^2.14.0", "chai": "^4.3.7", "mocha": "^10.2.0", "ts-node": "^10.9.1", "typescript": "^4.9.5", "webdriverio": "^8.7.0" }, }
tsconfig.json 配置
{ "compilerOptions": { "target": "es2022", "lib": [ "dom", "dom.iterable", "esnext" ], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "commonjs", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", "outDir": "./dist", "types": [ "node", "mocha", "webdriverio/async", "@wdio/mocha-framework", "@wdio/globals/types", "@wdio/types" ] }, "include": [ "src" ], "exclude": [ "node_modules" ] }
测试代码
import { Browser } from 'webdriverio'; let device: Browser; describe('Open and close drawer', async () => { it('Open drawer', async () => { await $('//*[@text="OPEN DRAWER"]').click(); // await device.pause(3000); // const error = await $('//*[@resource-id="android:id/message"]')['error'] if (await $('//*[@resource-id="android:id/message"]')) { await $('//*[@resource-id="android:id/button1"]').click() } expect($('alert-1-hdr')).toEqual("You've just clicked the Open Drawer button"); }); });
测试报错信息
... [9c000c72010648725d2 Android 11 #0-0] Unexpected return from a matcher function. Matcher functions should return an object in the following format: {message?: string | function, pass: boolean} '{"actual": {}, "expected": "You've just clicked the Open Drawer button", "message": [Function anonymous], "name": "toEqual", "pass": {}}' was returned ...
遇到的问题
- device变量无法执行pause等操作
- 测试代码表现出类似jQuery语法的行为,而非WebdriverIO预期语法
- 出现匹配器函数返回格式错误的报错
解决方法
测试文件不在src目录下,将wdio.conf.ts和test目录添加到tsconfig.json的include字段后,问题解决。
内容的提问来源于stack exchange,提问作者mdexter1
相关产品推荐
相关产品推荐

