我在测试我的节点.js应用程序中缺少元素时遇到问题。
我有一个enterBtn
按钮,单击时,它会显示resultsTable
和一个clearBtn
。enterBtn
始终存在。
我正在尝试测试单击clearBtn
时resultsTable
消失,但我遇到了麻烦。
'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;
我不确定发生了什么...
任何帮助将不胜感激!谢谢。
点击 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