未能检查元素是否已被禁用

时间:2015-08-09 20:09:57

标签: angularjs selenium-webdriver protractor

我有一个下拉列表,其元素在满足条件时会被禁用。在测试中,我检查它们是否被禁用,但所有测试都失败并且始终将元素状态返回为启用(显然不正确。我确保这不是时间问题 - 刷新页面并在浏览器睡眠时提供充足的等待时间 - 屏幕上的元素明显禁用)。列表项中有一个锚点。请看图片:

enter image description here

我已经尝试检查列表项和锚点,如下所示:

    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'被'禁用'”

1 个答案:

答案 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;
                        })
                    };
                }
            };
        },
    });
});
相关问题