量角器没有看到元素的孩子

时间:2015-06-23 09:37:49

标签: javascript selenium testing selenium-webdriver protractor

我有功能

var goThrough = function(opt_parentElement) {
    var using = opt_parentElement;
    var matches = [];
    var addMatchingLeaves = function(element) {
        if (element.children) {
            if (element.children.length === 0) {
                matches.push(element);
            }
            for (var i = 0; i < element.children.length; ++i) {
                addMatchingLeaves(element.children[i]);
            }
        }
    };
    addMatchingLeaves(using);

    return matches;
};

然后我在测试中将其称为

  

amountOfElements = goThrough(元素(by.css(&#39; .form-group&#39;)));

html本身就是

<div class="form-group has-feedback">
      <input id="password" name="password" type="password"> 
</div>

问题是函数看不到.form-group的子元素。我已尝试过其他元素,但结果是相同的,函数不会先进入内部&#34;如果&#34;

1 个答案:

答案 0 :(得分:1)

element(by.css('.form-group'))会返回ElementFinder,而不是查询其children所需的DOM元素。如果你有很多元素但是做的工作,这种方法有点慢:

var getLeafs = function(node) {
    return node.all(by.css('*')).filter(function(child) {
        return child.all(by.xpath('*')).count().then(function(childrenCount) {
            return childrenCount === 0;
        });
    });
};

它返回node没有孩子的上下文中的元素。

用法:

var leafs = getLeafs(element(by.css('.form-group')));

leafs.count().then(function(c) {
    console.log(c);
});