如何使用 Capybara 2.0 测试页面标题?

2023-12-07

尝试测试该页面包含<title>My Title</title> with:

# spec/features/reports_spec.rb
require 'spec_helper'

feature "Archive Management" do
  subject { page }

  describe "Index Page" do
    before(:all) { 10.times { FactoryGirl.create(:randomreport) } }
    after(:all) { Report.delete_all }

    describe "when no search terms present" do
      before { visit reports_path }

      it { should have_selector('title', text: 'My Title') } # <= Fails w/Capybara 2.0
      it { should have_selector('title') }                   # <= passes
      it { should have_text('My Title') }                    # <= passes
      it { should have_selector('h2', text: "Welcome") }     # <= passes
    end
  end
end

错误信息:

 Failure/Error: it { should have_selector('title', text: base_title) }
 Capybara::ExpectationNotMet:
   expected to find css "title" with text "My Title" but there were no matches. Also found "", which matched the selector but not all filters.

我知道我忽略了明显的痛苦,但无法弄清楚它是什么?是<title>标签不再被视为“选择器”?!?或者...?!?

编辑(调试器信息):

如果我按照 @shioyama 巧妙的建议进入调试器,很明显 page.body 包含<title>My Title</title>。包含相同的 page.body<h2>Welcome to My Title Project</h2>并通过!

看来找到了<title>...</title>标记但不My Title在其中。但它确实发现My Title稍后在页面内<a href=\"/\" class=\"brand\">My Title</a>和/或在<h2>Welcome to The My Title Project</h2>:

(rdb:1) p page
#<Capybara::Session>
(rdb:1) p page.body
"<!DOCTYPE html>\n<html>\n<head>\n<title>My Title</title>\n
<meta content='research, report, technology' name='keywords'>\n<meta 
content='Some Project' name='description'>\n<link href=\"/assets/application.css\"
...
</head>\n<body>\n<header class='navbar navbar-fixed-top 
navbar-inverse'>\n<div class='navbar-inner'>\n<div class='container'>\n
<a href=\"/\" class=\"brand\">My Title</a>\n<div class='pull-right'>\n
<ul class='nav'>\n<li><a href=\"/about\">About</a></li>\n<li><a href=\"/help\">Help</a>
</li>\n</ul>\n<form accept-charset=\"UTF-8\" action=\"/reports\" 
class=\"navbar-search\" method=\"get\"><div style=\"margin:0;padding:0;display:inline\">
<input name=\"utf8\" type=\"hidden\" value=\"&#x2713;\" /></div>\n
<input class=\"search-query\" id=\"query\" name=\"query\" 
placeholder=\"Search\" type=\"text\" />\n</form>\n\n</div>\n</div>\n</div>\n</header>\n\n
<div class='container'>\n<div class='hero-unit center'>\n<h1>My Title</h1>\n
<h2>Welcome to The My Title Project</h2>\n<p>Lorem ipsum dolor sit amet, consectetur 
adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
...

我还可以在调试器中尝试什么来找出 has_selector?('title', text: ...) 失败的原因?

那么,在 Capybara 2.0 中测试标题的正确方法是什么?


当我升级到 Capybara 2.0 时,我遇到了同样的问题,并通过使用创建以下自定义 RSpec 匹配器来解决这些问题Capybara.string:

规范/支持/utilities.rb

RSpec::Matchers::define :have_title do |text|
  match do |page|
    Capybara.string(page.body).has_selector?('title', text: text)
  end
end

现在,在规范文件中subject { page }, 我可以用:

it { should have_title("My Title") }
it { should_not have_title("My Title") }

顺便说一句,关于这个问题的对话对我找到这个答案非常有帮助,所以谢谢!

更新1:

如果您不想创建自定义 RSpec 匹配器,感谢这个 StackOverflow 答案按用户dimuch我现在知道你可以打电话have_selector直接在page.source(别名page.body) 测试不可见的 DOM 元素:

