Пользовательские модули casperjs
Я расширил свои 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?
1 ответ
Это потому, что вы не инициализировали свою первую веб-страницу с помощью метода start() (я думаю). Вы можете попытаться вернуть "а" HTML из ничего, вам нужно указать первую страницу.
Смотрите ниже или как я могу превратить часть моего скрипта casperjs в функцию, чтобы я мог использовать его несколько раз
Вы можете просто сделать скрипт с вашими пользовательскими методами, вам не нужно создавать другой модуль.:
ex: 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();
});
Смотрите также: https://gist.github.com/n1k0/3813361