angularjs - 使用 TypeScript 从页面对象返回 Promise 值

标签 angularjs selenium typescript webdriver protractor

我正在尝试使用 TypeScript 从 Protractor 解决方案中的 WebDriver promise 返回一个值,但我收到 undefined 作为响应。

get nameInput(): string {
    var value: string;
    this.nameElement.getAttribute('value').then(v => value = v);
    return value;
}

在上面的例子中,函数似乎没有等待返回的 promise ,因此我尝试摆脱 getter 风格并将返回类型声明为 WebDriver 的 promise :

getNameInput(): webdriver.promise.Promise<string> {

    var nameElement = element(by.id('name'));
    return nameElement.getText().then(v => { return v });

}

但我得到的是 Function 作为返回值,而不是 v 的值。似乎 promise 没有被 Jasmine 的 expect 解包,就像在 JS 中运行它时发生的那样。

我知道我可以直接在期望中运行 promise ,但理想情况下,我会在任何期望之外创建所有函数的逻辑,这样我就可以只用任何(如果有的话)参数为函数调用提供期望——而不是用 promise 逻辑污染测试用例。

有什么想法吗?

最佳答案

您不需要解析 promise ,只需返回它们:

getNameInput(): webdriver.promise.Promise<string> {
    var nameElement = element(by.id('name'));
    return nameElement.getText();
}

然后您需要从 getNameInput() 返回一个实际值 - 在您的测试中解决它:

getNameInput().then(v => { console.log(v) });

请注意,您还让 expect() 隐式解析它:

expect(getNameInput()).toEqual("Expected Value");

关于angularjs - 使用 TypeScript 从页面对象返回 Promise 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35275485/

相关文章:

python - 在 Jenkins 代理上运行测试时如何使用 Selenium 捕获屏幕截图

c# - .Text 在 Selenium PhantomJS C# 中不起作用

python - 使用 gunicorn 时如何设置 django 测试服务器?

typescript - 非规范化 Array<A> 和 Array<B> where 子句为真,将 B 设置为 A 的命名属性

angularjs - 无法实例化 Controller Angular 新路由器

angularjs - Angular 指令之间的依赖关系

jquery - CSS 动画汉堡菜单到 X

javascript - Google map 自定义信息窗口

javascript - 使用 Multer 将图像保存在 MongoDB 后端作为来自 Angular 的文件,它无法正常工作

typescript - Vue `install` 函数有类型吗?属性 `directive` 应该存在于类型 `Vue` 上吗?