量角器过滤器没有特定孩子的元素

时间:2017-07-13 14:07:28

标签: javascript css angularjs selenium protractor

我正在尝试使用.filter()函数过滤掉ElementArrayFinder中的元素。我已成功使用它通过检查特定子项是否存在来过滤元素,但不能反过来。这是HTML的片段:

<div class="krn_event krn_event_line0" unselectable="on" style="position: absolute; left: 477px; top: 161px; width: 84px; height: 32px; white-space: nowrap; overflow: hidden;">
<div unselectable="on" class="krn_event_inner">
    <div class="entity  advanced-renderer" id="shift_20111">  
        <span class="entity-title">9:00 AM - 7:00 PM</span> 
        <div class="entity-segments entity-type-shift">      
            <div class="entity-segment type-break" style="left:40%; width:5%"> </div>       
        </div>  
    </div>
</div>

<div class="krn_event krn_event_line0" unselectable="on" style="position: absolute; left: 58px; top: 236px; width: 71px; height: 32px; white-space: nowrap; overflow: hidden; cursor: pointer;">
<div unselectable="on" class="krn_event_inner">
    <div class="entity  advanced-renderer" id="shift_20121">
        <span class="entity-title">7:00 AM - 3:30 PM</span> 
        <div class="entity-segments entity-type-shift">
            <div class="entity-segment type-break" style="left:47%; width:5%"></div>
            <div class="entity-segment type-transfer" style="left:52%; width:48%"></div>
            <div class="entity-icons">
                <i class="entity-icon icon-k-transfer"></i>
            </div>
        </div>
    </div>
</div>

我只寻找像第一个块这样的元素,它们不包含&#39; .entity-segment类型 - 转换器&#39; div元素。不幸的是,循环不起作用,因为我需要解决isPresent()或。$$()。count()的承诺。这是我到目前为止使用的.filter()函数:

regShifts = shifts.filter(function(elem){
          return elem.$('[class="entity-segment type-transfer"]').isPresent().then(function (ans){
            return ans === false;
          });
        });

其中班次是页面上所有班次的列表。有人能指出我正确的方向还是告诉我这里出了什么问题?当此代码运行时,测试等待并且整个测试因FATAL ERROR而失败:CALL_AND_RETRY_LAST分配失败 - Javascript堆内存不足。它还提供了最后几个GC&#39;和JS stacktrace信息。感谢

编辑:忘了问,是否有一个.not()函数可以合并到这里?我知道EC.not(),但这只适用于我认为的浏览器功能。我做了一些关于CSS选择器的研究并尝试使用:not()但是我无法让它工作。

我有两种方法可以过滤掉我不想要的元素,最后得到所有可用元素的数组。或者,检查我选择的元素(shift)是否具有子元素,如果是,则选择不同的移位。后者似乎更难,因为很难实现承诺循环。非常感谢你们的任何帮助。

1 个答案:

答案 0 :(得分:0)

当你说第一次阻止时,我不是100%清楚你尝试得到什么,买你可以使用:not() css量角器。有点像...

$$('.entity-segment:not(.type-transfer');

这假设您期望多个匹配($$),但如果没有,请使用$ css选择器。