【问题标题】:CasperJS - access JS propertyCasperJS - 访问 JS 属性
【发布时间】:2014-05-07 14:06:46
【问题描述】:

我想测试 mns.core 的值是在 CasperJS 中设置的。我尝试了以下方法:

casper.test.begin('Upholstery contains stuff', 3, function (test) {
    casper.start('http://127.0.0.1/layouts/en_gb/page-upholstery.php', function () {
        var mns = this.evaluate(function(){
            return mns;
        });
        console.log(typeof mns.core);
        test.assert(typeof mns.core == "object","mns has properties");
    });



    casper.run(function() {
        test.done();
    });
});

mns 在 casperJS 中被设置为一个对象,当通过浏览器加载时,mns.core 是一个对象,但是它未能通过此测试,因为它显示为未定义。

【问题讨论】:

  • 也许你可以直接在 Casper 中使用 utils 模块:Casper Utils,还有一些有用的功能,如isType()isObject() 等...
  • 谢谢,Casper Utils 看起来会派上用场,但下面也解决了我的问题 :)

标签: testing phantomjs casperjs


【解决方案1】:

另外,我认为test.assertEval()this.evaluate() + another test.assert 更容易使用,它的作用相同,所以:

this.test.assertEval(function() {
    return typeof mns.core === 'object';
    },"mns has properties");

【讨论】:

  • 我不知道为什么这在我的方法之上有效,因为它只是一种速记方法,但它有效,所以一切都很好。
  • 是的,这很奇怪,对我来说它应该也可以工作,你可以将一个对象从 DOM 上下文传递回 casper 上下文(问题就在这里),所以我不明白为什么它是未定义的,什么你有console.log(JSON.stringify(mns,4,'\t'); 吗?没什么太正常的。
  • mns 是页面中的一个对象。如果我在浏览器中加载页面,并在控制台中输入mns.core,它会返回所有属性。然而;在页面上,如果我执行mns.swatch 我会得到一个结果,在 CasperJS 中我会得到未定义。它是通过依赖注入器加载的——可能是这样吗?
  • 我使用了.waitForResource,现在可以正常使用了 :) 再次感谢 Fanch 的帮助
  • 原来如此!别客气。虽然我不明白为什么它与 assertEval() 一起工作,但如果资源没有加载:p 可能是随机失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2017-09-24
  • 2018-01-14
  • 1970-01-01
  • 2021-07-06
  • 2012-07-05
  • 2014-10-08
相关资源
最近更新 更多