我有一个下拉列表,其元素在满足条件时会被禁用。在测试中,我检查它们是否被禁用,但所有测试都失败并且始终将元素状态返回为启用(显然不正确。我确保这不是时间问题 - 刷新页面并在浏览器睡眠时提供充足的等待时间 - 屏幕上的元素明显禁用)。列表项中有一个锚点。请看图片:
我已经尝试检查列表项和锚点,如下所示:
var actionDropDownList = $$('[class="dropdown-menu"]').get(1);
var checkOutButtonState = actionDropDownList.all(by.tagName('li')).get(6);
actionsButton.click();
actionDropDownList.all(by.tagName('li')).count().then(function(count){
console.log('THE NUMBER OF ELEMENTS IN THE DROPDOWN IS...............................................................' + count);
}) //verify that I have the correct dropdown - yes
checkOutButtonState.isEnabled().then(function(isEnabled){
console.log('CHECKING checkOutButton BUTTON STATE: ' + isEnabled);
}) //log state - shows incorrectly
我也尝试将按钮本身检查为禁用状态(下面的元素是我尝试检查而不是列表元素):
var checkOutButton = $('[ng-click="item.statusId !== itemStatus.in || checkOut()"]');
这也失败了。
不确定我应该检查哪一个以及为什么两个都失败了。我该如何纠正这个并让它显示禁用的按钮是......好,禁用。
TEMPORARY ADD ON EDIT:
为简单起见,我正在努力:
var hasClass = function (element, cls) {
return element.getAttribute('class').then(function (classes) {
return classes.split(' ').indexOf(cls) !== -1;
});
var checkOutButtonState = actionDropDownList.all(by.tagName('li')).get(6);
expect(hasClass(checkOutButtonState, 'disabled')).toBe(true);
然而,它仍然失败,尽管该元素显然属于该类。 Alec - 您的解决方案抛出“功能未定义”,我不确定是否需要其他东西才能看到茉莉花。试过,但发现它没有任何问题,不知道为什么我不能让它发挥作用。
编辑:
如果我跑...因为它似乎只有一个类:
expect(checkOutButtonState.getAttribute('class')).toBe('disabled');
我得到“预期'ng-isolate-scope'被'禁用'”
答案 0 :(得分:3)
在一个非常相似的情况下,我最终检查了disabled
类的存在:
expect(checkOutButtonState).toHaveClass("disabled");
其中toHaveClass()
是custom jasmine matcher:
beforeEach(function() {
jasmine.addMatchers({
toHaveClass: function() {
return {
compare: function(actual, expected) {
return {
pass: actual.getAttribute("class").then(function(classes) {
return classes.split(" ").indexOf(expected) !== -1;
})
};
}
};
},
});
});