量角器ExpectedConditions等待DOM属性包含

时间:2018-07-02 18:20:28

标签: 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

3 个答案:

答案 0 :(得分:0)

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

sharedPreference

答案 1 :(得分:0)

如果我要传递参数而不是静态值,这看起来如何?

timer = 5000;

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

答案 2 :(得分:0)

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

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()... 
}