Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅当未选中时,单击带有量角器的复选框_Javascript_Angularjs_Protractor - Fatal编程技术网

Javascript 仅当未选中时,单击带有量角器的复选框

Javascript 仅当未选中时,单击带有量角器的复选框,javascript,angularjs,protractor,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_widg

我试图通过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);
                });
            }
        });
element.all(By.css('#dropdown li input'))。然后(函数(行){
expect(rows.length).toBe(小部件的数量);
对于(var i=0;i<小部件的数量;i++){
行[i].isSelected().then(函数(已选定){
如果(!已选定){
行[i]。单击();
}
等待(100);
});
}
});
用于(变量i=1;i
元素.all(By.css(“#下拉列表输入”))。然后(函数(行){
expect(rows.length).toBe(小部件的数量);
对于(var i=0;i<小部件的数量;i++){
行[i].isSelected().then(函数(已选定){
如果(!已选定){
行[i]。单击();
}
如果(选定){
rows.isSelected=false;
}
等待(100);
});
}
});

我不知道你从哪里得到
等等
,但我觉得这一切都是异步的。尝试此操作,它将使
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));
    }
});
element.all(By.css('#dropdown li input'))。然后(函数(行){
expect(rows.length).toBe(小部件的数量);
对于(var i=0;i<小部件的数量;i++){
行[i].isSelected().then(函数(i){返回函数(已选择){
如果(!已选定){
行[i]。单击();
}
等待(100);
}}(i) );
}
});

您可以尝试以下操作,将内部循环替换为:

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

您需要将承诺绑定到循环内的变量

它('应将活动类添加到选定行',函数(){ var todoList=element.all(by.repeater('task-in-tasks')

todoList.then(函数(项){
对于(变量i=0;i
您可以使用以下解决方案

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

这不是我问题的答案,我想在我的rows对象上检查它。单击()向下投票,以确定在DOM属性
childNodes
更合适的地方使用css属性,以及没有正确地将
I
的值引入解释器。即使这个代码有效,我也不会使用它。对不起!我错过了具体的代码行。您已经在执行一个
isSelected()
。我处理此类问题的方法是在复选框父项之外使用
for
循环。然后将复选框作为子节点进行迭代,并使用
isSelected()
进行检查。不,它应该从promise返回true/false。请提供示例好吗?我认为可能
行[I]
没有给您正确的元素。改为做一些类似的事情-
for(var i=1;i
也可以(改为)将函数括在括号中并
.bind(i)
点击它,然后将
i
作为
this
参考。我尝试了所有答案,但没有任何效果。有人知道如何获取复选框列表并选中一个未选中的复选框吗?请尝试此页面上的信息;您只需使用属性
checked
这不是量角器/WebdriverJS compatib从DOM获取值必须通过回调/承诺来完成。
..
rows.then(function(element){
    var eleUnchecked = !element.getAttribute('checked');
    if (eleUnchecked) {
        return element.click();
    }
}
..
        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);
        });
    });
});