gpt4 book ai didi

ruby - 使用#all时如何在 capybara 中等待

转载 作者:数据小太阳 更新时间:2023-10-29 09:00:44 24 4
gpt4 key购买 nike

我知道 wait_until 由于某种原因从 Capybara 中删除了。 Capybara 擅长等待,使用find 时等待很好,但在处理AJAX 应用程序时,有时我不得不使用all 方法。例如,我正在处理一个 HTML 表格,我可以通过单击列名称对其进行排序。当我对列名应用排序然后调用 all(td, text: column_name) 时,它返回排序之前存在的值,因为 all 方法不返回像 find 方法一样等待。我目前正在使用定制的助手 wait_for_ajax 来处理此类情况。我不想传递额外的 :wait 参数。有更好的处理方法吗?

最佳答案

如果你正在测试一个应用程序,那么这相对容易,因为你知道测试数据,所以你可以做类似的事情

expect(page).to have_css('table tr:first-child', text 'text first in order when sorted')

这将等待表格的第一行包含排序发生后应首先出现在排序顺序中的文本。

如果您在不知何故不知道测试数据的情况下进行屏幕抓取或测试应用程序,那么它会变得更加困难。当您对列进行排序时,除了行的顺序之外,页面上是否有任何变化?是否有排序指示器、排序后的列标题突出显示等?如果是这样,您可以等待它,假设它在列更新之前实际上没有更新(如果它在单击后立即更新,那么这将不起作用,并且可能实际上是一个糟糕的用户界面,因为您可以结束处理数据不一致)。例如,如果列标题得到一类“排序”,你可以做类似的事情

expect(page).to have_css('table th td.sorted', text: 'text of the column header you sorted by')

这将等待正确的 header 指示它已排序。

如果确实没有任何指示排序已完成的更改,那么您就不走运了,您遇到了极少数应该使用类似 wait_for_ajax 的情况之一。

注意:在这种情况下,传递 :wait 选项对您没有任何帮助。这是因为它是等待找到匹配元素的最大时间量,并且#all 有效匹配 0 个元素 - 它仍然会立即返回(没有任何另一个答案中提到的计数选项,正如您所指出的那样,无论如何在这里对您没有帮助)

关于ruby - 使用#all时如何在 capybara 中等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155293/

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