gpt4 book ai didi

ruby - 检查 capybara 中多个文本节点的内容时的计时问题

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:12 25 4
gpt4 key购买 nike

我们在页面上有一个快速搜索字段,它通过 AJAX 调用过滤先前搜索的结果列表。

我们尝试了几种方法来检查更改列表的内容。

开头有一个列表,例如这个:

<div class="search-list">
<div class="entry">
<div class="job-title">Manager</div>
...
</div>
<div class="entry">
<div class="job-title">Slave</div>
...
</div>
</div>

快速搜索后,整个搜索 search-list 将被 AJAX 响应替换,第二个 entry div 被删除。

我们正在尝试使用以下语句检查此条件:

page.find('.search-list .job-title').map(&:text) =~ ['Manager']

但它只能看到发出 AJAX 请求之前的状态。这可能是由于没有等待 AJAX 请求完成就立即检查了条件。我们尝试了几种方法,例如设置 Selenium 驱动程序的 resynchronize 选项。

将 sleep 10 放在上述行的前面确实有效,但这是一个不干净的解决方案。目前我们不知道如何让它工作,还有其他人吗?

最佳答案

我使用一个辅助方法使用 wait_until 来等待 ajax 完成,然后进行我的测试。

所以也许是这样的:

page.wait_until { page.evaluate_script "jQuery.active == 0" }
page.find('.search-list .job-title').map(&:text) =~ ['Manager']

wait_until 等待直到 block 返回 true(尽管稍后会超时)。您还可以向它传递一个超时值 wait_until(5),以便在分配的时间后退出。

您还可以延长 capybara 的等待时间。

Capybara.default_wait_time = 10

Angular.js 更新

angular.element.active == 0 以同样的方式工作。

jQuery.active == 0 仍然可以在 Angular.js 中使用,但不确定这是否是因为我将 jQuery 作为我的 javascript 库的一部分。

关于ruby - 检查 capybara 中多个文本节点的内容时的计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com