gpt4 book ai didi

javascript - 通过轮询检查 Capybara 中是否存在 html 标签的特定属性

转载 作者:行者123 更新时间:2023-12-03 04:23:30 24 4
gpt4 key购买 nike

我有这个简单的 HTML。按钮的这些属性(例如“AAAAA”)将根据外部事件进行传输。实时更新由 AJAX 池执行。

<div class="parent">
<div class="group"><button title="AAAAA"/></div>
<div class="group"><button title="BBBBB"/></div>
<div class="group"><button title="CCCCC"/></div>
</div>
<div class="parent">
...
</div>

假设“AAAAA”将在 XXX 事件后转换为“DDDDD”。测试脚本就像...

scenario 'test' do
# Before change
page.within(first('.parent')) do
page.within(all('.group')[0]) do
expect(page.find('button')[:title]).to include('AAAAA')
end
page.within(all('.group')[1]) do
expect(page.find('button')[:title]).to include('BBBBB')
end
page.within(all('.group')[2]) do
expect(page.find('button')[:title]).to include('CCCCC')
end
end

XXX

# After change (AJAX polling)
page.within(first('.parent')) do
page.within(all('.group')[0]) do
expect(page.find('button')[:title]).to include('DDDDD')
end
end
end

但是,这不起作用。因为 expect(page.find('button')[:title]).to include('DDDDD') 不会等到 AJAX 轮询执行。如果我把 sleep(20) 放在 XXX 之后,这个测试就会起作用,但是,我猜这不是 capybara 的方式。

我想知道正确处理这种情况的明智方法。

感谢您的帮助。

最佳答案

您需要使用 Capybara 提供的匹配器,它具有内置的等待/重试行为,而不是提供的 RSpecinclude

expect(page).to have_css("button[title='DDDDDD']")

如果您希望它测试标题中的子字符串,而不是相等,您可以使用 *= 而不是 = 等。

您还应该更喜欢独特的 css 选择器,例如 find('.group:nth-of-type(1)') 而不是 all('.group')[0] 只要有可能(这两个表达式的含义略有不同,因此有时可能不可能),因为从 all/first 返回的元素是不可重新加载的

关于javascript - 通过轮询检查 Capybara 中是否存在 html 标签的特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43835893/

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