我已经扩展了我的casperjs以使用一些像这样的新方法:
casper.getTxt = function(selector) {
if(this.exists(selector)) {
return this.getHTML(selector);
}
else {
return '';
}
};
我已经在我写的每个脚本上添加了这些函数。
所以我在其他模块(custom.js
,colorizer.js
等)放置的同一位置创建了一个新文件mouse.js
。
custom.js有以下代码:
var require = patchRequire(require);
var casper = require('casper').create();
var getTxt = function(selector) {
if(casper.exists(selector)) {
return casper.getHTML(selector);
}
else {
return '';
}
};
exports.getTxt = getTxt;
在我的剧本中,我是:
var cust = require('custom');
this.echo(cust.getTxt('a'));
但我收到错误:Casper is not started, can't execute exists()
我做错了什么? 重用casperjs代码的正确方法是什么?
答案 0 :(得分:4)
这是因为您还没有使用start()方法初始化您的第一个网页(我认为)。 你可能会试着回来一个'什么都不是HTML,你必须指定第一页。
见下文或how can i turn part of my casperjs script into a function so i can use it multipul times
您可以使用自定义方法制作脚本,不需要制作其他模块。 :
例如:functions.js
casper.getTxt = function(selector) {
if(this.exists(selector)) {
return this.getHTML(selector);
}
else {
return '';
}
};
或
var getTxt = function(selector) {
if(casper.exists(selector)) {
return casper.getHTML(selector);
}
else {
return '';
}
};
然后在主脚本中调用此脚本:
main.js
phantom.injectJs("functions.js"); //inject your script
/**
* Begin a scenario
*/
casper.test.begin('\n*************** Suite of planned test : scenario 1 **************\n', 1, function suite(test) {
/**
* start : initialize and open the first page
*/
casper.start('yourUrl', function() {
//now you can call your custom methods
this.echo(this.getTxt('a')); //or this.echo(getTxt('a')) if normal function
this.echo(this.getTitle());
this.echo('Adresse : ' + this.getCurrentUrl() + '\n');
});
/**
* add a new step in the stack
*/
casper.then(function () {
this.test.comment('------------- step 1 ------------- : ');
//this.echo("step 1");
});
/**
* add a second step in the stack
*/
casper.then(function () {
this.test.comment('------------- step 2 ------------- : ');
//this.echo("step 2");
var _x = require('casper').selectXPath;
this.test.assertExists(_x('//*[@role="banner"]'),'header present');
});
/**
* run() executes them (steps):
*/
casper.run(function() {
this.test.comment('---------------- Every steps done for scenario 1 ----------------\n');
//test.done() -> when every steps executed, scenario over, feedback about tests
test.done();
});
如果要导出nodeLike:
custom.js
var getTxt = function(selector) {
if(casper.exists(selector)) {
return casper.getHTML(selector);
}
else {
return '';
}
};
exports.getTxt = getTxt;
带有要求:
var cust = require('custom');
/**
* Begin
*/
casper.test.begin('\n*************** Suite of planned test : scenario 1 **************\n', 1, function suite(test) {
/**
* start : open the first url
*/
casper.start('yourUrl', function() {
this.echo(cust.getTxt('a'));
this.echo('Adresse : ' + this.getCurrentUrl() + '\n');
});
casper.run(function() {
this.test.comment('---------------- Every steps done for scenario 1 ----------------\n');
//test.done() -> when every steps executed, scenario over, feedback about tests
test.done();
});