单击带有casperjs的按钮时无响应

时间:2014-10-20 19:50:06

标签: javascript phantomjs 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() {
});

1 个答案:

答案 0 :(得分:2)

我们不建议在加载页面后使用thenquote from the docs: -

  

添加到then()的步骤函数在两种不同的情况下处理:

     
      
  1. 执行上一步功能时,
  2.   
  3. 执行上一个主HTTP请求并加载页面时;
  4.         

    请注意   页面加载没有单一的定义;是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();
});