2

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

我有一个enterBtn按钮,当点击它时,它会显示resultsTable和一个clearBtn. enterBtn总是存在的。

我正在尝试测试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;

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

任何帮助将非常感激!谢谢。

4

1 回答 1

0

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

您还可以使用
expect(resultsTable.isPresent()).toBe(false)来简化您的期望

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

于 2017-05-02T08:55:46.803 回答