有没有办法等待元素出现在DOM中并在Protractor

时间:2017-11-29 12:16:17

标签: angular promise protractor

我有一个警报,在成功事件0.5秒后出现在DOM中,在页面上停留3秒然后消失。我想等待元素出现在DOM上并验证成功消息。我尝试这样做的方式是:

browser.waitForAngularEnabled(false).then(() => {       // disable angular wait because once the alert appears a timer starts for it to disappear.
   browser.wait(this.EC.presenceOf(elem), 15000, "Alert took too long to appear on page").then(() => {
       expect(elem.getText()).toBe(alertMessage);
   })
}).then(() => {
   browser.waitForAngularEnabled(true);     // enable the angular wait
});

好吧,当我实际检查元素中的可用文本时,我在控制台上收到如下错误:

- Expected '' to be 'My Alert Message'.

我实际上并不知道,为什么会发生这种情况。等待承诺需要很长时间才能解决吗?当我到达下一个区块或仅文本消失时,该元素是否会消失?

在无法弄清楚之后我想知道当我检查元素的存在时我是否可以同时验证文本?或者,如果您可以就如何实现我的目标提出建议。

1 个答案:

答案 0 :(得分:1)

我想我在这里想出了问题。一旦元素出现在DOM上,元素内的文本就不会更新,以解决这个问题:

browser.waitForAngularEnabled(false).then(() => {       // disable angular wait because once the alert appears a timer starts for it to disappear.
       browser.wait(this.EC.presenceOf(elem), 15000, "Alert took too long to appear on page").then(() => {
           browser.wait(() => {
               return elem.getText().then((innerText) => {
                   return innerText != '';
               })
           }, 3000, "Alert disappeared before reading the text inside it").then(() => {
               expect(elem.getText()).toBe(alertMessage);
           })
       })
    }).then(() => {
       browser.waitForAngularEnabled(true);     // enable the angular wait
    });

但我不确定是否可以信任执行的速度,以便在警报消失之前读取文本。