从 Nightwatch 获取列表中元素的数量

Getting the count of elements in a list from Nightwatch

我有以下 DOM 结构:

<div data-qa-id="criteriaDisplay">
    <ul>
        <li>...</li>
        <li>...</li>
        <li>...</li>
    </ul>
</div>

我想写一个命令 returns 上面列表中的项目数。我是 Nightwatch 的新手。这是我的尝试。我的想法是从criteriaDisplay元素下的<ul>开始,然后统计它下面的<li>项。所以我尝试使用 elementIdElements api,但它不起作用:

var criteriaDisplayCommands = {
    getNumberOfItems: function(callback) {
        var self = this;
        console.log(this);
        return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) {
            callback.call(self, result);
        });
    }
};

module.exports = {
    url: function() {
        return this.api.launchUrl + '/search';
    },

    sections: {
        criteriaDisplay: {
            selector: '[data-qa-id="criteriaDisplay"]',
            commands: [criteriaDisplayCommands],
            elements: {
                myList: 'ul'
            }
        }
    }
};

有人可以帮我找到正确的方法吗?

我认为这是不对的:

return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) {
     callback.call(self, result);
});

因为 elementIdElements 要求第一个参数是 elementId。在你的情况下它是一个 css 选择器.

第二个我不确定的是您在 selenium api 中使用了自定义选择器。我认为这行不通(但我不确定)

来自doc's section about defining-elements

Using the elements property allows you to refer to the element by its name with an "@" prefix, rather than selector, when calling element commands and assertions (click, etc).

由于您使用的是 selenium api 而不是命令或断言,我认为这不是有效的输入。

您可以使用 elementselementelementIdElements.

简单的只用elements如下图:

this.api.elements('css selector', 'ul li', function (result) {
    console.log(result.value.length) //(if there are 3 li, here should be a count of 3)
    callback.call(self, result);
});`