以下代码获取站点中存在的所有图像,并检查图像是否已加载到casperjs中。问题是我无法获得在运行时动态创建的图像。我怎么做?。任何帮助都将不胜感激。
1)以下代码获取静态图像,而不是获取在运行时创建的图像。
var imagesArray = [];
function getImages() {
var scripts = document.querySelectorAll('img[src]');
return Array.prototype.map.call(scripts, function (e) {
return e.getAttribute('src');
});
};
casper.start(url, function () {
imagesArray = this.evaluate(getImages);
var self = this;
imagesArray.forEach(function (item) {
if (self.resourceExists(item)) {
self.echo(item + ' loaded');
} else {
var message = item + ' not loaded';
self.echo(message, 'ERROR');
}
});
});
casper.run(function() {this.test.renderResults(true);});
2)我也尝试使用waitForselector
,但它没有用。它说“等待超时发生且测试用例失败”。请参阅以下代码
var imagesArray = [];
function getImages() {
var scripts = document.querySelectorAll('img[src]');
return Array.prototype.map.call(scripts, function (e) {
return e.getAttribute('src');
});
};
casper.start(url);
casper.waitForSelector('.card-container', function() {
console.log("hi");
imagesArray = this.evaluate(getImages);
var self = this;
imagesArray.forEach(function (item) {
if(self.resourceExists(item)) {
self.echo(item + ' loaded');
} else {
var message = item + ' not loaded';
self.echo(message, 'ERROR');
}
});
});
casper.run(function() {
this.echo('Image loading test finished');
this.exit();
});
答案 0 :(得分:2)
您获取图像源的功能看起来很好 - 问题显然是它在页面被修改之前运行。尝试识别页面是否被修改(尝试不同的选择器,检查Casper.options.pageSettings是否允许脚本执行其工作)。
casper.start(url);
casper.waitForSelector('.sticky-menu-active', function() {
this.echo('...found selector ...try getting image srcs now...');
}, function() {
this.echo('even after 10secs not found it - some scripts failed to execute on casperjs/phantomjs ?');
}, 10000);
casper.run(function() {
this.echo('test finished');
this.exit();
});
答案 1 :(得分:1)
each和waitFor的文档。这可能会有所帮助(未经测试):
var casper = require('casper').create();
var images = [];
casper.GetImages = function() {
images = this.evaluate(function() {
var scripts = document.querySelectorAll('img[src]');
return Array.prototype.map.call(scripts, function (e) {
return e.getAttribute('src');
});
});
this.echo('** Successfully got the images... **');
return true;
};
casper.start(url);
casper.then(function() {
this.echo('** Getting the images... **');
this.waitFor(function check() {
return this.GetImages;
});
this.each(images, function(self, image) {
this.echo('Item loaded: ' + image);
});
});
casper.run(function() {
this.echo('** All done... **');
this.exit();
});
答案 2 :(得分:1)
您可以尝试在pageLoadFinsihed
上执行此操作。请尝试以下代码(未经测试)
var imagesArray = [];
function getImages() {
var scripts = document.querySelectorAll('img[src]');
return Array.prototype.map.call(scripts, function (e) {
return e.getAttribute('src');
});
};
casper.start(url);
casper.on('load.finished', function () {
console.log("hi");
imagesArray = this.evaluate(getImages);
var self = this;
imagesArray.forEach(function (item) {
if(self.resourceExists(item)) {
self.echo(item + ' loaded');
} else {
var message = item + ' not loaded';
self.echo(message, 'ERROR');
}
});
});
casper.run(function() {
this.echo('Image loading test finished');
this.exit();
});