我编写了一个测试来检查一个元素在屏幕上是否可见,在我的例子中是一个角度ui引导可折叠面板,也就是“警告”。代码可以工作,但测试过去失败了
在“警告”的显示上有一个崩溃的动画,我不能为测试关闭动画,因为它是一个jquery动画。在DOM中,警告总是“存在”,当没有理由显示它时,它就会崩溃。
首先,我用这段代码进行了测试,这非常容易:
expect(element('.warning').isDisplayed()).toEqual(true);
当我需要测试元素是否没有显示时,问题就出现了,例如:一旦显示了警告,一些操作就会导致它崩溃。
这一检验:
expect(element('.warning').isDisplayed()).toEqual(false);
只有在动画启动时才会通过。在元素仍然显示时,当条件被选中时,它将失败。
我想出了两个解决方案。
简单的使用ptor.driver.sleep(2000)
。减慢了我的测试速度,是不可接受的。
很难,很丑,但这给了我很好的结果:
exports.isWarningDisplayed = function (expectedVisibility) {
return ptor.driver.wait(function () {
if (expectedVisibility) {
return element(by.css('.warning')).isDisplayed().then(function(visibility) {
return visibility === expectedVisibility;
});
} else {
return element.all(by.css('.warning .collapse.in')).then(function(items) {
return items.length === 0;
});
}
}, 2000).then(function() {
return element.all(by.css('.warning .collapse.in'));
}).then(function (items) {
return items.length > 0;
});
};
我的问题是这感觉太不对劲了。你找到更好的方法来处理这种情况了吗?我的期望是:
expect(element('.warning').not.isDisplayed()).toEqual(true);
...but在量角器或webDriver AFAIK中没有.not
。
发布于 2014-06-30 20:02:36
我也有一个类似的问题--想要测试一个元素何时不再被禁用。我很难在没有.not测试的情况下解决问题,然后意识到我可以将'not‘测试移到css选择器中:
// we're looking for when the element doesn't have a .disabled class
var availableElement = by.css('.some-class:not(.disabled)');
browser.wait(function() {
return ptor.isElementPresent(availableElement);
}, 30000);
expect(ptor.isElementPresent(availableElement)).toBeTruthy();
不知道这是否有帮助,但我有一个明确的时刻,所以我想我会分享。
发布于 2014-12-28 07:38:06
使用元素资源管理器(https://github.com/angular/protractor/blob/master/docs/debugging.md),我查看了量角器对象,找到了一个对我非常有用的答案:
var el = element(by.id('visibleElementId'));
browser.driver.wait(protractor.until.elementIsNotVisible(el));
发布于 2014-05-15 01:38:43
expect(ptor.isElementPresent(by.css('.warning'))).toBe(false);
这是另一种检查页面上是否显示某物的方法。
https://stackoverflow.com/questions/23086783
复制