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

Posted

技术标签:

【中文标题】使用 addCommand (webdriverio) 添加自定义命令时出现 ts 错误【英文标题】:having ts error when adding custom commands with addCommand (webdriverio) 【发布时间】:2018-03-27 00:33:33 【问题描述】:

我用addCommand添加函数,使用时出现如下错误:

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

例如:

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

最后一行会有错误。

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

【问题讨论】:

【参考方案1】:

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

假设您使用@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

【讨论】:

嗨伙计,我也有同样的情况。我已经添加了一个自定义命令,就像上面的全局、命名空间等一样。还编写了一个函数,并将该函数添加到浏览器对象中。但是当我试图访问规范文件中添加的功能时。它给了我错误消息—— browser. 不是一个函数。我们是否需要在 wdio.conf.js 的“之前”挂钩中添加任何内容。你能建议吗。 TIA【参考方案2】:

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

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

第二:我认为这只是您在此处键入时的拼写错误,因此实际答案是点击此链接以了解有关声明自定义命令和实施它们的更多信息: Where do I add custom commands in WebdriverIO with wdio testrunner?

【讨论】:

以上是关于使用 addCommand (webdriverio) 添加自定义命令时出现 ts 错误的主要内容,如果未能解决你的问题,请参考以下文章

docker 源码分析client2

用CKEDITOR 做自助上传的解决方案2

vs 2015工具栏添加Tab Order

AutoCAD二次开发(2020版)--3,执行ARX文件--

在 Windows 10 C# 中更改 PC 名称

DataReader 到 Linq'd 查询 Dictionary(String, Object)