Angularjs 重新启用复选框后,选择量角器给出错误读数

Angularjs 重新启用复选框后,选择量角器给出错误读数,angularjs,selenium,protractor,angularjs-e2e,e2e-testing,Angularjs,Selenium,Protractor,Angularjs E2e,E2e Testing,我有一个复选框列表,顶部有一个all复选框。切换“全部”复选框时,所有复选框都将被取消选择或选中 默认情况下/初始情况下,all复选框处于启用状态,并且选中了所有复选框。因此,我将取消选中所有复选框,所有复选框将取消选中。这在量角器中没有问题: it('all checkbox is deselected', function() { modelsAllCheckbox.click(); expect(modelsAllCheckbox.isSelected()).to.ev

我有一个复选框列表,顶部有一个
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;
      });
    });
  })


全部的
{{model.description}}

我看到所有复选框都在浏览器中被选中。为什么
modelChoice.isSelected()
giving false而不是true up会重新启用all复选框

问题在于您查找复选框的方式。当前,由于您使用的是
by.repeater()
定位器,所以您的目标是父
div
元素:

<div ng-repeat="model in vehicleCheckboxes.models | orderBy: 'description' track by model.description">

作为补充说明,我认为您可以通过以下方式改进希望选中复选框的方式:

或者,通过使用:

或者,还有其他方法

<div ng-repeat="model in vehicleCheckboxes.models | orderBy: 'description' track by model.description">
this.modelChoices = function(rowNumber) {
  return element.all(by.repeater('model in vehicleCheckboxes.models')).all(by.model('model.checked'));
}
ppvPercentages.modelChoices().each(function (modelChoice) {
    expect(modelChoice.isSelected()).to.eventually.be.true;
});
var allSelected = ppvPercentages.modelChoices().reduce(function (acc, modelChoice) {
    return modelChoice.isSelected().then(function (isSelected) {
        return acc && isSelected;
    });
}, true);
expect(allSelected).to.eventually.be.true;