【问题标题】:Capybara testing if page has regular expressionCapybara 测试页面是否有正则表达式
【发布时间】:2012-09-20 12:55:14
【问题描述】:

我是 RSpec 和 Capybara 的新手,我正在尝试测试页面是否有时间。 12:00 或 14:24 或 08:12 是我要测试的很好的例子。

我正在使用以下正则表达式:

/^\d{2}:\d{2}/

我不确定如何在 capybara 中“表达”来测试页面是否包含此正则表达式。

【问题讨论】:

    标签: ruby-on-rails regex rspec capybara


    【解决方案1】:

    我猜是这样的

    page.text.should match(/^\d{2}:\d{2}/)
    

    或者,使用新的 RSpec 语法

    expect(page.text).to match(/^\d{2}:\d{2}/)
    

    或者您可以测试的不是整个页面,而是某个元素,例如

    find("span.time").text.should match(/^\d{2}:\d{2}/)
    

    【讨论】:

    • 谢谢! page.text 会被弃用吗?
    • 我相信不会,至少在不久的将来不会。似乎很多人使用它并认为它读起来不错。更多详情见this blog post
    • 请注意,检索内容然后对结果使用非 Capybara 匹配器会破坏 Capybara 等待匹配发生的功能。使用此解决方案,您可能会在完成工作以将您要查找的文本放在那里之前检索文本。我什至可以说这是 Capybara 反模式。
    【解决方案2】:

    我不知道这是否是新行为,但您可以使用has_content?

    page.has_content?(/do not have permission/i)

    在 rspec 中,应该是这样的:

    expect(page).to have_content(/do not have permission/i)

    我在online documentation for capybara 中找到了这个,但它在has_text? 下,因为has_content? 只是一个别名。

    【讨论】:

    • 不幸的是,Capybara 不支持不区分大小写的搜索 DSL documentation
    • 这是用于 xpath 搜索,而不是匹配器。 have_contenthas_content 定义,has_text 的别名,它依赖于采用正则表达式的 assert_text。 Ruby 正则表达式引擎确定正则表达式如何匹配某些内容,而不是 capybara 的 DSL。 github.com/jnicklas/capybara/blob/…
    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多