使用Protractor查找所有可见元素

时间:2014-05-26 05:54:50

标签: angularjs protractor

我正在尝试使用Protractor

查找容器下的所有可见元素
function getVisibleDivs(driver) { 
  var links = driver.findElements(by.css("#MainContent div")); 
  return protractor.promise.filter(links, function(link) { 
    link.isDisplayed(); 
   })
  .then(function(visibleLinks) {
      return visibleLinks; 
    }); 
}

element.all(getVisibleDivs).then(function (items) {
        console.log(items.length);
});

虽然我手动检查了元素是否存在,但我总是将计数设为0。任何用于调试的指针都非常赞赏。

更新一些示例html

<html>
    <body>
        <div id="MainContent">
            <div class="header">
                Header
            </div>
            <div class="content">
                Content
            </div>
            <div class="sidebar" style="display:none">
                Sidebar
            </div>
            <div class="footer">
                Footer
            </div>
        </div>
    </body>
</html>

2 个答案:

答案 0 :(得分:9)

无需直接使用protractor.promise。量角器在filter()上公开函数编程函数,如ElementArrayFinder - element.all()的结果。

以下是如何使用它:

var visibleDivs = $$("#MainContent div").filter(function(link) { 
    return link.isDisplayed();
});

expect(visibleDivs.count()).toEqual(3);

答案 1 :(得分:2)

您的过滤器功能不会返回任何内容,因此请将“return”添加到link.isDisplayed():

function getVisibleDivs(driver) { 
  var links = driver.findElements(by.css("#MainContent div")); 
  return protractor.promise.filter(links, function(link) { 
    return link.isDisplayed(); 
   })
  .then(function(visibleLinks) {
      return visibleLinks; 
    }); 
}

element.all(getVisibleDivs).then(function (items) {
        console.log(items.length);
});