0

更新 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只有一个文档类型。


原来的

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

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"

有任何想法吗?

4

1 回答 1

0

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

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

如果你使用的是最新版本的一切,那么 Capybara 默认不会找到不可见的元素。你能试试看find(:xpath, "/html", visible: false)是否有效吗?我能想到的另一件事是您的 XPath 可能与您期望的不匹配。试试//html吧。

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

于 2013-11-14T00:43:58.690 回答