【问题标题】: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-Webdriver.io-project 来编译 typescript 文件? [错误@wdio/cli:launcher:没有找到运行的规范,退出失败]
【发布时间】: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


    【解决方案1】:

    This source provided the solution.

    我终于能够通过运行带有 --ignoreDeviceController

    标志的脚本来解决这个问题

    此外,我将文件“wdio.conf”转换为 javascript 文件并将其移回项目的根级别。因此,必须相应地更改文件“package.json”中的以下行:

    "test": "wdio ./wdio.conf.js --ignoreDeviceController"
    

    如果您仍然遇到此问题,请考虑添加这些附加标志:

    --runType=realme

    --relaxedSecurity

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      相关资源
      最近更新 更多