繁体   English   中英

Casperjs减慢通过链接的循环

[英]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"));
}

现在,如果quickTesttrue则循环结束,没有问题。 如果quickTestfalse则循环将无限期地挂在第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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM