2014-10-20 46 views
0

由于某些原因,每当我尝试点击一个使用CasperJS的按钮时,它都不会实际响应。我渲染了一个截图,就好像它从来没有点击过它一样。用casperjs点击按钮时没有反应

phantom.casperPath = './modules/'; 
phantom.injectJs(phantom.casperPath +'/bin/bootstrap.js'); 
var system = require('system'); 
var utils = require('utils'); 
var casper = require('casper').selectXPath; 

var casper = require('casper').create({ 
    verbose: false, 
    logLevel: 'debug' 
}); 

casper.options.viewportSize = {width: 1920, height: 1080}; 

casper.start(); 
casper.thenOpen('https://mydomain.com', function(){ 
}); 

casper.then(function() { 
    this.fill('form#loginPage',{ 
     'user_name': 'myuser', 
     'user_password': 'mypassword' 
    },false); 
    casper.wait(100); 
}); 
casper.then(function(){ 
    this.click('#sysverb_login'); 
    casper.wait(100); 
}); 
casper.then(function(){ 
    this.capture('test.png'); 
    this.echo('success'); 
    this.exit(); 
}); 
casper.run(function() { 
}); 
+0

你有什么期望点击按钮后发生(新页面已加载,页面上发生了什么......)?请修正您的格式。 – 2014-10-20 19:55:50

+0

尝试将捕捉移入其自己,或在捕捉之前添加暂停 – Nick 2014-10-20 19:59:13

+0

我尝试添加一个暂停,但这不起作用。 – Matt 2014-10-20 20:33:51

回答

2

它不建议使用then页面加载后,我quote from the docs: -

步骤的功能加入到然后()在两个不同的情况下进行处理:

  1. 当执行了上一步功能时,执行前一个主要HTTP请求并加载页面时,执行
  2. ;

请注意, 没有加载页面的单一定义; DOMReady 事件是否已触发?它是“所有请求正在完成”吗?是否 *正在执行所有应用程序逻辑“?或“所有元素被渲染”?答案总是取决于上下文。因此,为什么鼓励您始终使用waitFor()系列方法来保持对您实际期望的内容的明确控制 。

一种常见的伎俩是使用waitForSelector():

尝试(与选择是页面上看到更换SOMESELECTOR后回发生后): -

casper.then(function() { 
    this.fill('form#loginPage',{ 
     'user_name': 'myuser', 
     'user_password': 'mypassword' 
    },false); 
}); 

casper.then(function(){ 
    this.click('#sysverb_login'); 
}); 

casper.waitForSelector("SOMESELECTOR", function(){ 
    this.capture('test.png'); 
    this.echo('success'); 
    this.exit(); 
});