【问题标题】:Invoke JS method directly from CasperJS直接从 CasperJS 调用 JS 方法
【发布时间】:2012-12-06 19:50:19
【问题描述】:

我正在尝试使用 CasperJS 测试一个页面,特别是我想戳一堆数据模型。假设我有一个名为 tax 的基本函数,我想确保它使用正确的税率。所以我想要类似的东西:

 this.test.assert(taxes(100, 'Ontario') === 15, "Check ontario tax rate");

而不是填写表格并查看打印的内容。 taxes 方法存在于全局范围内,因此我可以从任何地方(包括从 firebug 或 Chrome 中的控制台)轻松执行它。但它不在 CasperJS 中工作的正确范围(我想?我得到了ReferenceError: Can't find variable: taxes

我好像漏掉了一些简单的东西。

TL;DR:如何在 CasperJS 测试中直接执行页面上的 JS 位?

【问题讨论】:

    标签: javascript testing phantomjs casperjs


    【解决方案1】:

    您是否尝试过使用evaluate()

    相关引用:“像使用浏览器控制台一样执行代码。”

    类似的东西:

    casper.evaluate(function(amount, province) {
    
        return taxes(amount, province);
    
    }, {100, 'Ontario'});
    

    【讨论】:

    • 谢谢,我错过了那个注释,我想我在页面上使用“范围”作为关键字搜索,但什么也没找到。
    【解决方案2】:

    使用assertEvalEquals() 方法。

    【讨论】:

    • 虽然这在理论上确实回答了这个问题,但如果链接中断 - 这个答案的上下文也是如此。您能否在此答案中显示 how 使用该方法,以便即使无法解析链接也仍然有用?否则它可能会被删除。
    【解决方案3】:

    如果您通过 jQuery 样式引用调用该方法,请确保显式包含该库,以免出现 ReferenceError:

    var casper = require('casper').create({ 
       clientScripts: ['js/jquery-1.7.2.js'] 
    }); 
    

    ...

    casper.start('foo.php', 
       function() { 
          console.log(this.evaluate(function() { 
             return $('taxes').text(); 
          }));
       }); 
    
    casper.run();
    

    见:https://groups.google.com/forum/#!msg/casperjs/2uyUOqdzShw/bHWrJYXni40J

    如果您在全局范围内隐式调用它(即直接 javascript,而不是例如 $('taxes')),您可能必须显式地将窗口或文档命名空间添加到引用之前:

    document.querySelector('#taxes').value = taxes_text;
    

    【讨论】:

      猜你喜欢
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      相关资源
      最近更新 更多