browser.addcommand() 在 webdriverIO 中使用 typescript "Unable to compile TypeScript: error TS2339: Property '...' does not exist on type 'Element'."

browser.addcommand() using typescript in webdriverIO "Unable to compile TypeScript: error TS2339: Property '...' does not exist on type 'Element'."

我正在努力使用 browser.addCommand(),我使用 WebDriverIO 版本 6 + 打字稿,当我尝试向 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' 在类型 'Element' 上不存在。”

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

到目前为止我发现的唯一(不好的)解决方案是每次我调用这种方法时都采摘'@ts-ignore'。

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

-      "types": ["node", "@wdio/sync", "@wdio/jasmine-framework"]
+      "types": ["node", "@wdio/sync", "@wdio/jasmine-framework", "./wdio"]