单击CasperJS并不真正起作用

时间:2015-01-06 14:58:23

标签: javascript click casperjs

我尝试点击此按钮:

<input class="right boutonActionTableau nouveau" onclick="addPeriode()" style="margin:0 0 10px 0 !important;" type="button" value="Période">

我的剧本:

var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug',
    pageSettings: {
        loadImages:  false,
        loadPlugins: false
    },
    clientScripts: ["jquery.min.js"]
});

casper.start(url, function() {
    this.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');
    this.fill('form[action="/Login/DoLogin"]', {
        'Login': 'login',
        'Password': 'password'
    }, true);
    this.click('form[action="/Login/DoLogin"]');
});

casper.thenOpen(url, function() {
    this.echo('ok');
    this.mouseEvent('click','input[class="right boutonActionTableau nouveau"]');
    this.capture('test-screen1.png');
});

casper.then(function() {
    this.capture('test-screen4.png');
});

casper.run();

我没有错误,但是当我拍摄时,我的页面不会改变...... 在我的webbrowser中,这个点击在上一个表单之后添加一个表单(如果我点击3次,我有另外3个表单)

如果在我的控制台Chrome中输入:$(function(){addPeriode();});,那就好了......

3 个答案:

答案 0 :(得分:1)

当您在casper.evaluate()内调用时,可以运行与Chrome控制台中相同的JavaScript,因为它是进入页面的沙盒窗口。

您可以致电

casper.evaluate(function(){
    addPeriode();
});

casper.evaluate(function(){
    var el = document.querySelector('input.right.boutonActionTableau.nouveau');
    el.click();
    // or
    el.onclick();
});

但正常点击应该有效。您可以尝试在点击后等待。

casper.thenOpen(url, function() {
    this.echo('ok');
    this.click('input.right.boutonActionTableau.nouveau');
    this.capture('test-screen1.png');

}).wait(5000).then(function() {
    this.capture('test-screen4.png');
});

答案 1 :(得分:1)

除非您有特殊原因,否则应使用click()代替mouseEvent()。 IIRC,mouseEvent()要求单击按钮位于当前视口中,而click()只需要在页面中的任何位置。

您的代码的第二个问题是:

input[class="right boutonActionTableau nouveau"]

使用:

input.right.boutonActionTableau.nouveau

在Artjom的答案中,或者,如果你真的想要attribute syntax,那么就这样:

input[class*="right"][class*="boutonActionTableau"][class*="nouveau"]
顺便说一句,你可能会发现我的故事in this post很有用。在那种情况下,链接(我认为没有被点击)实际上是好的,并被点击;涉及的Ajax调用返回一条错误消息,这就是屏幕截图永远不会更新的原因。但我确实探索了很多方法来点击!

答案 2 :(得分:0)

没关系,有了page.error,我看到了问题:kendoUI。 casperjs在我之前的操作结束之前加载然后打开。现在就可以了:

casper.start('links.net', function() {

    this.fill('form[action="/Login/DoLogin"]', {
        'Login': 'gfdgdfg',
        'Password': 'dfgdfg'
    }, true);
    this.click('form[action="/Login/DoLogin"]');

    this.thenOpen('links2.net', function() {
    this.echo('loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooool');    
    this.click('input.right.boutonActionTableau.nouveau');
    this.capture('test-screen1.png');

})

我的第一个脚本(不起作用):

    casper.start('links.net', function() {

        this.fill('form[action="/Login/DoLogin"]', {
            'Login': 'fghfgh',
            'Password': 'fghfghfgh'
        }, true);
        this.click('form[action="/Login/DoLogin"]');


        }).wait(5000).then(function() {
            this.capture('testlol.png');
        });


    });

  casper.thenOpen('links2.net', function() {
       this.echo('loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooool');
       this.wait(10000);
       this.click('input.right.boutonActionTableau.nouveau');
       this.wait(10000);
       this.capture('test-screen1.png');

    }).wait(5000).then(function() {
        this.capture('testlol.png');
});

非常感谢你的帮助