我正在尝试使用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>
答案 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);
});