在大量隐藏元素中返回可见 list_items 的最佳选择

best option for returning visible list_items in a large collection of hidden elements

我正在寻找有关如何从无序列表中获取 list_items 的最佳性能输入。我只想要可见的 list_items returned。

以下是我正在使用的 html 的示例

<div id="queue-body">
 <ul id="queue-list">
  <li class="message" style="display: none;">oculto</li>
  <li class="message" style="display: none;">oculto</li>
  <li class="message" style="display: none;">oculto</li>
  <li class="message">vidljiv</li>
  <li class="message">vidljiv</li>
  <li class="message">vidljiv</li>
  <li class="message">vidljiv</li>
 </ul>
</div>

大约有 300 个 list_items,目前大约需要 19 秒才能显示 return 40 个

我在我的页面对象中使用以下内容

unordered_list(:queue_list, :id => 'queue-list')
 def visible_queue_submissions
   queue_list_element.list_items.find_all(&:visible?)
 end 

这是我的环境的堆栈

page-object 2.2.4
watir 6.10
selenium-webdriver 3.7.0

find_all(&:visible?) 会很慢,因为 Watir 必须为每个列表项进行电汇。为了使其更快,您需要选择一个不需要迭代的选择器。这通常意味着找到 Watir 可以组合到它的 XPath 构建器中的属性。

在这种情况下,可见元素没有样式属性。因此,您可以使用新的 presence/absence 定位器:

def visible_queue_submissions
  queue_list_element.lis(style: false)
end

即使是这个小列表,我看到执行时间从 1.26 秒减少到 0.14 秒。