程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在条件评估为真时获取元素(扩展ElementArrayFinder)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在条件评估为真时获取元素(扩展ElementArrayFinder)?

开发过程中遇到在条件评估为真时获取元素(扩展ElementArrayFinder)的问题如何解决?下面主要结合日常开发的经验,给出你关于在条件评估为真时获取元素(扩展ElementArrayFinder)的解决方法建议,希望对你解决在条件评估为真时获取元素(扩展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.logs放入循环中和之后,我可以看到它正确地将元素推到分隔符之前,并在到达分隔符时停止。我可能在这里错过了一些东西。

使用量角器2.2.0。


另外,让我知道我是否使问题复杂化了。

大佬总结

以上是大佬教程为你收集整理的在条件评估为真时获取元素(扩展ElementArrayFinder)全部内容,希望文章能够帮你解决在条件评估为真时获取元素(扩展ElementArrayFinder)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。