在CasperJS中测试URL列表

coach_rob

我试图避免进行20个左右的很小的测试,而每个测试实际上都是在测试一个白色标签站点列表并显示一些基本信息。

我有一个网站列表(数组),它们的URL,期望的标题和网站名称。

我想遍历数组,转到每个URL并验证标题是否正确。

像这样:

var x = require('casper').selectXPath;

var white_labels = [
    {
        URL: "http://site1.com",
        Title: "Site 1 Title",
        Name: "Site 1"
    },
    {
        URL: "http://site2.com",
        Title: "Site 2 Title",
        Name: "Site 2"
    }
]

casper.test.begin('White Labels Test Suite', white_labels.length, function suite(test) {
    var urls; 
    var i = -1;

    casper.start(white_labels[0]["URL"], function() {
        urls = white_labels; 
    });

    casper.then(function() {
        this.each(urls, function() {
            i++;  
            this.echo("I: " + i);
            this.thenOpen(urls[i].URL, function() {
                this.echo("URL: " + urls[i].URL);
                test.assertTitle(urls[i].Title, urls[i].Name + " title is correct");
            });
        });
    });

    casper.run(function() {
        test.done();
    });
});

运行此命令时,每次我打印“ I”时,它都是正确的... 0,然后是1。

但是,第一个测试失败,因为它返回的标题是站点2的标题,而不是站点1的标题。第二个测试成功。

在这一点上,我感到困惑。

Artjom B.

问题是的可变范围icasper.each本质上是一个同步的for循环。它的内部是异步casper.thenOpen语句,语句仅调度一个动作。实际上,它是被同步调用的,并且正确的url被传递给它。each执行循环,casper步骤队列开始执行(通过触发casper.run),其中包括所有then*调用。

问题在于这i是全局的,这意味着当两个casper.thenOpen回调都最终执行时,两个回调都i为1。

针对您的情况有不同的解决方案:

  • 通过交换固定在每个迭代到迭代指数i++;var j = ++i;和所有其他i内部casper.each进行j
  • 使用casper.each将迭代项注入到迭代中的事实,并且根本不使用任何索引:this.each(urls, function(self, url) { ... });
  • 最简单的是刚刚的变化this.each,以this.eachThen使得它本身是阶梯状的,你没有i-problems。

最后,请参见循环内的JavaScript闭包-简单的实际示例JavaScript闭包如何工作?欲获得更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在CasperJS中测试URL列表

来自分类Dev

让 CasperJS 遍历 URL 列表

来自分类Dev

什么是casperjs中的可疑测试

来自分类Dev

TFS / VSTS中的CasperJS测试结果

来自分类Dev

casperjs和A / b测试

来自分类Dev

CasperJS测试文件中的测试套件循环导致外壳中的随机失败

来自分类Dev

等待直到下拉列表元素在CasperJS中可见

来自分类Dev

测试列表Java中的值

来自分类Dev

CasperJS:遍历URL

来自分类Dev

CasperJS遍历每个URL

来自分类Dev

使用casperjs测试损坏的html

来自分类Dev

未使用casperJS执行的测试

来自分类Dev

使用slimerjs运行casperjs测试

来自分类Dev

在Swift中测试write(to:url)

来自分类Dev

CasperJS中的条件语句

来自分类Dev

列表理解中的测试和断言

来自分类Dev

测试是否在Makefile中定义了变量列表

来自分类Dev

Pygame / Python测试列表中的敌人之间?

来自分类Dev

测试数组是否在Lisp中的列表内

来自分类Dev

比较测试中的2个列表

来自分类Dev

测试是否在Makefile中定义了变量列表

来自分类Dev

在JUnit测试中获取JAR列表

来自分类Dev

测试列表中特定字段的存在

来自分类Dev

我可以在浏览器中查看在casperjs中运行的测试脚本以便于跟踪

来自分类Dev

CasperJS,测试页无法完全加载

来自分类Dev

CasperJS,使用测试框架进行并行浏览

来自分类Dev

CasperJS / PhantomJS,某些测试随机失败

来自分类Dev

使用CasperJS测试多个HTML页面?

来自分类Dev

如何使用casperjs显示每个测试的时间