【问题标题】:Return Promise Value from Page Object using TypeScript使用 TypeScript 从页面对象返回 Promise 值
【发布时间】:2016-05-18 11:03:01
【问题描述】:

我正在尝试使用 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 中运行它时发生的那样。

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

有什么想法吗?

【问题讨论】:

    标签: angularjs selenium typescript webdriver protractor


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2017-08-01
      • 2018-09-08
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      相关资源
      最近更新 更多