使用TypeScript从Page Object返回Promise Value

时间:2016-02-08 17:18:29

标签: angularjs selenium typescript webdriver protractor

我正在尝试使用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逻辑污染测试用例。

有什么想法吗?

1 个答案:

答案 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");