如何编写水豚断言来检查按钮是否存在及其启用或禁用状态?

2024-01-07

我有一个应用程序,可以启用/禁用按钮以响应用户界面中发生的事情。

我可以轻松地使用水豚来检测按钮是否存在

should have_button 'save'

但我不知道如何验证保存按钮的状态。那是:

如何编写一个水豚断言来检查按钮是否存在and它的启用或禁用状态?

我已经编写了一个检查禁用按钮的方法;对于启用,我想我可以验证是否有匹配的按钮并且没有匹配的禁用按钮。但至少可以说,这很笨拙。

这看起来像是一个基本的 UI 检查,我确信我错过了一些东西,但我似乎不知道是什么。


根据gregates的回答进行跟进:

正如我在评论中提到的,水豚行为取决于底层驱动程序。我们正在使用 webkit,它返回“true”/“false”字符串结果。显然,其他驱动程序返回 true/false。 Capybara 的人员已经意识到这个问题 (github.com/jnicklas/capybara/issues/705),但他们觉得(可能是正确的)这并不是他们真正需要解决的问题。

我最终创建了一个自定义匹配器,而不是让我的测试依赖于我正在使用的驱动程序:

RSpec::Matchers.define :be_enabled do
  match do |actual|
    driver_result = actual[:disabled]
    # nil, false, or "false" will all satisfy this matcher
    (driver_result.nil? || driver_result == false || driver_result == "false").should be_true
  end
end

