【问题标题】:New line characters in Cucumber Capybara黄瓜水豚中的换行符
【发布时间】:2018-08-01 11:34:09
【问题描述】:

我正在将 Cucumber 与 Capybara 一起使用。我突然注意到,在捆绑安装之后,我现在正在测试失败,其中换行符作为文本的一部分出现在字符串中。

示例错误:

RSpec::Expectations::ExpectationNotMetError: expected to find text "Longview Road Clase Swansea SA6 7JL" in "Skip to main content\nGOV.UK\nDigital tachograph card\n......."

在过去,那些换行符不存在。我正在努力追查是哪个宝石导致了这种情况。

有没有一种方法可以阻止这种情况,而无需对我从网页中提取的每个文本字符串进行剥离?

一些 gem 版本:

水豚 - 2.18 Rspec 预期 - 3.7.0 黄瓜 - 2.4.0

【问题讨论】:

  • 全文是什么?由于我在“跳至主要内容\nGOV.UK\n数字行驶记录卡\n.......”中看不到“Longview Road Clase Swansea SA6 7JL”

标签: cucumber capybara rspec-expectations


【解决方案1】:

您确定您使用的是 Capybara 2.18 吗?这种行为在 Capybara 3 中发生了变化,现在期望驱动程序返回更接近显示给用户的文本 - https://github.com/teamcapybara/capybara/blob/master/UPGRADING.md#node。如果您真的没有使用 Capybara 3.x,那么您可能更新了您使用 Capybara 的任何驱动程序,它不再支持 Capybara 2.x 行为。

如果您现在使用 Capybara 3.x,那么您需要更改测试以检查实际显示的内容(这是对页面上内容的更正确检查),或者您可以使用 Capybara 3.5+ 版本它为文本/内容匹配器添加了一个normalize_ws 选项,以便您可以编写

expect(element).to have_text('Longview Road Clase Swansea SA6 7JL', normalize_ws: true)

复制更多类似 2.x 的行为

【讨论】:

  • 谢谢你,汤姆。我今天将尝试 3.5,看看我如何继续使用它。
  • 有趣的是,您说检查空格“是对页面内容的更正确检查”。鉴于我们正在检查未呈现空白的 HTML 元素,我认为这不是“更正确”。我发现情况正好相反...感谢 normalize_ws 的提醒
  • @JonathonHorsman 是的——如果你有一些你希望出现在一行上的文本,那么检查“some text”与“some\ntext”只有在空白未被规范化/折叠为单个时才是正确的空格。当空白被规范化时,“some\ntext”将变成“some text”,因此不可区分。
  • @JonathonHorsman 要理解的另一件事是我们不是在谈论 HTML 文档中的空白——我们谈论的是浏览器中显示的空白——即

    some
    text

    --- 对于

    元素 - element.text 将返回 "some\ntext" -- 如果与 'normalize_ws' 相比,它将被视为“一些文本”。另一个例子是

    some  text

    - text 将返回“some text”(在“some”和“text”之间有两个空格,如浏览器中所示,使用 normalize_ws 将被处理作为一个空间。

  • 我在我的spec_helper 中设置了Capybara.default_normalize_ws = true,我现在一切都好。我了解更新,但我觉得虽然在发布时默认为 true 会破坏更少的规范。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多