大佬教程收集整理的这篇文章主要介绍了在条件评估为真时获取元素(扩展ElementArrayFinder),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
也许我错过了一些东西,但是ul li
a
当它们从getText()给您一些东西时,您是否不能只遍历这些元素,然后将它们存储到某个数组中,或者直接在该循环中对其进行某些处理呢?
var i = 0;
var el = element.all(by.CSS('ul li a'));
var tableItems = [];
(function loop() {
el.get(i).getText().then(function(text){
if(text){
tableItems.push(el.get(i));
i+=1;
loop();
}
});
}());
我们有一个以ul->li
列表形式表示的菜单(简化):
<ul class="dropdown-menu" role="menu">
<li ng-repeat="filterItem in filterCtrl.filterPanelCfg track by filterItem.name"
ng-class="{'divider': filterItem.isDivider}" class="ng-scope">
<a href="" class="ng-binding"> Menu Item 1</a>
</li>
...
<li ng-repeat="filterItem in filterCtrl.filterPanelCfg track by filterItem.name"
ng-class="{'divider': filterItem.isDivider}" class="ng-scope">
<a href="" class="ng-binding"> Menu Item 2</a>
</li>
</ul>
在位置N处的某个地方有一个分隔符,可以通过 评估
filterItem.isDivider
或检查a
链接的文本来识别分隔符(如果使用分隔符,则为空)。
现在,目标是获取位于分隔线之前的所有菜单项。您将如何解决这个问题?
我当前的方法相当通用-
扩展ElementArrayFinder
和添加takewhile()
功能(受Python启发itertools.takewhile()
)。这是我如何实现它(基于filter()
):
protractor.ElementArrayFinder.prototype.takewhile = function(whileFn) {
var self = this;
var getWebElements = function() {
return self.getWebElements().then(function(parentWebElements) {
var list = [];
parentWebElements.forEach(function(parentWebElement,indeX) {
var elementFinder =
protractor.ElementFinder.fromWebElement_(self.ptor_,parentWebElement,self.locator_);
list.push(whileFn(elementFinder,indeX));
});
return protractor.promise.all(list).then(function(resolvedList) {
var filteredElementList = [];
for (var index = 0; index < resolvedList.length; index++) {
if (!resolvedList[index]) {
break;
}
filteredElementList.push(parentWebElements[index])
}
return filteredElementList;
});
});
};
return new protractor.ElementArrayFinder(this.ptor_,getWebElements,this.locator_);
};
而且,这是我的使用方式:
this.geTinclusionFilters = function () {
return element.all(by.css("ul.dropdown-menu li")).takewhile(function (inclusionFilter) {
return inclusionFilter.evaluate("!filterItem.isDivider");
});
};
但是,测试只是挂直到jasmine.DEFAULT_TIMEOUT_INTERVAL
在到达takewhile()
呼叫。
如果将console.log
s放入循环中和之后,我可以看到它正确地将元素推到分隔符之前,并在到达分隔符时停止。我可能在这里错过了一些东西。
使用量角器2.2.0。
另外,让我知道我是否使问题复杂化了。
以上是大佬教程为你收集整理的在条件评估为真时获取元素(扩展ElementArrayFinder)全部内容,希望文章能够帮你解决在条件评估为真时获取元素(扩展ElementArrayFinder)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。