it "should show the correct title" do
  page.source.should have_selector('title', text: 'My Title')
end

或在哪里subject { page }:

its(:source) { should have_selector('title', text: 'My Title') }

更新2:

从Capybara 2.1开始,内置了have_title/has_title?匹配器,在这个答案中不需要自定义 RSpec 匹配器。此外,its(:source) { ... }Update 1 中描述的测试似乎在 Capybara 2.1 下失败;我已经确认了have_title/has_title?按预期工作,因此如果您计划升级,最好使用以下语法:

When subject { page }:

it { should have_title("My Title") }
it { should_not have_title("My Title") }

使用时expect语法内it/scenario block:

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

如何使用 Capybara 2.0 测试页面标题? 的相关文章

  • 在 RSpec 测试期间抑制控制台输出

    我正在测试在控制台上放置一些消息的类 包含 put p 警告等 我只是想知道在 RSpec 测试期间是否有能力抑制此输出 我压抑puts通过重定向在我的类中输出 stout到一个文本文件 这样 如果我出于任何原因需要查看输出 它就在那里 但
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • 如何在保存父对象时确保子对象有效?

    假设我有两堂课 class User attr accessible name has one address validates name presence gt true validates associated address end
  • 限制 has_many 关联中的对象数量

    我有一个相册 里面有很多照片 counter cache 设置会更新相册表中的 photos count 列 如何限制相册的照片数量 就我而言 使用就足够了validates length of class Album has many p
  • RuntimeError:无法修改冻结的数组(Rollbar、Rails 5.1 升级)

    升级到rails 5后无法使用rspec和rollbar 创建 Rails 4 应用程序 升级 gemfile 以使用 Rails 5 尝试添加防滚杆 gem support 标准配置 环境 rb Load the Rails applic
  • 如何解决“找不到密钥::密码”?

    I m very铁轨已经生锈了 我认为自从我使用它以来的七年里 发生了很多变化 我正在尝试设置这个示例应用程序 https iridakos com news 2015 06 21 rails sample api ui https iri
  • Rails 3 按字段排序和最后

    您好 我对 Rails 3 2 和订购有疑问 当想要按字段对集合进行排序时 调用时 last ActiveRecord行为怪异 gt gt User order FIELD id 1 User Load 0 4ms SELECT users
  • 使用brew时出现“错误的解释器”错误

    当我尝试运行任何 brew 命令时 出现此错误 Holger Sindbaeks MacBook Air holgersindbaek brew help bash usr local bin brew usr bin ruby bad i
  • Cucumber 是否不需要编写单元测试?

    我对 Ruby ROR 可用的测试框架数量之多感到有点困惑 我最近看了黄瓜轨道广播 http railscasts com episodes search cucumber并发现它们非常有趣 所以我开始玩游戏 然后努力从概念上考虑在哪里进行
  • Rails 中的会话、子域和 authlogic 问题

    我有一个带有 authlogic 身份验证的 Rails 应用程序和一个使用 subdomain fu 构建的 username domain com 结构 但是当从domain com转到username domain com时 我的会话
  • Ruby on Rails 和来自 PSP 的奇怪 HTTP_ACCEPT 标头

    我有 Ruby on Rails 应用程序 3 1rc4 并且每天使用相同的用户代理 Mozilla 4 0 PSP PlayStation Portable 2 00 都会不断遇到一些异常 例外 A ActionView MissingT
  • Rails 4 - 带有 dependent-fields-rails 的条件 JS

    我正在尝试弄清楚如何在我的 Rails 4 应用程序中使用 dependent fields rails gem 我迷路了 我已将 underscore js 包含在我的供应商 javascripts 文件夹中 并更新了我的 applica
  • 在 Rails 中强制内联渲染 PDF 文档

    我正在编写一个从一组 XML 文件生成 PDF 文件的服务 正在正确生成 PDF 但是 每次我单击 查看 PDF 链接时 浏览器都会要求用户下载 PDF 文件 我需要 PDF 内联显示 就像任何常规 HTML 页面一样 我虽然我写的代码是正
  • 将 Twitter 引导样式添加到 Rails 表单助手

    在阅读建议我使用带有引导程序集成的 Simple form gem 的答案后 我安装了它并根据 simple form 说明创建了我的表单 但输入框向右浮动 这是布局 正在使用部分 shared reg 调用该表单 div class co
  • Ruby on Rails 从视图路由到控制器中的自定义方法

    我有一个控制器名称帖子 在我的 config routes rb 我用过这个 resources posts app controllers posts controller rb class PostsController lt Appl
  • Rails validates_与模型的错误消息相关

    我在模型中使用 validates linked 来使用其他模型的验证代码 问题是验证失败的消息是 is invalid 我想将模型验证失败的实际描述错误冒泡到顶部 我发现这个问题 验证与模型的错误消息关联 https stackoverf
  • 为什么安装 Ruby 1.9.3 时会出现 404 错误?

    我最近擦除了我的计算机 操作系统 Mac OS X 10 6 8 并重新安装了所有开发工具 我再次安装了RVM 但是 它不允许我安装 Ruby 1 9 3 到目前为止我已经尝试过 rvm install 1 9 3 rvm install
  • Rails escape_javascript 通过转义单引号创建无效的 JSON

    ActionView中的escape javascript方法转义撇号 作为反斜杠撇号 解析为 JSON 时会出错 例如 消息 我在这里 在打印时是有效的 JSON message I m here But 输出 I m here 导致无效
  • 在部分渲染时执行 JavaScript

    我有一些 JavaScript 代码 我想在用户单击其文件夹之一后执行 它会触发 show 操作和 show js erb 从而呈 现部分内容 Show js erb 当用户单击其文件夹之一时触发 如下所示 body append 它成功注
  • 使用 RSpec 进行 Rails 片段缓存测试

    我觉得这是一个没有太多记录的主题 至少我在这里找到最佳实践时遇到了很多麻烦 我使用 cache key 在视图中进行片段缓存 tbody employees each do employee cache employee do tr emp

