使用addCommand(webdriverio)添加自定义命令时出现ts错误

时间:2017-10-15 10:50:04

标签: typescript webdriver-io

我正在使用addCommand添加函数,并在使用它时收到以下错误:

[ts] Property 'WaitForElementsAmount' does not exist on type 'Client<void>'.

例如:

browser.addCommand("test" , () => {console.log("test"); })
browser.test();

最后一行会有错误。

它实际上有效(js代码是正确的),并且测试运行良好。 我的问题是如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

今天我在同一个问题上挣扎了很长一段时间,但我明白了。

假设您正在使用@ types / webdriverio,则需要使用自定义命令的声明扩展WebdriverIO.Client接口。如果可以,请确保您的自定义命令在.ts文件中定义。然后你可以做这样的事情:

declare global {
    namespace WebdriverIO {
        interface Client<T> {
            doCustomThing: typeof doCustomThing;
        }
    }
}

function doCustomThing() {
    console.log("test");
}

//both of these should now work
browser.addCommand('doCustomThing' , doCustomThing)
browser.doCustomThing();

如果无法在typescript中实现自定义命令,您仍然可以在.d.ts文件中单独声明它们,如下所示:

declare namespace WebdriverIO {
    interface Client<T> {
        doCustomThing(): void;
    }
}

但是,您必须在单独的文件中维护单独的声明和实现,并确保它们保持同步。我不会去那条路,除非你别无选择,只能将实现保持在普通的JS中。

使用Typescript 2.6.1,webdriverio 4.9.10和@ types / webdriverio 4.8.6成功测试了这个。

注意:在第一个示例中,您必须指定要在全局范围内更改WebdriverIO命名空间的定义,但在第二个示例中,您将隐式地在全局范围内工作。那是因为第一个是在模块内,而第二个不是模块,因为它不导入或导出任何东西。有关详细信息,请参阅https://www.typescriptlang.org/docs/handbook/modules.html

答案 1 :(得分:0)

首先:您的代码中存在一些拼写错误,您缺少关闭browser.addCommand()。应该是这样的:

browser.addCommand("test" , () => {console.log("test"); });
browser.test();

第二:我认为在这里输入时只是一个拼写错误,所以实际答案是按照此链接了解更多关于声明自定义命令并实现它们的信息: Where do I add custom commands in WebdriverIO with wdio testrunner?