量角器预期条件等待 DOM 属性包含



我有以下 DOM 元素:

input type="checkbox" class="ng-untouched ng-pristine ng-valid" ng-reflect-model="false"

在量角器中 - 在执行断言之前,我需要等待属性ng-reflect-model等于 true。 有没有这样做browser.wait ExpectedCondition? 如果是这样,它是什么?

我正在寻找类似硒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()... 
}