随机推荐

  • .NET Reactive Framework 的良好介绍[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 除了 Microsoft 文档之外 是否有关于 Microsoft Reactive Rx 框架的良好介绍和教程 另外 反应式使使用传统异步编码技术难以解决的编程问题变得更容易的一个
  • 自动为 Qt 配置套件

    SO 假设我对 QtCreator 中的新套件有许多设置 GCC 编译器 9 3 0 从源代码构建 因为我必须使用的发行版有一个非常旧的版本 以及环境设置 我已经成功地设置了一个用于编译和执行已编译二进制文件的环境 并制作了一个脚本以使其工
  • 如何在 devstack 中管理用户/密码?

    我已经安装了devstack到一个干净的 Ubuntu 机器 我可以访问 OpenStack 仪表板 http localhost auth login 但是 我不知道如何管理用户或我的初始凭据是什么 此信息保存在哪里 该信息保存在 Key
  • SQLAlchemy与association_proxy的关系问题

    我一直在浏览许多网站 试图了解正在发生的事情 但我确实需要一些直接的帮助 如果我错过了文档中明显的内容 我很抱歉 这就是我想要做的 我已经删除了除了基本代码之外的所有内容 Base declarative base class User B
  • 使用默认文本填充 FILE 字段

    我正在尝试重新利用生成 FILE 字段的代码 以便在将某些内容添加到数据库时使用 并在编辑或详细查看相关项目时使数据库中已有的数据变灰 并禁用 但是 我似乎无法让文本填充该字段 我正在使用这个 echo
  • 如何在oracle中创建具有动态列名和动态数据类型的动态表,无需任何视图或任何其他表类型

    谢谢大家 我们可以在以下的帮助下动态创建一个表execute immediate询问 但是 当我们创建一个表时 它已经创建了 但是如果我想动态创建具有动态列数的表 那么就会出现问题 实际上我已经创建了一个表 但是当我没有随表创建任何列时 会
  • 用于查找、搜索和替换文件中字符串数组的 Shell 脚本

    这与我问的另一个问题 代码高尔夫有关Code Golf 重复文本的 颜色突出显示 我有一个包含以下内容的文件 sample1 txt LoremIpsumissimplydummytextoftheprintingandtypesettin
  • 如何选择合适的距离函数

    这可能是一个微不足道的问题 对于特殊的高维数据集 如何选择一个好的距离函数 我读到一些距离函数 例如欧几里得距离 在高维数据中效果不佳 如果这不能为我们提供良好的距离测量 那么什么函数可以呢 它来自维度的诅咒 基本上是随着维度的增加 空间呈
  • 在 BASH 中向特定日期添加 X 天

    BASH 完全陌生 提前致歉 Problem 我想在特定日期添加 X 天 Code 我发现date在 BASH 中检索当前日期 我还发现可以通过以下方式将 X 天添加到当前日期 expiration date date v 1d 这使 Tu
  • 如何使两个div的高度彼此相等?

    这里我在类行中有两个引导面板 我试图使两个面板的高度彼此相等 即使在面板内放置了任何数量的数据 div class panel body div 任何面板 下面是我的html div class row div class col md 6
  • 如何防止 vim 创建(和留下)临时文件?

    vim 为什么要创建
  • 解析错误:语法错误,意外的 T_ENCAPSED_AND_WHITESPACE

    我可能有语法错误或其他错误 但我什么也没看到
  • 如何在 Woocommerce 中动态更改 PayPal 地址?

    我正在尝试更改 Woocommerce 使用的 PayPal 地址 具体取决于它们所在的页面 我目前只有 5 个产品 所有 5 个产品都需要使用不同的 PayPal 地址 我发现这个钩子可以更改 Paypal 地址 尽管不太确定如何准确添加
  • 如何在不使用在线服务的情况下使用 Ruby 检测用户的输入语言?

    我正在寻找一个库或技术来检测用户提供的文本块的输入语言 在线查找 如谷歌翻译 不适用于此任务 因为我正在编写一个必须离线运行的应用程序 Thanks 这里还有两个n gram您可能想尝试的基于宝石 他们离线工作 https github c
  • 在一个应用程序中使用多个数据库

    我有一个为几组彼此不相关的人制作的网络应用程序 我正在考虑创建单独的数据库 而不是为所有这些数据库使用一个数据库 这将提高查询速度 并使我无需检查用户属于哪个组 但由于我正在使用 LINQ to SQL 我的类与数据库显式连接 因此我必须单
  • 使用 double、OpenCL 进行原子操作

    我想知道是否有一种方法可以用 double 类型实现原子操作 特别是atomic add 对于浮点数 此代码有效 但是原子xchg不支持双倍 while value atomic xchg addr atomic xchg addr 0 0
  • 根据 Woocommerce 中的购物车商品高度添加费用

    我正在尝试找到一个功能 如果购物车中的产品高度超过 2 9 厘米 则会自动向购物车添加费用 我正在将 Woocommerce 用于我们简单的非营利漫画书店 在瑞典 我们使用基于重量的运输作为标准 如果物品尺寸为 3 厘米或以上 则会收取大件
  • 调用验证器但不显示错误消息

    当我单击命令按钮时 验证方法被调用但错误消息没有显示 这是我的代码
  • 如何使用 AJAX 从 PHP 函数获取 true 或 false?

    我测试过状态 php使用 var dump result 返回值并在 check 函数中提醒它 如下所示 function check ajax url status php done function data alert data 它确
  • 如何使用 Capybara 2.0 测试页面标题?

    尝试测试该页面包含 with spec features reports spec rb require spec helper feature Archive Management do subject page describe Ind