【问题标题】:Virtual Repeater and Protractor虚拟中继器和量角器
【发布时间】:2016-03-30 09:05:42
【问题描述】:

问题:

在 Protractor 中定位 Virtual Repeaters 的规范/首选方法是什么?

故事:

在 Angular Material 设计中,有一个Virtual Repeater,它通过动态重用视口区域中可见的行来帮助提高渲染性能。示例:

<div class="md-virtual-repeat-offsetter" style="transform: translateY(0px);">
    <div md-virtual-repeat="item in ctrl.dynamicItems" md-on-demand="" class="repeated-item ng-binding ng-scope flex" flex="">0</div>
    <div md-virtual-repeat="item in ctrl.dynamicItems" md-on-demand="" class="repeated-item ng-binding ng-scope flex" flex="">1</div>
    <div md-virtual-repeat="item in ctrl.dynamicItems" md-on-demand="" class="repeated-item ng-binding ng-scope flex" flex="">2</div>
</div>

目前,我必须使用by.css定位技术:

$$('[md-virtual-repeat="item in ctrl.dynamicItems"]');

额外问题:

有没有办法让by.repeater 也可以与md-virtual-repeat 一起使用?

【问题讨论】:

    标签: javascript angularjs selenium protractor angular-material


    【解决方案1】:

    根据findRepeaterRows()repeaterMatch() 内置函数,by.repeater 定位器使用 CSS 选择器搜索具有不同前缀的不同“重复”类属性:

    ng-repeat
    ng_repeat
    data-ng-repeat
    x-ng-repeat
    ng:repeat
    

    然后,它剥离所有过滤器、跟踪 (track by)、别名 (as),然后检查我们尝试匹配的转发器值。

    换句话说,by.repeater 目前不会找到虚拟中继器

    在这里创建了一个功能请求:


    此时,考虑到 虚拟中继器不支持高级语法元素trackas,我认为使用 CSS 选择器就足够了:

    $$('[md-virtual-repeat="item in ctrl.dynamicItems"]');
    

    【讨论】:

    • 抱歉,我在这里实际上没有看到答案?使用 $$ 不起作用,因为在向下滚动之前,后面的行不存在 html。功能请求中的建议是依赖第三方提供页面对象,这几乎肯定不会发生
    • @luker02 抱歉,这里没有什么要补充的。这只是量角器中视觉中继器的状态。
    • 没问题,谢谢。我们编写了一个递归函数来使用protractor.Key.ARROW_DOWN 向下滚动,直到元素变得可见或达到重试阈值。速度慢且不推荐用于大型列表,但完成了工作¯\_(ツ)_/¯
    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多