使用Protractor查找所有可见元素

Gau*_*ham 10 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);
});
Run Code Online (Sandbox Code Playgroud)

虽然我手动检查了元素是否存在,但我总是将计数设为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>
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 10

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

以下是如何使用它:

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

expect(visibleDivs.count()).toEqual(3);
Run Code Online (Sandbox Code Playgroud)


Ale*_*nov 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);
});
Run Code Online (Sandbox Code Playgroud)