我使用Protractors ExpectedConditions来阻止我的e2e测试的早期断言。我正在寻找一种更简单的方法:
it('should wait for an element to be visible before assertion', () => {
const myElem = element(by.className('myElem'));
browser.get('/myComponent');
browser.wait(ExpectedConditions.presenceOf(myElem), 5000);
expect(myElem.isPresent()).toBeTruthy();
});
我想要的是一个结合我最后两行的断言,因为它们基本上做同样的事情(有点......不是真的......但有点)。
这样做感觉很糟糕。
我想要的东西会是这样的:
expect(myElem.isPresent()).wait(5000).toBeTruthy();
就像browser.wait一样,如果条件变得真实,它应该等待或提前返回。
有没有人知道如何实现这个或类似的简单解决方案?
PS: 为了我的目的,browser.waitForAngular()结果是不可靠的。而且(另外)仍然是太多的代码。
我正在考虑按照here解释添加茉莉花匹配器,但是匹配器无法处理这个要求恕我直言。
答案 0 :(得分:0)
通过查看代码,您似乎没有考虑javascript的异步性质。我会要求你尝试下面的代码。这对你有用。
it('should wait for an element to be visible before assertion', () => {
const myElem = element(by.className('myElem'));
browser.get('/myComponent').then(()=> {
return browser.wait(ExpectedConditions.presenceOf(myElem), 5000);
}).then(()=> {
expect(myElem.isPresent()).toBeTruthy();
});
});