【问题标题】:Protractor returning a value from a promise量角器从承诺中返回一个值
【发布时间】:2015-10-25 04:08:56
【问题描述】:

我正在编写一个测试,通过查看屏幕上包含关卡计数的文本值来查看我的代码是否正在删除关卡。

  it 'allows deleting level versions', ->
    browser.get('/api#/costings')
    element(By.id("edit")).click()
    startCount = element(By.id("versions_count")).getText().then( (count) ->
      return count
    )

    element(By.id("versions")).click()
    first=element.all(By.id("listing")).first()
    first.element(By.id("delete")).click()
    helper.accept_dialog()

    element(By.id("back")).click()
    expect(element(By.id("versions_count")).getText()).toEqual(startCount - 1)

这里的问题是 startCount 结果是一个函数。我似乎无法将 startCount 转换为整数,以便查看计数是否减少了 1 项。

它给了我错误;

  1) edit an existing costing allows deleting level versions
   Message:
     Expected '1' to equal NaN.

如果我尝试 parseInt(startCount) 我会得到同样的错误。

【问题讨论】:

  • 你的 startCount 是多少。你从哪里得到它?

标签: angularjs coffeescript protractor


【解决方案1】:

变量startCount 是一个promise,所以startCount - 1 没有意义:没有从promise 到它的resolved 值的自动类型转换,所以你不能从中减去一个。

您可以做的是创建一个 promise,其解析值是预期的版本计数:

expectedCount = element(By.id("versions_count")).getText().then( (count) ->
  return (count - 1).toString();
)

然后您可以将此承诺传递给toEqual,因为它会在控制流中的适当位置自动解开承诺

expect(element(By.id("versions_count")).getText()).toEqual(expectedCount)

【讨论】:

  • 现在我得到 Expected '1' 等于 1,如果我尝试在 getText 部分使用 parseInt 我得到 NaN 等于 { then : Function, cancel : Function, isPending : Function },如果我尝试在 expectedCount 上使用 toString() 我得到 '1' 等于 '[object Object]'
  • @map7 我已经编辑了解决该问题的答案(完全按照您的编辑建议,但已被其他审阅者拒绝)
  • 是的,我找不到任何其他方法。似乎如果您尝试将 int 更改为 string 或 string 更改为 int 在该代码中的其他任何地方都不起作用。
【解决方案2】:
it("Verify Add Element", function(){
        basePage.gotoAssetsPage();
        var numberOfElementsBefore = assetsPage.getTotalAssertsNumber();//get text from counter
        assetsPage.createAsset(); // add one object on the page
        var numberOfElementsAfter = assetsPage.getTotalAssertsNumber(); // get text from counter after creation of object

        numberOfElementsBefore.then(function(startNumberText) {
            console.log("Number of Asserts before test is " + startNumberText);
            return startNumberText;
        });
        numberOfElementsAfter.then(function(endNumberText) {
            console.log("Number of Asserts after test is " + endNumberText);
            expect(assertsBefore).toBe((endNumberText-1).toString());
        });   
    });

在我正在验证的这个测试中,文本之前的元素数量将等于测试之后的元素数量减去 1。 如果我不使用 .toString(),测试结果将是:Expect '21' to 21。因此,转换为字符串有效。也许有人有更好的解决方案:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2018-03-10
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    相关资源
    最近更新 更多