gpt4 book ai didi

javascript - capybara 需要 sleep 才能工作吗?

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

显然,根据 webpagesleepwait_until 在使用最新版本的 Capybara 时无效。 updates .

但是,如果我向测试添加 sleep(1) 调用,我有一组测试只能在快速机器上运行。也就是说,测试看起来像:

describe "dosimeters page" do
before do
click_link("Dosimeter Read History", :match=>:first)
end
...

成为

describe "dosimeters page" do
before do
unix_wait
click_link("Dosimeter Read History", :match=>:first)
end
...

我将 unix_wait 定义为:

def unix_wait
case RbConfig::CONFIG['host_os']
when /darwin/
when /linux-gnu/
sleep(1)
end
end

问题是,我有一台旧的 Ubuntu 12.04 四核笔记本电脑在 Jenkins 上运行这些测试,并且在没有 unix_wait 调用的情况下一切正常。测试在运行 Ubuntu 13.10 的六核台式机和 macbook pro 笔记本电脑上随机失败,但如果我添加 unix_wait 调用,则测试通过。

测试失败本身表明加载失败(即,css 元素在某些运行中丢失,但在其他运行中没有),并且当手动加载站点时,被测试的东西确实有效。

那么这里的适当操作是什么?显然,sleep 在测试期间是不允许的,wait_until 也是不允许的。然而, sleep 是有效的,但对我来说确实非常粗糙。我应该查看 #synchronized 吗?从我从这些博客文章中收集到的信息来看,当我调用 click_link 时,它已经被调用,并且测试仍然失败。

这里接受的协议(protocol)是什么?

我应该补充一点,因为我认为这很重要:这些都是 javascript 测试。我正在使用基于 qt4(不是 qt5)构建的 capybara-webkit。我正在考虑切换到 poltergeist 或其他一些 javascript 驱动程序作为调试步骤。

最佳答案

如果您还没有这样做,在您的测试断言中,如果您检查页面上的内容,它将等待一段设定的时间,直到该内容可用。

因此,您可以添加类似的内容而不是添加 sleep

expect(page).to have_content 'Success'

Capybara 支持 Ajax 和元素加载等,因此它会在检查内容时隐式等待。

如果您需要允许加载您知道可能需要更长时间的元素,例如第 3 方查询/登录,您可以更改默认等待时间

Capybara.default_wait_time = 5

关于javascript - capybara 需要 sleep 才能工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19737068/

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