Javascript 仅当未选中时,单击带有量角器的复选框
我试图通过css获取一个复选框列表,并且仅在未选中复选框时单击复选框,我设法获取该列表,但由于某些原因,我无法验证元素是否已选中 我做错了什么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
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);
});
});
});