使用Capybara与延迟加载元素进行交互

时间:2018-11-24 16:19:55

标签: ruby capybara

目前,我在使用延迟加载与页面中的元素进行交互时遇到了麻烦。我需要选择项目列表(主要是从页面顶部到页面底部,最多100个项目)。实施延迟加载后,我只能选择它的一部分,例如其中的1/3,因为它们将所有项目都分成3个不同的部分,那么它将仅加载第一部分。我发现使用tricky Javascript可以像page.execute_script("window.scrollTo(0,100000)")一样将其滚动到底部,然后我可能会得到所有项目。

,但应将其保存为最后一个选项。

所以,我的问题是 Capybara是否支持与“延迟加载”之类的交互。另外,在不使用Javascript的情况下我应该怎么做才能获得全部物品?

1 个答案:

答案 0 :(得分:0)

如果您只是从某个站点抓取数据,则最简单的解决方案是仅使用execute_script滚动页面。但是,如果您正在测试某个应用程序的行为正确,那么您希望远离execute_script,因为它可以允许您执行用户从未做过的事情,这可能会使您的测试无效。而是使用hover将鼠标指针移到页面上会触发加载下一部分的元素上。例如,如果您有显示的项目列表

<ul id="my_list_of_items">
  <li class="item"></li>
  <li class="item"></li>
  ...
  <li class="item"></li>
</ul>

当列表底部滚动到视图中时,将下一组项目加载到页面中,然后执行类似的操作

find('.item:last-child').hover

这将导致页面上的最后一个item元素滚动到视图中,并将移动指针移到该元素上,然后触发更多项目的加载。