无法得到this.mouse.click()"和casperjs一起工作
Cant get "this.mouse.click()" to work with 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');
则保持在同一页上。我以为它们是一样的。
根据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
对象内部有一个。
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- CasperJS在使用sendKeys时不会上传文件
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- 我如何才能让CasperJS和PhantomJS在约塞米蒂玩得很好
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值