我目前正在使用
注入一个include.js.casper.options.clientScripts.push('./include.js')
这是include.js(确保所有ajax请求都已完成:Using $.ajaxStop() to determine when page is finished loading in CasperJS)
(function(){
window._allAjaxRequestsHaveStopped = false;
var interval;
console.log('injecting include js')
$.ajaxSetup({'global':true});
$(document).ajaxStop(function() {
console.log('NO MORE outstanding ajax calls');
if (interval) {
clearInterval(interval);
interval = null;
}
interval = setTimeout(function() {
window._allAjaxRequestsHaveStopped = true;
}, 1000);
});
$(document).ajaxStart(function() {
console.log('NEW ajax call');
if (interval) {
clearInterval(interval);
interval = null;
}
});
console.log('include js loaded');
})();
问题在于有时ajaxStop& ajaxStart函数不会被加载但它总是输出第一个console.log'injecting include js'。
CasperJS脚本
casper.waitForAjax = (callback) ->
fn_wait = ->
casper.evaluate ->
return window._allAjaxRequestsHaveStopped
casper.waitFor fn_wait, callback
casper.options.clientScripts.push('./include.js')
casper.options.waitTimeout = 10000
describe 'Main Test', ->
before ->
casper.start 'url', ->
phantom.clearCookies()
it 'Test Case 1', ->
casper.then ->
@click 'button'
casper.waitForAjax ->
// Move on with test
所以有时我的代码会超时等待window._allAjaxRequestsHaveStopped转为true而其他时候它会正常工作。我也在我知道有ajax请求的同一页面上进行测试。有谁知道如何解决这种不一致问题?
答案 0 :(得分:0)
知道了!因此,似乎只有部分脚本被加载,一旦它到达$(document).ajaxStop()就会出现错误,因为jQuery尚未加载到页面上。 CasperJS有时会在加载jQuery之后注入include文件,这就是它有时工作的原因。
通过下载jQuery并在包含文件之前手动注入它来修复它:
casper.options.clientScripts.push('./jquery-2.1.4.min.js')
casper.options.clientScripts.push('./include.js')