如何正确评估网页是否具有水豚的某些内容?

问题描述

我目前正在尝试评估表单中包含无效参数的情况下,使用Capybara单击我的网站上的“付款”按钮的结果。似乎测试正确执行了所有操作,正确填写了所有字段,然后单击“付款”按钮,但是它并没有“看到”我的.alert选择器,其文本为“电子邮件不能为空,电子邮件无效” 。我不确定为什么它没有“看到”这一点。好像它甚至不在那里。我的控制器正在设置Flash,然后使用Flash方法渲染页面。水豚是否正在尝试评估当前页面是否具有闪光灯?我当前测试的代码如下。任何帮助表示赞赏。我已经阅读了文档,但是一定缺少有关Expect()的内容

feature "order features",type: :feature do
    feature "making a new order" do
        before(:each) do
            visit "/orders/new"
        end

        scenario "with invalid params",js: true do
            fill_in "Your Name *",with: "Benedict Cumberbatch" 
            select("CAM Academy",from: 'order_school_name')
            fill_in "Street Address *",with: "221b Baker St."
            fill_in "City",with: "Vancouver"
            select("WA",from: 'order_state')
            fill_in "Zip code *",with: "98671"
            fill_in "groupNumberBooks",with: 1
            fill_stripe_elements(card: '4242 4242 4242 4242',selector: "#card-element-1 > div > iframe")
            click_button "Pay"
            expect(page).to have_selector('.alert',text: "Email can't be blank,Email is invalid")
        end
    end
end

另一方面,我也尝试过Expect(page).to have_content(“电子邮件不能为空”)。这也不起作用。我在这里想念什么?

编辑:我得到的确切错误消息是:

Failures:

  1) order features making a new order with invalid params
     Failure/Error: expect(page).to have_selector('alert',Email is invalid")
       expected to find css "alert" but there were no matches
     # ./spec/features/order_features_spec.rb:19:in `block (3 levels) in <top (required)>'

我转到了指定的路径,并手动填写了这些字段,并评估了调用渲染器和设置flash [:alert]时页面上呈现的内容

解决方法

听起来您的测试可能正在击中实际的条带(沙盒实例),这意味着失败将比大多数测试花费更长的时间。这意味着Capybara.default_max_wait_time不够长,页面无法实际更新以显示错误消息。您可以增加Capybara.default_max_wait_time,也可以使用wait参数告诉个人期望允许更长的比赛等待时间

expect(page).to have_selector('.alert',text: "Email can't be blank,Email is invalid",wait: 20)

最多等待20秒,预期元素就会出现在页面上