我刚刚做了一个save_and_open_page
,所以这里是我试图点击进行集成测试的HTML。
<input id="tos" name="tos" type="checkbox" value="{:id=>"tos"}">
<label for="tos">I have read and agree to the <a href="/termsofservice" style="color:#428bca" target="_blank">Terms of Service</a>.</label>
代码:
<%= check_box_tag :tos, id: "tos" %>
<%= label_tag "tos", "I have read and agree to the #{link_to 'Terms of Service', terms_path, { style: "color:#428bca", target: "_blank" }}.".html_safe %>
以下是检查我尝试过的事情的所有失败方法
find(:xpath, "//*[@id='tos']").set(true)
check 'tos'
find("#tos").set(true)
check 'I have read and agree to the Terms of Service'
check 'I have read and agree to the "<a href="/termsofservice" style="color:#428bca" target="_blank">Terms of Service</a>".'
find(:css, "#tos[value='{:id=>"tos"}']").set(true)
find(:css, "#tos[value='{:id=>'tos'}']").set(true)
为什么这么难......
根据评论确定更多上下文:
此规范的完整流程是:
describe "something" do
before do
visit '/original'
page.check("tos")
fill_in 'signup_email1', :with => "test@example.com"
click_button 'lend'
save_and_open_page
fill_in 'inventory_1', :with => 1
click_button 'submit_lend'
end
it "should achieve some result" do
...
end
end
到目前为止我尝试过的每次尝试之后,错误信息只是
Failure/Error: fill_in 'inventory_1', :with => 1
Capybara::ElementNotFound:
Unable to find field "inventory_1"
因为它反映了当click_button 'lend'
发生时,用户不会被定向到一个页面,以便在有inventory_1
的地方出借事物,因为相反,他们会获得/original
页面重新呈现并出现错误(通过save_and_open_page
确认),说明在继续之前必须同意服务条款。
答案 0 :(得分:0)
好吧让它工作......也许充其量这是一个糟糕的开发实践的提醒。在我写完页面代码之后,我写了我的测试(反过来我知道......)。在这种情况下,当我编写测试并写出check 'tos'
时,我回到视图中并将id: 'tos'
添加到check_box_tag
。这是错误,check_box_tag
的第二个参数是值,所以通过添加我使check_box_tag
始终采用值tos
而不是1
如果选中,则0
如果没有。
基本上,在规范中check 'tos'
如果在视图中只有<%= check_box_tag "tos %>