8

我正在使用 capybara 代替 rails 中的 webrat。我已经安装了 capybara 并在 Gemfile 中使用了 gem 'capybara'。当我使用

page.should have_selector("title", :text => "anything title")

它给出了一个错误

Failure/Error: page.should have_selector("title", :text => "anything title")
expected css "title" with text "anything title" to return something

测试文件如下:

require 'spec_helper'

describe "Test pages" do  
  describe "Home page" do    
    it "should have the content 'Demo App'" do
    visit '/test_pages/home'      
    page.should have_selector("title", :text => "anything title")               
  end
 end
end
4

5 回答 5

12

不确定您使用的是哪个版本的 gem,但我遇到了一个类似的实例,使用 :text 失败但是当我使用 :content 时它通过了测试。我在 Ubuntu Lucid Lynx 上使用 rails 3.2.3、rspec-rails 2.9.0、capybara 1.1.2 和 therubyracer gems。

尝试更换

page.should have_selector("title", :text => "anything title")

page.should have_selector("title", :content => "anything title")
于 2012-05-09T02:48:35.837 回答
4

这里的问题是浏览器将<title>标签视为不可见。(感谢DreadPirateShawn链接到有关此主题的问题)。

没有“干净”的方法来获取标题,但是通过一些技巧,您仍然可以通过执行以下操作来测试标题的值:

first('head title').native.text.should == "WhateverYourTitleNeedsToBe"

不要使用该:content符号,因为在旧版本的 Capybara 中无效标签将被忽略,并且看起来好像您的测试已通过。较新的版本会给你一个很好的错误信息,比如:

ArgumentError:无效键:内容,应该是以下之一:text,:visible,:between,:count,:maximum,:minimum

于 2013-02-14T11:19:11.667 回答
1

我有一个类似的问题,只是想让你知道,Capybara 不支持使用:content,它应该是:text。

:content 的问题是 Capybara 无法识别它,然后它被忽略并显示为 PASSED,但这是错误的行为。

所以如果你使用 Capybara,将每个 :content 切换到 :text 看看测试是否真的通过了,也许有没有注意到的错误。

于 2013-02-07T19:33:00.197 回答
0

我遇到了同样的问题。根据经验,我发现以下内容:

page.should have_selector("title", :text => "AnyTitle")

将期望您的 html 输出包含如下标记:

<title text="AnyTitle"/>

但是,如果您使用 :content 而不是 :text 如下

page.should have_selector("title", :content => "AnyTitle")

那么它会期望您的 html 输出包含如下标签

<title>AnyTitle</title>

因此,如果生成的 html 呈现包含<title text="AnyTitle"/>标记,则应使用 :text ,否则如果生成的 html 呈现包含<title>AnyTitle</title>标记,则可能要使用 :content 。

PS 我的 Gem 环境:capybara-2.0.2、rails-3.2.12、rspec-rails-2.12.2、webrat-0.7.3 如果删除 webrat,那么 Capybara 单独无法识别“:conetnt”关键字。

但修复它的干净方法是:摆脱 webrat 并安装一个稳定的 Capybara-1.1.2,即在 Gemfile

#gem webrat
gem 'capybara', '1.1.2'

请参考普鲁士旺的回答

于 2013-03-03T20:36:39.957 回答
0

只需这样做:

expect(page).to have_title("some title")
于 2014-08-20T10:54:46.293 回答