如何在 TypeScript 中反映量角器 (WebDriver) 动作的链接 (ControlFlow)

Posted

技术标签:

【中文标题】如何在 TypeScript 中反映量角器 (WebDriver) 动作的链接 (ControlFlow)【英文标题】:How to reflect chaining (ControlFlow) of Protractor (WebDriver) actions in TypeScript 【发布时间】:2016-10-21 20:20:24 【问题描述】:

在量角器测试中,可以像这样在元素上链接“clear”和“sendKeys”等操作:

element(by.id('myId')).clear().sendKeys('123456789')

我喜欢它简洁的风格。但是为什么它会起作用呢?

根据webdriver.Element.clear()的API Docs,clear()的返回类型是webdriver.promise.Promise.<void>

当我使用 TypeScript (1.8.x) 编译它时,编译器会抱怨 Promise 上没有名为 sendKeys() 的属性。我认为情况确实如此。

由于WebDriver ControlFlow Magic,我相信这在运行时有效。

如何扩展 Protractor 的 TypeScript Declaration File,以反映此 ControlFlow-Magic 并使我的 TypeScript 编译器满意?

【问题讨论】:

好吧,正确的返回值是this,它是最近添加的,用于显式链接。它必须是 Promise<void> AND this 作为返回类型,但假设 this 已经是它应该工作的承诺。 【参考方案1】:

您可以将其转换为 <any> 类型,如下所示:

(<any> someInput.clear()).sendKeys()

丑陋,但没有 TS 投诉。

【讨论】:

【参考方案2】:

我们最终像这样将函数添加到命名空间

declare namespace webdriver.promise 
    interface Promise<T> 
        sendKeys(s: String);
    

【讨论】:

以上是关于如何在 TypeScript 中反映量角器 (WebDriver) 动作的链接 (ControlFlow)的主要内容,如果未能解决你的问题,请参考以下文章

如何使 PhpStorm 在 .vue 文件中反映 TypeScript tsconfig.json?

如何使用量角器返回此复选框元素?

在量角器中使用本机承诺

错误:TSError:⨯ 无法编译 TypeScript

如何检查图像是不是在 Azure Blob 存储上发布?

失败:元素不可交互:量角器/硒自动化(ElementNotVisibleException)