【发布时间】:2019-12-11 09:48:58
【问题描述】:
我正在尝试使用一些其他方法来扩展 Protractor 的 ElementFinder。 我这样做的方式与我扩展其他类的方式完全相同,它可以毫无问题地工作。 在一个名为“protractor-extension.ts”的单独文件中,包含模块声明和方法实现:
declare module 'protractor/built/element' {
export interface ElementFinder {
safeClick() : Promise<void>;
}
}
(protractor.ElementFinderas any).safeClick= function () {
const _self = this as protractor.ElementFinderas ;
return await browser.wait(ExpectedConditions.elementToBeClickable(self), 5000)
.then(function() {
return self.click(); //if found
}, function() {
console.error(`Element is not clickable`); //error
});
}
然后将该文件导入到使用 safeClick() 的 .spec 文件中,并带有“import './extensions/protractor-extension.ts';”
该函数已被识别,当在任何 ElementFinder 上使用它时,我会立即在代码完成中得到它。
问题:在运行时我总是得到“失败:myButton.safeClick 不是一个函数”
正如我所说,如果我将整个示例 1:1 替换为 moment.js 示例,它就可以工作。所以它似乎与量角器中的ElementFinder有关? 与该主题相关的所有现有帖子也建议完全按照我所做的那样做,但其中大多数都已过时(
感谢任何能引导我找到正确解决方案的提示。
编辑: 以下是扩展方法的使用方法:
1) 在页面对象中,声明元素
export class AdminPage {
/* ELEMENTS */
public userTable = element(by.id('userTable'));
public unlockBtn = element(by.id('unlockBtn'));
}
2)在测试(.spec文件)中,使用了扩展方法
it('unlock button should disappear after click', async () => {
await this.adminPage.unlockBtn.safeClick();
expect(this.unlockBtn.isPresent()).toBeFalsy();
});
-> .safeClick() 在写入“this.adminPage.unlockBtn..”时自动完成 -> .safeClick() 在运行时无法识别并抛出错误
【问题讨论】:
标签: typescript protractor