只有在未选中的情况下,才能单击带量角器的复选框

click on check box with protractor only if not checked

本文关键字:单击 复选框 量角器 情况下      更新时间:2023-12-03

我正试图通过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);
                });
            }
        });

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

..
rows.then(function(element){
    var eleUnchecked = !element.getAttribute('checked');
    if (eleUnchecked) {
        return element.click();
    }
}
..
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);
        });
    }
});

我不知道你从哪里得到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));
    }
});

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

它("应该将活动类添加到所选行",函数(){var todoList=element.all(通过.redurer('任务中的任务'));

        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);
            });
        });
    });

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

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);
        });
    });
});
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()
    }
}