出于某种原因,每当我尝试使用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 :(得分:2)
我们不建议在加载页面后使用then
,quote from the docs: -
添加到then()的步骤函数在两种不同的情况下处理:
- 执行上一步功能时,
- 执行上一个主HTTP请求并加载页面时;
醇>请注意 页面加载没有单一的定义;是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();
});