如何在量角器中进行简单的javascript循环

时间:2014-11-12 10:48:49

标签: protractor

for ( i = 0; i < 100; i++) {
         browser.manage().logs().get('browser').then(function(browserLog) {
                console.log(i);  
                });

    }

我正在尝试使用量角器来运行它,但我在控制台中打印了100次。我有一些功能正在尝试使用循环来实现。如何在量角器中进行循环

1 个答案:

答案 0 :(得分:2)

这是因为您传递给then的所有功能都关闭了变量 i,而不是变量所具有的你创建了这些功能。所以稍后,当函数被调用时,它们都会看到i的值,因为它是然后,在循环完成后(100)。

如果要在创建函数时捕获i的值,可以使用ES5的Function#bind

for ( i = 0; i < 100; i++) {
    browser.manage().logs().get('browser').then(function(index, browserLog) {
        console.log(index);  
    }.bind(null, i));
}

bind返回一个新函数,在调用时,将调用具有给定this值的原始函数(在本例中我使用null)以及您遵循的任何参数那个,然后返回给函数bind的参数。

另一种方法是构建函数:

for ( i = 0; i < 100; i++) {
    browser.manage().logs().get('browser').then(buildHandler(i));
}
function buildHandler(index) {
    return function(browserLog) {
        console.log(index);
    };
}

这样做的好处是允许来电者控制this