使用Protractor和chai按照承诺检查元素是否存在

时间:2017-04-29 20:29:44

标签: javascript protractor chai chai-as-promised

我无法测试node.js应用中是否缺少元素。

我有一个enterBtn按钮,点击后会显示resultsTableclearBtnenterBtn始终存在。

我正在尝试测试resultsTable在我点击clearBtn时消失,我遇到了麻烦。

'use strict';

const chai = require('chai');
chai.use(require('chai-as-promised'));
chai.should();
const expect = chai.expect;

require('./lib/test-helper');

const until = protractor.ExpectedConditions;

describe('My App', function() {
    it('should clear resultsTable clearBtn is clicked', function(){
        var resultsTable = element(by.id('results-table'));
        clearBtn.click();

        expect(resultsTable.isPresent()).to.eventually.be.false;
      }); 
});

我也试过这样做:

resultsTable.isPresent().then(function(bln) {
     expect(bln).to.equal(false);
});

这也不起作用:

"Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test."

但是,如果我尝试使用下面的代码测试始终存在的enterBtn的存在,那么它可以正常工作。

var enterBtn = element(by.id('enter'));
expect(enterBtn.isPresent()).to.eventually.be.true;

我不确定发生了什么......

任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:0)

点击clearBtn后,元素会立即消失吗? 如果不是,请尝试在clearBtn.click()之后进行休眠,以确保该对象在预期之前消失。

您还可以使用
来简化您的期望 期望(resultsTable.isPresent())。砥(假)

describe('My App', function() {
    it('should clear resultsTable clearBtn is clicked', function(){
        var resultsTable = element(by.id('results-table'));
        clearBtn.click();
        browser.sleep(2000);
        resultsTable.isPresent().then(function(bln) {
            expect(bln).toBe(false);
        });
    }); 
});

如果对象可能需要2秒以上的时间,那么你可以尝试使用这个递归函数https://stackoverflow.com/a/43679616/7761311