我尝试点击此按钮:
<input class="right boutonActionTableau nouveau" onclick="addPeriode()" style="margin:0 0 10px 0 !important;" type="button" value="Période">
我的剧本:
var casper = require('casper').create({
verbose: true,
logLevel: 'debug',
pageSettings: {
loadImages: false,
loadPlugins: false
},
clientScripts: ["jquery.min.js"]
});
casper.start(url, function() {
this.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');
this.fill('form[action="/Login/DoLogin"]', {
'Login': 'login',
'Password': 'password'
}, true);
this.click('form[action="/Login/DoLogin"]');
});
casper.thenOpen(url, function() {
this.echo('ok');
this.mouseEvent('click','input[class="right boutonActionTableau nouveau"]');
this.capture('test-screen1.png');
});
casper.then(function() {
this.capture('test-screen4.png');
});
casper.run();
我没有错误,但是当我拍摄时,我的页面不会改变...... 在我的webbrowser中,这个点击在上一个表单之后添加一个表单(如果我点击3次,我有另外3个表单)
如果在我的控制台Chrome中输入:$(function(){addPeriode();});
,那就好了......
答案 0 :(得分:1)
当您在casper.evaluate()
内调用时,可以运行与Chrome控制台中相同的JavaScript,因为它是进入页面的沙盒窗口。
您可以致电
casper.evaluate(function(){
addPeriode();
});
或
casper.evaluate(function(){
var el = document.querySelector('input.right.boutonActionTableau.nouveau');
el.click();
// or
el.onclick();
});
但正常点击应该有效。您可以尝试在点击后等待。
casper.thenOpen(url, function() {
this.echo('ok');
this.click('input.right.boutonActionTableau.nouveau');
this.capture('test-screen1.png');
}).wait(5000).then(function() {
this.capture('test-screen4.png');
});
答案 1 :(得分:1)
除非您有特殊原因,否则应使用click()
代替mouseEvent()
。 IIRC,mouseEvent()
要求单击按钮位于当前视口中,而click()只需要在页面中的任何位置。
您的代码的第二个问题是:
input[class="right boutonActionTableau nouveau"]
使用:
input.right.boutonActionTableau.nouveau
在Artjom的答案中,或者,如果你真的想要attribute syntax,那么就这样:
input[class*="right"][class*="boutonActionTableau"][class*="nouveau"]
顺便说一句,你可能会发现我的故事in this post很有用。在那种情况下,链接(我认为没有被点击)实际上是好的,并被点击;涉及的Ajax调用返回一条错误消息,这就是屏幕截图永远不会更新的原因。但我确实探索了很多方法来点击!
答案 2 :(得分:0)
没关系,有了page.error,我看到了问题:kendoUI。 casperjs在我之前的操作结束之前加载然后打开。现在就可以了:
casper.start('links.net', function() {
this.fill('form[action="/Login/DoLogin"]', {
'Login': 'gfdgdfg',
'Password': 'dfgdfg'
}, true);
this.click('form[action="/Login/DoLogin"]');
this.thenOpen('links2.net', function() {
this.echo('loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooool');
this.click('input.right.boutonActionTableau.nouveau');
this.capture('test-screen1.png');
})
我的第一个脚本(不起作用):
casper.start('links.net', function() {
this.fill('form[action="/Login/DoLogin"]', {
'Login': 'fghfgh',
'Password': 'fghfghfgh'
}, true);
this.click('form[action="/Login/DoLogin"]');
}).wait(5000).then(function() {
this.capture('testlol.png');
});
});
casper.thenOpen('links2.net', function() {
this.echo('loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooool');
this.wait(10000);
this.click('input.right.boutonActionTableau.nouveau');
this.wait(10000);
this.capture('test-screen1.png');
}).wait(5000).then(function() {
this.capture('testlol.png');
});
非常感谢你的帮助