xpath在rspec测试中找不到任何东西

时间:2013-11-13 17:54:53

标签: ruby-on-rails ruby-on-rails-3 rspec capybara

更新2 - 添加before(:each)

before(:each) do
    ...
    post_via_redirect(
        sub_domain(
            path: login_view_path(
                @p
            ), 
            subdomain: @account.subdomain
        ),
        first_name: "Capybara",
        last_name: "RSpec"
    )

    expect(response).to render_template(:show)
end

更新

response.body有我正在寻找的数据 但是page.html只有一个doctype。


ORIGINAL

我正在尝试进行一些集成测试。我有这个:

require "spec_helper"

feature "Tracking without Javascript" do
    ...
    scenario "when navigating to a content" do
        ...
        # this passes so I know there is a body
        expect(response.body).to include(c.name)

        find(:xpath, "/html") # see if xpath works...
    end
end

我收到错误:

 Failure/Error: find(:xpath, "/html")
 Capybara::ElementNotFound:
   Unable to find xpath "/html"

任何想法?

1 个答案:

答案 0 :(得分:0)

post_via_redirect不涉及Capybara - 直接(或多或少)与Rails交互,但不通过浏览器交互。这就是Capybara从未指出实际页面的原因。

后代的原创(误导)答案:

如果您使用的是最新版本的所有产品,那么Capybara默认情况下不会找到不可见的元素。您可以试试find(:xpath, "/html", visible: false),看看是否有效?我能想到的另一件事是你的XPath可能没有像你期望的那样匹配。请改为//html

在元级别上,您几乎从不会看到这种断言,因为最终用户并不关心您是否有html元素。通过检查用户可以看到的内容,您将获得更多有用的测试。我也更喜欢使用CSS选择器,因为其他东西(JavaScript和CSS)也倾向于关注它们。我们的整个测试套件可能有一个或两个XPath选择器,用于非常难看的情况。