Javascript Zombie.js按下按钮如何访问浏览器的后ajax版本?
我使用zombie.js自动测试浏览器操作,在本例中,单击按钮提交表单 在测试之外,在真实的浏览器中,当单击按钮时,会触发AJAX请求。当AJAX请求完成时,两个Javascript Zombie.js按下按钮如何访问浏览器的后ajax版本?,javascript,ajax,node.js,mocha.js,zombie.js,Javascript,Ajax,Node.js,Mocha.js,Zombie.js,我使用zombie.js自动测试浏览器操作,在本例中,单击按钮提交表单 在测试之外,在真实的浏览器中,当单击按钮时,会触发AJAX请求。当AJAX请求完成时,两个div.alert元素被添加到文档正文中 下面的测试按下按钮并触发请求,但是当测试随后查询文档以查找预期的div元素时,它找不到它们。我相信测试是在查询AJAX调用完成之前存在的文档的“旧”版本。我的问题是:在AJAX调用完成并添加元素之后,如何访问存在的文档版本 context("when visited on the 'new' p
div.alert
元素被添加到文档正文中
下面的测试按下按钮并触发请求,但是当测试随后查询文档以查找预期的div元素时,它找不到它们。我相信测试是在查询AJAX调用完成之前存在的文档的“旧”版本。我的问题是:在AJAX调用完成并添加元素之后,如何访问存在的文档版本
context("when visited on the 'new' page", function(){
before(function(){ return browser.visit('/'); });
before(function(){ return browser.clickLink('new'); });
context("when submitted with invalid values", function(){
before(function(){
return browser.pressButton("Submit")
})
it("flash should include error messages", function(){
var messages = browser.queryAll(".alert")
console.log(messages)
expect(messages.length).toEqual(2)
})
})
})
注意:我一直在研究zombie.js测试,发现使用了
async
和await
,但当我尝试在.js文件中使用这些关键字时,它无法识别它们。这可能是一个单独的问题,但如果解决方案需要async/await,如何使mocha能够识别这些关键字?您可以更改ajax调用,以便在更新屏幕后,它们针对名为“action completed”的主体发送事件。然后在测试中,您可以创建一个侦听器函数,该函数返回一个承诺,该承诺在收到事件之前不会解析
const actionAndWait = ( action, eventName ) => new Promise( resolve => {
const listener = () => {
browser.body.removeEventListener( eventName, listener );
resolve();
};
browser.body.addEventListener( eventName, listener );
action();
browser.wait();
} );
你的“之前”会打电话给我
return actionAndWait( () => browser.pressButton("Submit"), "action-completed" );
您可以更改ajax调用,以便在更新屏幕后,它们针对称为“action completed”的主体发送事件。然后在测试中,您可以创建一个侦听器函数,该函数返回一个承诺,该承诺在收到事件之前不会解析
const actionAndWait = ( action, eventName ) => new Promise( resolve => {
const listener = () => {
browser.body.removeEventListener( eventName, listener );
resolve();
};
browser.body.addEventListener( eventName, listener );
action();
browser.wait();
} );
你的“之前”会打电话给我
return actionAndWait( () => browser.pressButton("Submit"), "action-completed" );
async/await
是ES7的一项功能。你可能会找到一种方法来打开它。然而,我看不出这对你有什么帮助。问题是让您的测试等待修改DOM。我根本不使用僵尸,但我使用的是Selenium,它附带的函数可以实现这一点。如果Zombie没有等效项,您可以随时轮询DOM。感谢selenium的建议,我需要修改我之前的评论:async/await
没有进入ES7(==ES2016)。ES2016像昨天一样获得了批准(我刚刚了解到),但他们从中删除了async/await
。它可能是该语言下一版本的一部分。async/await
是ES7的一项功能。你可能会找到一种方法来打开它。然而,我看不出这对你有什么帮助。问题是让您的测试等待修改DOM。我根本不使用僵尸,但我使用的是Selenium,它附带的函数可以实现这一点。如果Zombie没有等效项,您可以随时轮询DOM。感谢selenium的建议,我需要修改我之前的评论:async/await
没有进入ES7(==ES2016)。ES2016像昨天一样获得了批准(我刚刚了解到),但他们从中删除了async/await
。这可能是该语言下一次修订的一部分。