使用Mocha进行无头测试> Chai> PhantomJS。一切都是设置和工作,但我正在尝试填写一个包含错误凭据的表单,然后检查是否创建了一个DOM元素。
我想要做的基本上是这样的:
it('should display error message string for bad credentials', function(done) {
page.evaluate(function() {
document.querySelector('input.form-input[type="text"]').value = 'foo@bar.com';
document.querySelector('input.form-input[type="password"]').value = 'wrongpass';
document.querySelector('input.form-action-b').click();
return document.querySelector('div.status-oops p').innerText;
}, function(result) {
result.should.equal('Username and password do not match.');
done();
});
});
但是我得到了:“未捕获的TypeError:无法读取属性'应该'为null”
...因为div.status-oops还没有。我在Chrome控制台中获得了相同的结果,但如果我在几秒钟之后尝试显示相同的文字,那就可以了。
任何想法如何延迟回报?
答案 0 :(得分:1)
看看waitfor.js。您可以设置计时器以等待元素出现。您的代码将类似于:
it('should display error message string for bad credentials', function(done) {
page.evaluate(function() {
document.querySelector('input.form-input[type="text"]').value = 'foo@bar.com';
document.querySelector('input.form-input[type="password"]').value = 'wrongpass';
document.querySelector('input.form-action-b').click();
});
waitFor(function() {
// wait for 'div.status-oops p' to appear
return page.evaluate(function() {
return document.querySelector('div.status-oops p').is(":visible");
});
}, function() {
// on appearance, grab the innerText and compare it to the desired value
result = page.evaluate(function() {
return document.querySelector('div.status-oops p').innerText;
});
result.should.equal('Username and password do not match.');
phantom.exit();
});
});