我有一个复选框列表,顶部有一个all
复选框。切换全部复选框时,将取消选择或选中所有复选框。
默认情况下/最初,启用all
复选框并选中所有复选框。因此,我将取消选中所有复选框,并取消选中所有复选框。这通过了没有问题的量角器:
it('all checkbox is deselected', function() {
modelsAllCheckbox.click();
expect(modelsAllCheckbox.isSelected()).to.eventually.be.false;
});
it('all models should be deselected', function() {
ppvPercentages.modelChoices().then(function(modelChoices) {
modelChoices.forEach(function(modelChoice) {
expect(modelChoice.isSelected()).to.eventually.be.false;
});
});
});
this.modelChoices = function(rowNumber) {
return element.all(by.repeater('model in vehicleCheckboxes.models'));
}
然后我重新启用all
复选框。我在视觉上可以看到,在浏览器中,在成功检查/选中的所有复选框中选中了所有复选框。 Hoewever,在测试中断言他们都被选中失败了:
it('all button is re-enabled', function() {
modelsAllCheckbox.click();
expect(modelsAllCheckbox.isSelected()).to.eventually.be.true;
// give time for all models to set
browser.sleep(3000)
});
it('all models are selected', function() {
ppvPercentages.modelChoices().then(function(modelChoices) {
modelChoices.forEach(function(modelChoice) {
expect(modelChoice.isSelected()).to.eventually.be.true;
});
});
})
<div class="overflow-container">
<!-- all checkbox -->
<input type="checkbox"
ng-model="vehicleAllCheckbox.models"
ng-change="toggleAllModels(vehicleAllCheckbox, vehicleCheckboxes.models, vehicleCheckboxes.year)">All
<div ng-repeat="model in vehicleCheckboxes.models | orderBy: 'description' track by model.description">
<!-- the rest of the checkboxes -->
<input type="checkbox"
ng-change="modelCheckboxToggle()"
ng-model="model.checked" >
{{model.description}}
</div>
</div>
我看到浏览器中的所有复选框都是viusally。为什么modelChoice.isSelected()
给出错误而不是真实重新启用全部复选框?
答案 0 :(得分:2)
问题在于您找到复选框的方式。目前,由于您使用的是div
定位器,因此您要定位父by.repeater()
元素:
<div ng-repeat="model in vehicleCheckboxes.models | orderBy: 'description' track by model.description">
相反,请将modelChoices
指向input
元素(您的复选框):
this.modelChoices = function(rowNumber) {
return element.all(by.repeater('model in vehicleCheckboxes.models')).all(by.model('model.checked'));
}
作为旁注,我认为您可以通过使用.each()
来改进您期望选中复选框的方式:
ppvPercentages.modelChoices().each(function (modelChoice) {
expect(modelChoice.isSelected()).to.eventually.be.true;
});
或者,使用.reduce()
:
var allSelected = ppvPercentages.modelChoices().reduce(function (acc, modelChoice) {
return modelChoice.isSelected().then(function (isSelected) {
return acc && isSelected;
});
}, true);
expect(allSelected).to.eventually.be.true;
或者,还有其他方法。