[英]Casperjs slowing down looping through links
我正在通过对我的网站进行测试来学习CasperJS,该网站从导航栏中获取所有链接,并通过打开所有链接并为每个页面运行一个小测试来进行循环(检查标题,点击搜索按钮,看看结果是否到来)等等)。 我还添加了一个“快速测试”标志,该标志仅会在转到下一个链接之前检查页面标题。 总共大约有25个链接。
问题在于该脚本在经过约10次完整测试后以某种方式卡住,但在快速测试下可以正常工作。 这是我用来打开每个页面的循环:
casper.each(linkList, function(self, link){
self.thenOpen(link, function(){
self.echo(link);
temp = Date.now();
this.open(urlPrefix + link);
this.then(function(){
temp = (Date.now()) - temp;
self.echo("Load time: "+temp.toString()+"ms");
switch(link){
//case statements for specific pages
// - run specialized versions of testPage()
case "Example":
testExample(this);
break;
default:
testPage(this);
break;
}
});
});
});
testPage()
和页面特定的函数都看起来像:
function testPage(ths){
checkTitle(ths, "Page Title");
if(quickTest)
return;
ths.click('#searchButton');
casper.waitForSelectorTextChange("#results",function(){
temp = ths.evaluate(function(){
return $("tr.row").length;
});
if(temp>0)
casper.echo("Results returned");
else
casper.echo("No results returned");
});
}
checkTitle()
函数很简单:
function checkTitle(ths, name){
temp = ths.getTitle();
casper.echo("Page Title: "+temp+" - App loads: "+(temp==name ? "PASSED" : "FAILURE"));
}
现在,如果quickTest
为true
则循环结束,没有问题。 如果quickTest
为false
则循环将无限期地挂在第12页上。 巧合的是,第11页实际上是同一页,只是搜索过滤器有更多选项。 另外,我的casperjs脚本告诉我,要用quickTest=false
加载页面需要花费13410毫秒,而使用quickTest=false
需要花费quickTest=true
,这令人困惑,因为没有从该标志中跳过/添加两个时间戳之间的代码并将其加载到IE中不会花那么长时间。
为什么通过链接循环后,casper会变慢?
我设法绊倒了这一页 。 似乎在此过程中某处存在内存泄漏。 虽然我仍然不熟悉casperjs和phantomjs,但我猜想它涉及循环中的this.open()
位。 通过添加以下内容,我设法完成了所有测试:
casper.page.close();
casper.page = casper.newPage();
因此,循环代码的开始现在看起来像:
casper.each(linkList, function(self, link){
self.thenOpen(link, function(){
self.echo(link);
casper.page.close();
casper.page = casper.newPage();
temp = Date.now();
this.open(urlPrefix + link);
......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.