Protractor 量角器ExpectedConditions等待DOM属性包含

Protractor 量角器ExpectedConditions等待DOM属性包含,protractor,Protractor,我有以下DOM元素: input type="checkbox" class="ng-untouched ng-pristine ng-valid" ng-reflect-model="false" 在量角器中-在执行断言之前,我需要等待属性ng reflect model等于true。是否有browser.wait ExpectedCondition执行此操作?如果是,是什么 我正在寻找类似Selenium的attributeContains在量角器中没有可用于验证元素属性更改的预定义预期条

我有以下DOM元素:

input type="checkbox" class="ng-untouched ng-pristine ng-valid" ng-reflect-model="false"
在量角器中-在执行断言之前,我需要等待属性
ng reflect model
等于true。是否有
browser.wait ExpectedCondition
执行此操作?如果是,是什么


我正在寻找类似Selenium的
attributeContains

在量角器中没有可用于验证元素属性更改的预定义预期条件。但您可以创建自己的等待条件,如下所示

browser.wait(function(){
  return element(by.css("input[type='checkbox']"))
                  .getAttribute("ng-reflect-model")
                  .then(function(ngReflectModel){
                     return ngReflectModel == "false";
                  })
},5000);

如果我想传入参数而不是静态值,这看起来如何

timer = 5000;

static waitForAttributeToContain(item: ElementFinder, attribute: string, value: string) {
    browser.wait(() => {
        return item.getAttribute(attribute).then(
            function(attributeCheck) {
                return attributeCheck === value;
            });
    }, timer);
}

您可以创建一个助手函数,该函数也可以在其他地方使用,用于等待特定条件:

export async function forCondition(condition: () => boolean | PromiseLike<boolean>, timeout = 20000): Promise<boolean> {
  try {
    return await browser.wait(condition, timeout);
  } catch (err) {
    return false;
  }
}

还需要答案吗?
// other helper function
async function isValueSet(): Promise<boolean> {
  let input = element(by.model('input');
  let value = await input.getAttribute('ng-reflect-model');

  // cast to boolean operator.
  return !!value;
}
it('should wait for value to be true', async function() {
  await forCondition(function () { return  isValueSet(); }, 30000);
  // expect()... 
}