0

我正在尝试使用在另一个模块中定义的函数调用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但无法调用该函数。

4

2 回答 2

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'
    ]
});     
于 2013-10-01T11:59:11.403 回答
-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 的回答

于 2014-06-29T15:26:08.203 回答