无法得到this.mouse.click()"和casperjs一起工作

Cant get "this.mouse.click()" to work with casperjs

本文关键字:quot casperjs 工作 一起 this click mouse      更新时间:2023-09-26

我试图理解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');

则保持在同一页上。我以为它们是一样的。

根据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.mouse.click('a.btn');之前放置this.capture("aboutToClick.png");也是一种很好的故障排除方法。

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