首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用capybara-webkit在AJAX调用后等待一个元素出现?

如何使用capybara-webkit在AJAX调用后等待一个元素出现?
EN

Stack Overflow用户
提问于 2014-07-09 17:05:34
回答 3查看 16.7K关注 0票数 8

水豚的方法,wait_until似乎不适用于水豚-webkit。有没有其他的解决方案,或者Javascript的实现?

我有意需要一些sleep的替代品,例如sleep 2

EN

回答 3

Stack Overflow用户

发布于 2014-08-11 00:17:30

如果您的AJAX调用导致DOM更改,Capybara将等待您这样做

代码语言:javascript
运行
复制
page.should have_selector?("some selector")

它是一个故意的Capybara特性,它等待(直到Capybara.default_wait_time) have_selector?和相关方法为真。

如果AJAX调用没有导致DOM更改,就无法使用Capybara在浏览器端等待更改。您也许能够在Javascript中检测到AJAX调用何时完成,并以某种方式将其传递给Capybara,但这将使您的测试和实现紧密耦合。在这种情况下,一种常见的方法是等待AJAX调用的服务器端效果(创建、更新或删除模型对象、发送电子邮件等)。发生的事情。由于Capybara看不到服务器端,您必须自己等待服务器端的更改。

在Capybara1中,您可以使用Capybara的wait_until等待服务器端的更改。wait_until已从Capybara2中删除。我在my answer中向Why does adding "sleep 1" in an after hook cause this Rspec/Capybara test to pass?发布了wait_until的实现

票数 8
EN

Stack Overflow用户

发布于 2015-05-05 22:39:33

可能是这样的:

代码语言:javascript
运行
复制
# AJAX BEGIN
  expect(page).to have_selector('form#new_user_video .submit > .throbber')
  expect(page).to_not have_selector('form#new_user_video .submit > .throbber')
  # AJAX END

在js代码中手动设置'ajax:send‘(追加throbber)和'ajax:success’(删除throbber)。这样,您将能够知道请求何时完成。

并且您应该为ajax设置足够的时间来完成:

代码语言:javascript
运行
复制
Capybara.default_max_wait_time = 5
票数 0
EN

Stack Overflow用户

发布于 2020-11-19 10:55:51

我真的不需要期望,因为它不是我需要测试的东西。

这对我很有效:

代码语言:javascript
运行
复制
page.has_css?('.my-selector')
# or
page.has_content?('Some text on the page')

# continue with test
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24649483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档