Jasmine 茉莉如何';期望';等待量角器承诺解决

Jasmine 茉莉如何';期望';等待量角器承诺解决,jasmine,protractor,Jasmine,Protractor,我正在做e2e测试。 我有一个确认弹出窗口,在我点击按钮之前,它在页面上不存在。 一旦确认弹出窗口被创建,我就会从那里的元素中获取文本 之后,我单击OK按钮,这将导致确认弹出窗口从DOM中删除,并使用我之前获得的文本值向DOM添加一个新元素 问题是,因为getText()返回一个承诺,当我进行比较时,第一个元素不在屏幕上,测试失败 如果我确实希望在屏幕上显示确认弹出窗口时,我可以看到确认弹出元素的文本 Jasmine期望()如何解决承诺 提前谢谢诸如此类的事 element(by.id('dan

我正在做e2e测试。 我有一个确认弹出窗口,在我点击按钮之前,它在页面上不存在。 一旦确认弹出窗口被创建,我就会从那里的元素中获取文本

之后,我单击OK按钮,这将导致确认弹出窗口从DOM中删除,并使用我之前获得的文本值向DOM添加一个新元素

问题是,因为getText()返回一个承诺,当我进行比较时,第一个元素不在屏幕上,测试失败

如果我确实希望在屏幕上显示确认弹出窗口时,我可以看到确认弹出元素的文本

Jasmine期望()如何解决承诺

提前谢谢诸如此类的事

element(by.id('dangerous-activity')).click().then(function () {
  element(by.id('confirmation-text')).getText().then(function (textToConfirm) {
    element(by.id('confirm-button')).click().then(function () {
      element(by.id('new-element')).getText().then(function (newText)) {
        expect(newText).toBe(textToConfirm);
      });
    });
  });
});
在这里,所有的承诺都被明确地解决了,所以Jasmine不再需要解决任何承诺

您可以让
expect
解析
新元素
承诺,将最后两行替换为:

    ....
      expect(element(by.id('new-element')).getText()).toBe(textToConfirm);
    ....

但是,您不能以相同的期望获得
文本来确认
,因为正如您所指出的,它在那时已经消失了。

这应该是实现您想要的最简单的方法:

$('#open-popup').click();
var textToConfirm = $('#popup-text').getText();
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirm);
注意:这将不起作用:

$('#open-popup').click();
var textToConfirmElement = $('#popup-text');
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirmElement.getText());

因为在弹出窗口关闭后,您会看到文本。

hi这很有效。我使用了一些不同形式的解决方案,它解决了这个问题。谢谢