casperjs console.log()没有打印正确的值

时间:2016-06-27 13:06:09

标签: javascript phantomjs casperjs

我使用phantomjs和casperjs来测试我的网站。

在我的JavaScript中,我有一个使用var i的for循环,以及循环内的另一个var rando,它会递增。

我正在打电话

console.log(i); 
console.log(rando); 

用于测试,但它不会将正确的值打印到命令行。但是,我知道变量正在改变,因为代码按预期进行,例如for循环正在递增。

我尝试使用

console.log("%d", i);

但没有运气。

我的代码使用建议的解决方案仍然没有运气:

for (i=0; i<100000; i++) {  //// first loop
casper.wait(13000, function () {
    casper.then(function () {
        console.log(String.valueOf(i));
        console.log(String.valueOf(rando));
        casper.click(x(('/html/body/div[2]/div/div[2]/div/article/div[2]/section[2]/a/span')));
        console.log(timeStamp());     
    });
});
casper.then(function () {
    casper.click(x(('/html/body/div[2]/div/div[1]/div/div/a[2]')));        
});
if (rando == 14) {
    casper.then(function () {
        casper.click(x(('/html/body/div[2]/div/div[2]/div/article/header/span/button')));
        console.log(timeStamp());        
    });
    rando = 0;
} else {
    rando++;
}

}

结果是每次打印i为100000并且rando为10,即使它们递增。

2 个答案:

答案 0 :(得分:0)

尝试使用

console.log(String.valueOf(i))

如果无效,请显示您的代码

答案 1 :(得分:0)

您可能没有处理从DOM返回值的方法的承诺。

“Crawling”框架大量使用promises来从DOM中检索值,因为大多数时候这些值都是动态更改的,并且只要将DOM检索到客户端就不可用。

more info about Promises here

这是我使用webdriverjs制作的一个古老的要点,类似于casper / phantom:link to gist。我特意将这个要点用于实践承诺处理。