无法使用“this.mouse.click()”来处理casperjs

时间:2014-07-21 06:53:07

标签: javascript casperjs

我试图了解casperjs,但正在努力解决这个问题。有人可以请求告诉我为什么这样可行(导航到http://www.w3schools.com/html/default.asp):

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

casper.start('http://www.w3schools.com/');

casper.then(function(){

  this.click('a.btn'); 
});

casper.then(function(){

   console.log('Location is now: ' + this.getCurrentUrl());
});

casper.run();

但如果我替换

this.click('a.btn'); 

this.mouse.click('a.btn');

然后它停留在同一页面上。我以为这些都是一样的。

1 个答案:

答案 0 :(得分:4)

根据CasperJS的即时测试:

  

casper.click()创建一个事件并将其发送到目标   事件,但casper.mouse.click()不处理任何元素   只是在给定位置产生鼠标动作。

这就产生了第二个问题,即为什么会产生影响(w3schools.com HTML非常简洁明了,据我所见,没有隐形层,或者对点击操作采取花哨的JavaScript干预)。

原因很简单。默认视口大小非常小:您的按钮在屏幕外,因此鼠标无法单击它!这是一个适合我的快速测试脚本:

var casper = require('casper').create();
//var mouse = require("mouse").create(casper);

casper.options.viewportSize = {width: 1024,height: 768};

casper.start('http://www.w3schools.com/');

casper.then(function(){
  this.mouse.click('a.btn'); 
});

casper.then(function(){
   console.log('Location is now: ' + this.getCurrentUrl());
});

casper.run();

我用PhantomJS和SlimerJS进行了测试。但是我在使用SlimerJS进行测试时才意识到这个问题,并且可以看到生成的HTML。在this.capture("aboutToClick.png");之前放置this.mouse.click('a.btn');也是一种很好的故障排除方法。

ASIDE:我已注释掉var mouse行,表明您不需要它:casper对象内部有一个。