我正在尝试使用TypeScript从Protractor解决方案中的WebDriver承诺返回一个值,但我得到undefined
作为响应。
get nameInput(): string {
var value: string;
this.nameElement.getAttribute('value').then(v => value = v);
return value;
}
在上面的例子中,函数似乎没有等待返回的承诺,因此我试图摆脱getter样式并将返回类型声明为WebDriver的承诺:
getNameInput(): webdriver.promise.Promise<string> {
var nameElement = element(by.id('name'));
return nameElement.getText().then(v => { return v });
}
但我得到Function
作为返回而不是v
的值。似乎承诺没有被Jasmine的expect
打开,就像在JS中运行时一样。
我知道我可以在期望中直接运行promise,但理想情况下我会在任何期望之外创建所有函数的逻辑,这样我就能用任何(如果有的话)参数来满足函数调用的期望 - 而不是用promise逻辑污染测试用例。
有什么想法吗?
答案 0 :(得分:5)
您无需解析承诺,只需返回:
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");