如何从casperjs执行javascript?

时间:2013-10-19 21:54:32

标签: casperjs

作为测试javascript是否正在从CasperJS正确执行的简单方法,我正在尝试在页面上弹出javascript中的警告框。我的最终目标是运行更复杂的javascript函数,但是现在我只想从容易开始(即如果有一个本机CasperJS警报框函数,我不想使用它,因为我想让javascript工作)

var casper = require("casper").create();

casper.start("http://www.google.com", function() {

});

casper.thenEvaluate(function() {
     alert('hi');
});


casper.then(function(){
    this.wait(500, function() {
        this.echo("I've waited for 500 milliseconds");
    });
    this.capture('google.png', {
        top: 0,
        left: 0,
        width: 1500,
        height: 1000
    });
});

casper.run(function() {
    this.echo(this.getTitle()); // Google
    this.exit();
});

当我运行此脚本时,我会访问http://www.google.com(作为屏幕截图中的证据),但不会显示警告框。

有谁知道如何从CasperJS运行javascript?

谢谢!

1 个答案:

答案 0 :(得分:2)

至于为什么alert('hi')不会被看到,这个link给出了一个很好的解释。基本上,casperjs / phantomjs是一个无头浏览器,因此不能有窗口或对话框。

但是将脚本注入远程页面并执行它们可以:这里是how in Casperjs docs

这里稍微修改了你的脚本(注意这里的jquery.js应该在本地文件系统中,在你发出命令的同一个文件夹中,在控制台中启动CasperJS):

var casper = require("casper").create({
    clientScripts: ["jquery.js"]
});

casper.start("http://www.google.com/ncr");

casper.then(function(){

    this.evaluate(function() {
        $("input[name='q']").val("CasperJS execute javascript on remote page");
    });

});

casper.then(function(){
    this.capture('google.png', {
        top: 0,
        left: 0,
        width: 1500,
        height: 1000
    });
});

casper.run(function() {
    this.echo(this.getTitle()); // Google
    this.exit();
});