【发布时间】:2021-01-13 07:28:18
【问题描述】:
我想将我的 Appium-Javascript 样板转换为 typescript 项目。我更喜欢 typed-configuration,因为这是官方推荐的,并按照documentation提供的步骤进行操作
这是项目的结构:
这是“package.json”文件:
{
"author": "",
"dependencies": {
"@wdio/cli": "^6.5.2",
"webdriverio": "^6.5.2",
"ts-node": "^8.10.2",
"typescript": "^3.9.5"
},
"devDependencies": {
"@types/chai": "^4.2.12",
"@types/mocha": "^8.0.3",
"@types/node": "^14.11.2",
"@types/selenium-webdriver": "^4.0.9",
"@types/webdriverio": "^5.0.0",
"@wdio/appium-service": "^6.4.7",
"@wdio/cucumber-framework": "^6.5.0",
"@wdio/local-runner": "^6.5.2",
"@wdio/mocha-framework": "^6.5.0",
"@wdio/selenium-standalone-service": "^6.4.7",
"@wdio/spec-reporter": "^6.4.7",
"@wdio/sync": "^6.5.0",
"chai": "^4.2.0",
"npm": "^6.14.8"
},
"license": "ISC",
"main": "wdio.conf.js",
"name": "android_e2e_appium",
"scripts": {
"wdio": "./node_modules/.bin/wdio",
"pretest": "tsc",
"test": "wdio ./build/wdio.conf.js"
},
"version": "1.0.0"
}
这是'tsconfig.json'-文件('sync-mode'-configuration):
{
"compilerOptions": {
"target": "ES2017",
"module": "commonjs",
"sourceMap": false,
"outDir": "./build",
"rootDir": "./src",
"removeComments": true,
"strict": true,
"noImplicitAny": true,
"moduleResolution": "node",
"strictPropertyInitialization": true,
"strictNullChecks": true,
//"typeRoots": [ "./node_modules/@types" ],
"types": [
"node",
"@wdio/sync",
//"webdriverio",
"@wdio/mocha-framework",
"chai"
],
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"inlineSourceMap": true,
"forceConsistentCasingInFileNames": true
},
"include": [
"./src/**/*.ts"
],
"exclude": [
"./node_modules",
"plugins.ts"
]
}
这是“wdio.conf.ts”文件:
let {join} = require( 'path' );
exports.config = {
runner: 'local',
port: 4723,
path: '/wd/hub',
sync: true,
specs: [
'./src/tests/**/*.js'
],
exclude: [],
maxInstances: 1,
capabilities: [{
'appium:platformName': 'Android',
'appium:platformVersion': '8.1',
'appium:deviceName': 'Nexus 6P',
'appium:automationName': 'UiAutomator2',
'appium:app': join( process.cwd(), './apk/ApiDemos-debug.apk' ),
'appium:autoGrantPermissions': true,
'appium:clearDeviceLogsOnStart': true,
'appium:newCommandTimeout': 300000
}],
logLevel: 'error',
bail: 0,
waitforTimeout: 28000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
framework: 'mocha',
reporters: ['spec'],
mochaOpts: {
//ui: 'bdd',
timeout: 60000,
//compilers:'tsconfig-paths/register'
//compilers: ['ts:ts-node/register'],
//requires: ['./test/helpers/common.js']
require: ['ts-node/register']
}
};
“sample.steps.ts”文件包含证明项目功能的第一个测试:
import {expect} from 'chai';
describe('Sample test', () => {
it("should verify that the text entry dialog username & password fields are editable", () => {
let appBtn: any = $("~App");
let alertDialogBtn: any = $('//android.widget.TextView[@content-desc="Alert Dialogs"]');
let textEntryDialogBtn: any = $('//android.widget.Button[@content-desc="Text Entry dialog"]');
let userNameField: any = $(
'//android.widget.EditText[@resource-id="io.appium.android.apis:id/username_edit"]');
let passwordField: any = $(
'//android.widget.EditText[@resource-id="io.appium.android.apis:id/password_edit"]');
appBtn.click();
alertDialogBtn.click();
textEntryDialogBtn.click();
let testuser: string = "Test User";
userNameField.addValue(testuser);
passwordField.addValue("password");
expect(userNameField.getText()).equal(testuser);
});
});
我可以使用命令“tsc”将 typescript 从“./src”编译到“./build”文件夹(如配置)中,而不会出现任何错误。但是,当我运行测试时,我收到错误消息:
ERROR @wdio/cli:launcher: 没有找到可以运行的规范,退出失败
我很确定错误在“tsconfig.json”文件中,但我无法确定。在这一点上,即使是非类型化实现也可以; - 我也无法实现。
我将项目推送到 github:appium-webdriverIO-typescript
【问题讨论】:
标签: typescript appium typescript-typings webdriver-io tsconfig