RSpec::Matchers.define :be_disabled do
  match do |actual|
    driver_result = actual[:disabled]
    (driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
  end
end

然后你可以输入:

user_license_area.find_button('Save').should be_disabled

水豚对禁用元素的处理似乎已经改变,所以我想我会提供更新。

要测试页面是否有按钮并且已启用,请使用:

expect(page).to have_button('Save')

要测试页面是否有按钮并且被禁用,请使用:

expect(page).to have_button('Save', disabled: true)

此格式适用于has_field?, find_field, etc.

您可以阅读有关此更新的更多信息:http://www.elabs.se/tag/capybara http://www.elabs.se/tag/capybara

UPDATE

旧链接已损坏。这是讨论该功能的 GitHub 问题 https://github.com/jnicklas/capybara/issues/982 and 不幸的是,这是该方法的贫乏文档 http://www.rubydoc.info/github/jnicklas/capybara/Capybara/RSpecMatchers#have_button-instance_method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写水豚断言来检查按钮是否存在及其启用或禁用状态? 的相关文章

  • 如果父模型是新的并且子模型中不为空,则 ActiveAdmin has_many 表单不会保存

    我有两个模型 Room and Student Room has many Students Student belongs to Room 我收到一个错误房间不能为空当我在创建新房间期间尝试将学生添加到房间时 我的猜测是 提交后 子对象
  • Rails 4 在 capistrano 部署后未检测到应用程序

    我目前正在尝试使用 Capistrano 3 部署 Rails 4 应用程序 一切都很顺利 但我遇到了一个问题 是的 我无法在我的应用程序中运行任何 Rails 命令 这是我相关的 capistrano 插件 gem capistrano
  • -bash:pg_dump:找不到命令

    我正在尝试在本地为我的 Rails 应用程序提取一个生产数据库 我本地的 postgres 版本太低 所以我需要从 9 4 1 更新到 Postgresql 9 6 5 我通过 Homebrew 安装了 Postgres 9 6 6 如下所
  • 如何在 Haml 中编写 if 条件?

    怎么写if and if elseRuby on Rails 应用程序的 Haml 语句 HAML 是基于缩进的 解析器可能很棘手 在 Haml 中不需要使用 end 请改用缩进 在 Haml 中 只要在 Ruby 计算命令之后增加缩进 就
  • Rails Partial (Rails 3, HAML) 任意慢

    我使用的是 Rails 3 0 1 HAML 0 3 22 和 Mongrel 1 1 5 MongoMapper 不是 AR 我正在渲染一个列表 每个列表项都是它自己的部分 每次页面渲染其中一个列表项部分时 渲染时间都会延长近 100 倍
  • Rails 3.0.0.beta 和 Facebooker:还有其他人看到以下内容吗?

    我的 Rails 服务器在安装 facebooker 插件后似乎崩溃了 任何有关解决此问题的建议都会很棒 我正在使用 Rails 3 0 0 beta 和 facebooker 以下是我看到的步骤和错误 rails v Rails 3 0
  • Rails 验证日期范围的唯一性

    我有一个涉及员工缺勤记录的应用程序 我需要确保每条记录的开始日期和结束日期不重叠 例如 如果我输入了从今天开始到明天结束的缺勤记录 则不可能以任何方式在该日期范围内输入另一个缺勤记录 所以我不能制作一个从前天开始 然后在后天或任何更晚的日期
  • Rails:调用其他模型的无表模型

    我有一个 Rails 应用程序 其中包含一些模型类 例如Category Subcategory User ETC 为了实现一个不太简单的过滤器功能 我构建了一个过滤器类的层次结构 FilterCategory FilterSubcateg
  • Capybara 无法填充 Stripe Checkout.js 字段

    我在使用 Capybara 测试 Stripe 的 Checkout js 产品时遇到了困难 问题是 Stripe 有一些棘手的客户端验证 欺骗了 Capybara 的 javascript 驱动程序 所以当我告诉 Capybara 填写一
  • 回形针如何更改基本名称(文件名)?

    我正在尝试更改照片的基本名称 文件名 在我的模型中我有 attr accessor image url basename has attached file image styles gt original gt 300x250 gt pn
  • 在代码中的其他地方设计渲染符号=>向上/形式部分

    我刚刚开始使用 Devise 和 Rails3 我已经完成了身份验证并正在工作并了解基础知识 截至目前 在代表我的主页 首页的主控制器中 我有两个链接 一个链接到 注册 gt sign up 另一个链接根据登录 注销 gt sign in
  • Rails 中的并行方法

    我的 Rails Web 应用程序有数十种方法 从调用 API 到处理查询结果 这些方法具有以下结构 def method one batch query API process data end def method nth batch
  • 使用Rails UJS,如何从函数提交远程表单

    我正在使用Rails UJS 我有一个表单设置来进行远程提交 如下所示
  • 是否可以让 Capistrano 通过反向 SSH 隧道进行结帐?

    我正在开发一个驻留在公共主机上的应用程序 但我必须将其源代码保存在公司防火墙后面的 Git 存储库中 我越来越very厌倦了通过缓慢的部署scp 复制整个存储库并在每次部署时通过 SSH 传送 并且希望远程主机只需执行git pull更新
  • 从其父应用程序运行 Rails 引擎的规范

    我有用于父应用程序的 rspec 套件 以及附加的一些引擎规范 我想要的是用一个命令来运行它们 有没有办法将我的 gems 路径包含到 rspec 加载路径中 或者我应该为此编写 rake 任务 我认为这是一个有趣的问题 但我的观点是 Ra
  • HABTM 关系和accepts_nested_attributes_for

    我有一个可以让我创建的表单新博客文章我希望能够创造新类别来自同一个表格 我在帖子和类别之间有一个习惯关系 这就是我遇到麻烦的原因 我有以下2个型号 class Post lt ActiveRecord Base has and belong
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

    我正在使用 Capistrano 3 与我的 Rails 应用程序一起部署 问题是 每次我将应用程序部署到服务器时 log development log 文件都会重置 我听说可以将 production log 文件放入共享文件夹中并在每
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • Rails 4 的 mobile_fu

    我正在尝试将我的应用程序从 Rails 3 2 13 切换到 Rails 4 在此过程中 我遇到了一个主要障碍 我使用 gem mobile fu 来确定用户是否来自移动设备 该 gem 需要 Railties 3 2 13 但 Rails

随机推荐