量角器 - 错误:第二次使用相同的函数时索引超出范围的异常

时间:2016-03-14 19:36:13

标签: javascript angularjs protractor webdriverjs

我有以下功能,从可用类别列表中选择一个类别。这个功能在我的第一次测试中运行良好。但是在我的第二次测试中,具有不同有效类别名称的相同函数失败,并出现以下错误。

错误:索引超出范围。尝试访问index:0处的元素,但只有0个元素匹配定位器By.cssSelector(“。grid-view-builder__category”)

this.categoryElements = element.all(by.css('.grid-view-builder__category'));

this.selectCategory = function (categoryName) {

    var filteredCategories = this.categoryElements.filter(function (category) {
        return category.getText().then(function (text) {
            log.info(text);
            return text === categoryName;
        })
    })

    filteredCategories.first().click().then(function () {
        log.info("Select Category: " + categoryName);
    }).then(null, function (err) {
        log.error("Category: " + categoryName + " Not Found !!" + err);
    });

}

规范文件

var columnSelect = require('pages/grid/columns/columnselector-page')()

it('Add Publisher ID Column to the Grid & Verify', function () {

    var columnCountBefore = columnSelect.getColumnCount();

    columnSelect.openColumnSelector();
    columnSelect.selectCategory('Advanced');
    columnSelect.selectColumn('Publisher ID');
    columnSelect.apply();

    var columnCountAfter = columnSelect.getColumnCount();

    expect(columnCountAfter).toBeGreaterThan(columnCountBefore);

});

2 个答案:

答案 0 :(得分:3)

问题可能在于您定义和使用页面对象的方式。这是一个快速的尝试解决方案 - 如果这会有所帮助,我们将讨论为什么会发生这种情况。

使categoryElements成为函数而不是属性:

this.getCategoryElements = function () {
    return element.all(by.css('.grid-view-builder__category'));
};

this.selectCategory = function (categoryName) {

    var filteredCategories = this.getCategoryElements().filter(function (category) {
        return category.getText().then(function (text) {
            log.info(text);
            return text === categoryName;
        })
    })

    filteredCategories.first().click().then(function () {
        log.info("Select Category: " + categoryName);
    }).then(null, function (err) {
        log.error("Category: " + categoryName + " Not Found !!" + err);
    });

}

或者,这可能是一个"时间问题" - 让我们通过browser.wait()添加明确等待至少等待一个类别to be present

var EC = protractor.ExpectedConditions;
var category = element(by.css('.grid-view-builder__category'));

browser.wait(EC.presenceOf(category), 5000);

答案 1 :(得分:0)

看起来这与此处发布的代码无关,只是你正在使用的css选择器没有找到任何元素