0

我正在努力使用 browser.addCommand(),我使用 WebDriverIO 版本 6 + typescript,当我尝试向 wdio.conf.js 添加命令并运行测试时,它失败并出现错误“无法编译 TypeScript:”

我的 ts.confg:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "*": [
        "./*"
      ],
      "src/*": [
        "./src/*"
      ],
      "test/*": [
        "./test/*"
      ]
    }, 
    "sourceMap": false,
    "target": "es6",                         
    "module": "commonjs",  
    "typeRoots": ["./types"],                       
    "types": [
      "node",
      "@wdio/sync",
      "@wdio/jasmine-framework"
   ],                           

  "include": ["./test/**/*.ts","./types/wdio.d.ts"],
  "exclude": [
    "./node_modules"
  ],
}

wdio.d.ts 文件:

declare module WebdriverIO {
  interface Element {
    waitAndClick: () => void;
  }
}

wdio.conf.js 文件:

before: function (capabilities, specs) {
        browser.addCommand("waitAndClick", function () {
        this.waitForDisplayed({timeout: 5000})
        this.click()
     }, true)
 }

在页面对象中:

$('.classname').waitAndClick();

我可以在上面的示例中看到页面对象中的方法。当我尝试运行它失败并出现错误“无法编译 TypeScript:错误 TS2339:属性 'waitAndClick' 在类型'元素'上不存在。”

4

2 回答 2

0

我也有同样的问题。wdio.d.ts 在运行时没有任何改变,我得到了 TS2339。

到目前为止,我发现的唯一(坏)解决方案是每次调用这样的方法时都会选择“@ts-ignore”。

于 2020-08-27T20:13:22.507 回答
0

我终于有了一个解决方案,你需要将 wdio.d.ts 添加到 tsconfig.json 中的 types 属性。

-      "types": ["node", "@wdio/sync", "@wdio/jasmine-framework"]
+      "types": ["node", "@wdio/sync", "@wdio/jasmine-framework", "./wdio"]
于 2020-08-29T09:23:09.393 回答