我正在尝试使用 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/