Javascript 量角器-错误:第二次使用同一函数时索引越界异常

Javascript 量角器-错误:第二次使用同一函数时索引越界异常,javascript,angularjs,protractor,webdriverjs,Javascript,Angularjs,Protractor,Webdriverjs,我有以下功能,可以从可用类别列表中选择一个类别。这个函数在我的第一次测试中运行良好。但是在我的第二次测试中,使用不同有效类别名称的相同函数失败,并出现以下错误 错误:索引超出范围。正在尝试访问索引为0的元素,但只有0个元素与.cssSelector(“.grid-view-builder\uu category”)的定位器匹配 规格文件 var columnSelect = require('pages/grid/columns/columnselector-page')() it('Add

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

错误:索引超出范围。正在尝试访问索引为0的元素,但只有0个元素与.cssSelector(“.grid-view-builder\uu category”)的定位器匹配

规格文件

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);

});

看起来这与此处发布的代码无关,只是您使用的css选择器没有找到任何元素。问题可能在于您定义和使用页面对象的方式。这里有一个可以尝试的快速解决方案——如果这有帮助,我们将讨论为什么会发生这种情况

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);
    });

}
或者,这可能是一个“时间问题”-让我们添加一个明确的等待通道,以等待至少一个类别:


谢谢你的回复。我已经在上面的代码中更新了css选择器。但是css选择器第一次运行良好AlecXe,感谢您的回复。但我仍然看到同样的问题。第一次它工作正常,第二次我看到“错误:索引超出范围。尝试访问索引为0的元素,但只有0个元素与locator By.cssSelector(“.grid-view-builder\uu category”)”@VarunMukka好的,谢谢,当找到
.grid-view-builder\u category
元素时,您确定您在正确的页面上吗?是的,我在正确的页面上。列选择器气泡也将打开。当我尝试打印类别时,它会第二次打印空白值。我已经添加了我的规范文件,只是为了你的reference@VarunMukka可以让我们试着收集更多信息:第一次选择类别时注释掉,第二次是第一次选择类别-在这种情况下有效吗?@VarunMukka如何:在每次测试中使用页面对象之前实例化它。基本上将
var columnSelect=require('pages/grid/columns/columnselector page')()
移动到每个测试下。这有什么区别吗?谢谢
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);
    });

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

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