【问题标题】:Find all visible elements using Protractor使用量角器查找所有可见元素
【发布时间】:2014-05-26 05:54:50
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

  • 您的选择器似乎是错误的。您的选择器正在搜索 ID 为 #MainContent 后跟 div 元素的元素。你会显示一些 html 吗?
  • @nilsK:实际的 HTML 相当复杂。我在可以重现该问题的问题中放置了一些示例 HTML。谢谢
  • 抱歉回复晚了。尝试以下操作: var main = driver.findElement(by.id('#MainContent')); main.findElements(by.tagName('div')).then(function(divArr) {//...});这里的问题是,divArr 将包含 MainConent 中找到的所有 div 元素。

标签: angularjs protractor


【解决方案1】:

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

这里是如何使用它:

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

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

【讨论】:

    【解决方案2】:

    您的过滤器函数不返回任何内容,因此在 link.isDisplayed() 中添加“return”:

    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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多