如何设置 Appium-Webdriver.io-project 来编译打字稿文件? [错误@wdio/cli:启动器:未找到 运行 的规范,失败退出]
How to set up an Appium-Webdriver.io-project to compile typescript-files? [ ERROR @wdio/cli:launcher: No specs found to run, exiting with failure ]
我想将我的 Appium-Javascript 样板转换为打字稿项目。我更喜欢类型化配置,因为这是官方推荐的,并按照 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'-配置):
{
"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”将打字稿从“./src”编译到“./build”文件夹(根据配置),没有任何错误。但是,当我 运行 测试时,我收到错误消息:
ERROR @wdio/cli:launcher: No specs found to run, exiting with failure
我很确定错误出在“tsconfig.json”文件中,但我无法确定。在这一点上,即使是非类型化的实现也可以; - 我无法实施。
我把项目推到了github:appium-webdriverIO-typescript
This source provided the solution.
我终于能够通过 运行 带有标记 --ignoreDeviceController
的脚本解决这个问题
此外,我把文件‘wdio.conf’变成了一个javascript-file,并把它移回了项目的root-level。因此必须相应地更改文件“package.json”中的以下行:
"test": "wdio ./wdio.conf.js --ignoreDeviceController"
如果您仍在为这个问题而苦恼,请考虑添加这些附加标志:
--runType=realme
--relaxedSecurity
我想将我的 Appium-Javascript 样板转换为打字稿项目。我更喜欢类型化配置,因为这是官方推荐的,并按照 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'-配置):
{
"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”将打字稿从“./src”编译到“./build”文件夹(根据配置),没有任何错误。但是,当我 运行 测试时,我收到错误消息:
ERROR @wdio/cli:launcher: No specs found to run, exiting with failure
我很确定错误出在“tsconfig.json”文件中,但我无法确定。在这一点上,即使是非类型化的实现也可以; - 我无法实施。
我把项目推到了github:appium-webdriverIO-typescript
This source provided the solution.
我终于能够通过 运行 带有标记 --ignoreDeviceController
的脚本解决这个问题此外,我把文件‘wdio.conf’变成了一个javascript-file,并把它移回了项目的root-level。因此必须相应地更改文件“package.json”中的以下行:
"test": "wdio ./wdio.conf.js --ignoreDeviceController"
如果您仍在为这个问题而苦恼,请考虑添加这些附加标志:
--runType=realme
--relaxedSecurity