gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:47 24 4
gpt4 key购买 nike

我正在使用 addCommand 添加函数,但在使用时出现以下错误:

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

例如:

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

最后一行会有错误。

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

最佳答案

今天我为同样的问题苦苦挣扎了很长一段时间,但我明白了。

假设您正在使用@types/webdriverio,您需要使用自定义命令的声明来扩展WebdriverIO.Client 接口(interface)。如果可以,请确保您的自定义命令是在 .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 .

关于typescript - 使用 addCommand (webdriverio) 添加自定义命令时出现 ts 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46754197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com