仅在未选中时单击带有量角器的复选框

时间:2015-02-17 08:48:23

标签: javascript angularjs protractor

我试图通过css获取一个复选框列表,并且仅在未选中时单击复选框,我设法获取列表,但由于某种原因我无法验证该元素是否被选中。

我做错了什么?

        element.all(By.css('#dropdown li input')).then(function(rows) {
            expect(rows.length).toBe(number_of_widgets);
            for (var i = 0; i < number_of_widgets; i++) {
                rows[i].isSelected().then(function(selected) {
                    if (!selected) {
                        rows[i].click();
                    }
                    waits(100);
                });
            }
        });

6 个答案:

答案 0 :(得分:1)

您可以尝试使用以下内容替换内循环:

..
rows.then(function(element){
    var eleUnchecked = !element.getAttribute('checked');
    if (eleUnchecked) {
        return element.click();
    }
}
..

答案 1 :(得分:0)

element.all(By.css('#dropdown li input')).then(function(rows) {
    expect(rows.length).toBe(number_of_widgets);
    for (var i = 0; i < number_of_widgets; i++) {
        rows[i].isSelected().then(function(selected) {
            if (!selected) {
                rows[i].click();
            }
            if (selected) {
                rows.isSelected = false ;
            }
            waits(100);
        });
    }
});

答案 2 :(得分:0)

我不知道你从哪里得到wait,但这对我来说都是异步的。试试这个,它会使i与你期望的相同:

element.all(By.css('#dropdown li input')).then(function(rows) {
    expect(rows.length).toBe(number_of_widgets);
    for (var i = 0; i < number_of_widgets; i++) {
        rows[i].isSelected().then(function(i){return function(selected) {
            if (!selected) {
                rows[i].click();
            }
            waits(100);
        }}(i));
    }
});

答案 3 :(得分:0)

您需要将promise绑定到循环中的变量

it('应该将活动类添加到选定的行',function(){             var todoList = element.all(by.repeater('task in tasks'));

        todoList.then(function (items) {
            for (var i = 0; i < items.length ; i++) {
                var input = todoList.get(i).element(by.css('input'));
                var promise = input.isSelected();
                promise.then(function (sts) {
                    if (sts == false) {
                        this.click();
                    }
                }.bind(input));
            }

            element.all(by.css('.taskRow.active')).then(function (i) {
                expect(i.length).toBe(10);
            });

        });
    });

答案 4 :(得分:0)

您可以使用以下解决方案。

element.all(by.css('#dropdown li input')).then(function(rows) {
    expect(rows.length).toBe(number_of_widgets);
    rows.each(function(row) {
        row.isSelected().then(function(selected) {
            if (!selected) {
                rows[i].click();
            }
            waits(100);
        });
    });
});

答案 5 :(得分:-1)

for (var i = 1; i < number_of_widgets+1; i++) { 
    if (!(element(by.css('#dropdown li input:nth-child(i)')).isSelected())) { 
        element(by.css('#dropdown li input:nth-child(i)')).click()
    }
}