我正在尝试使用this.evaluate()
调用另一个模块中定义的函数。
代码片段(调用函数)是:
this.waitFor(function check() {
var re = this.evaluate(universe.answer(couponElement, url));
if (re != 'no' & re!='yes' & re!=null) {
couponObj.push(re);
和定义函数的模块是这样的:
var require = patchRequire(require);
var utils = require('utils');
exports.answer = function(couponElement, url) {
var lblInvalidCoupon = 'lblInvalidCoupon';
var tolTipCouponinner='tolTipCouponinner';
var txtFCCoupondisocunt = 'txtFCCoupondisocunt';
var btnRemoveFCCoupon = 'btnRemoveFCCoupon';
var check = $('#txtCouponCode').css('backgroundImage');
if (check.indexOf('ajax-loader.gif')>-1){
return 'no';
} else {
if (document.getElementById(lblInvalidCoupon)!=null){
基本上,我想使用this.evaluate
调用该函数,但无法这样做。
答案 0 :(得分:0)
首先,尝试使用最简单的evaluate
:remote.message
事件从页面中捕获console.log
。
casper.on("remote.message", function(msg) {
console.log("[page] " + msg);
});
this.evaluate(function () {
console.log("Hi phantomworld! I am hello-ing from remote page!");
});
接下来,检查jQuery是否存在:
this.evaluate(function () {
console.log(typeof jQuery);
});
如果是,[page] function
,则jQuery 出现在页面中。你需要挖掘更多...
如果没有,请注入:
var casper = require('casper').create({
clientScripts: [
'includes/jquery.js'
]
});
答案 1 :(得分:-3)
您实际上并未将answer
函数传递给casper.evaluate
,而是将其调用。问题是以这种方式answer
没有在页面上下文中执行,因此没有定义$
。在页面上下文中执行函数的casper.evaluate
是沙箱。它不能使用外部定义的变量。传递的函数必须是自包含的。
要解决这个问题,answer
使用的参数可以作为附加参数传递给casper.evaluate
。
更改行
var re = this.evaluate(universe.answer(couponElement, url));
到
var re = this.evaluate(universe.answer, couponElement, url);
如果页面中没有JQuery,您需要关注sudipto's answer。