使用TypeScript从Page Object返回Promise Value

zal*_*517 3 selenium webdriver angularjs typescript protractor

我正在尝试使用TypeScript在Protractor解决方案中从WebDriver承诺返回一个值,但我得到undefined了响应.

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

在上面的例子中,似乎函数没有等待返回的promise,因此我尝试离开getter样式并将返回类型声明为WebDriver的承诺:

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

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

}
Run Code Online (Sandbox Code Playgroud)

但我得到Function的回报而不是价值v.似乎承诺没有被Jasmine打开expect,因为它在JS中运行时会发生.

我知道我可以在期望中直接运行promise,但理想情况下我会在任何期望之外创建所有函数的逻辑,这样我就可以只使用任何(如果有的话)参数来满足函数调用的期望 - 而不是污染具有承诺逻辑的测试用例.

有任何想法吗?

ale*_*cxe 5

您不需要解决承诺,只需返回它们:

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

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

getNameInput().then(v => { console.log(v) });
Run Code Online (Sandbox Code Playgroud)

请注意,您还expect()可以隐式解决它:

expect(getNameInput()).toEqual("Expected Value");
Run Code Online (Sandbox Code Playgroud)