如何在CasperJS中单击此按钮?

时间:2014-05-13 15:32:48

标签: javascript jquery phantomjs casperjs

经过一些调试后,看来我在CasperJS中单击或触发此按钮的点击事件时遇到困难:

<a id="generate" class="btn" href="#generate"><strong>Generate</strong></a>

这是我到目前为止的代码:

var casper = require('casper').create({
    clientScripts: [
        '...\\JQuery\\jquery-1.11.1.min.js'
    ],
    pageSettings: {
        userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0'
    }
});
casper.on('page.initialized', function (page) {
    page.evaluate(function () {
        (function() {
            window.screen = {
                width: 1600,
                height: 900
            };
            var fake_nav = {};
            for (var i in navigator) {
                fake_nav[i] = navigator[i];
            }
            fake_nav.javaEnabled = function() { return true; };
            fake_nav.language = 'en-US';
            window.navigator = fake_nav;
        })();
    });
});
casper.start('http://www.json-generator.com/', function() {
    this.echo("Loaded successfully.");
});
var template = '[\'{{repeat(1,3)}}\',    {asdf: "hello"}    ]';
casper.then(function() {
    this.evaluate(function(input) {
        window.$('.CodeMirror')[0].CodeMirror.setValue(input);
     }, template);
});
casper.then(function() {
    this.evaluate(function() {
        document.$('#generate').click();
    });
});
casper.then(function() {
    var doc = this.evaluate(function($) {
        return window.$('.CodeMirror')[1].CodeMirror.getValue();
    });
    this.echo(doc);
});
casper.run(function() {
    this.echo('All Done.');
    this.exit();
});

这会生成输出(请注意&#34; casper.echo(doc)&#34;中的空白行):

Loaded successfully.

All Done.

我已经确认我的javascript在Chrome和Firefox的浏览器控制台中都有效。为什么我不能在CasperJS中单击此按钮?

2 个答案:

答案 0 :(得分:16)

不使用evaluate函数并单击页面DOM环境中的元素(使用jQuery),只需使用casper方法:this.click('#generate.btn');。这很容易。

还有clickLabel()功能。

答案 1 :(得分:0)

在CasperJS中单击元素可以使用三种功能:

  • casper.click()
    • 单击与提供的选择器表达式匹配的元素。
  • casper.clickLabel()
    • 单击找到的第一个包含标签文本的DOM元素。
  • casper.thenClick()
    • 添加新的导航步骤以单击给定的选择器,并可以选择通过一次操作添加新的导航步骤。