我使用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,即使它们递增。
答案 0 :(得分:0)
尝试使用
console.log(String.valueOf(i))
如果无效,请显示您的代码
答案 1 :(得分:0)
您可能没有处理从DOM返回值的方法的承诺。
“Crawling”框架大量使用promises来从DOM中检索值,因为大多数时候这些值都是动态更改的,并且只要将DOM检索到客户端就不可用。
这是我使用webdriverjs制作的一个古老的要点,类似于casper / phantom:link to gist。我特意将这个要点用于实践承诺处理。