【问题标题】:Getting the count of elements in a list from Nightwatch从 Nightwatch 获取列表中元素的数量
【发布时间】:2017-06-16 19:32:23
【问题描述】:

我有以下 DOM 结构:

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

我想编写一个返回上面列表中项目数的命令。我是守夜人的新手。这是我的尝试。我的想法是从criteriaDisplay 元素下的&lt;ul&gt; 开始,然后计算它下面的&lt;li&gt; 项。所以我尝试使用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'
            }
        }
    }
};

有人可以帮助我以正确的方式做到这一点吗?

【问题讨论】:

    标签: nightwatch.js


    【解决方案1】:

    我认为这是不对的:

    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

    在调用元素命令和断言(点击等)时,使用 elements 属性可以让您通过带有“@”前缀的名称而不是选择器来引用元素。

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

    您可以使用elements 来获取结果,或者结合使用elementelementIdElements

    简单的只用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);
    });`
    

    【讨论】:

      猜你喜欢
      • 2014-02-13
      • 2010-12-15
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多