我试图根据坐标点击casperjs上的元素,点击有时会失败,因为例如一个链接可能有一个换行符,这使我得到的随机坐标尝试点击,如左下角那里没有可点击的元素(即使x,y,x +宽度,y +高度边界正确)。所以我试图检测链接何时失败以及何时成功。
我试过这段代码:
var oldUrl;
casper.start( url, function ( ) {
oldUrl = casper.getCurrentUrl();
// code that clicks element based on coordinates
}).then( function() {
casper.waitFor(function check() {
return oldUrl === casper.getCurrentUrl();
}, function then() {
require('utils').dump( 'link click succeed' );
}, function timeout() {
require('utils').dump( 'link click failed' );
}, 5000);
}).run();
也尝试没有第一个then()并在启动后直接使用waitFor .start(...).waitFor(...)
。我也尝试了这个代码,我发现谷歌搜索:
casper.waitForUrlChange = function(then, onTimeout, timeout){
var oldUrl;
this.then(function(){
oldUrl = this.getCurrentUrl();
}).waitFor(function check(){
return oldUrl === this.getCurrentUrl();
}, then, onTimeout, timeout);
return this;
};
casper.start( url, function ( ) {
// code that clicks element based on coordinates
}).waitForUrlChange( function then() {
require('utils').dump( 'link clicked succeed' );
}, function timeout() {
require('utils').dump( 'link click failed' );
}, 5000);
}).run();
当我使用一些随机坐标来确保点击失败时,我会在输出中得到这个:
[警告] [幻影] Casper.waitFor()超时
链接点击失败
但是当我使用真实坐标确保点击成功时,我从未在输出上获得link clicked succeed
,脚本只需单击元素,然后转到“about:blank”并退出。
当click元素成功时,如何让它执行“then()”函数?