2012-03-06 3 views
4

카피 바라에 로그인 필드 값을 입력 할 수 없습니다. 여기에 내가 테스트를 실행하면카피 바라가 내 로그인 필드를 채우지 않습니다

require 'spec_helper' 

describe "the login process" do 
    it "signs me in" do 
    visit '/login'  
    fill_in 'user_username', :with => 'Admin' 
    fill_in 'user_password', :with => 'Password' 
    end 
end 

, 그것은 다음과 같은 오류와 함께 실패 login_spec.rb입니다 :

1) the login process signs me in 
    Failure/Error: fill_in 'user_username', :with => 'Admin' 
    Capybara::ElementNotFound: 
    no text field, text area or password field with id, name, or label 'user_username' found 
    # (eval):2:in `fill_in' 
    # ./spec/integration/login_spec.rb:7:in `block (2 levels) in <top (required)>' 

그러나 나는

print page.html 

I을 사용하여 페이지의 내용을 인쇄 할 때 요소 ID가 정확히 표시되는지 확인할 수 있습니다.

<h2>Already Have an Account?</h2> 
<form accept-charset="UTF-8" action="/login" id="sidebar_login" method="post"> 
<div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="DccrBxhdS7WTAM/iEd08L4z9zt8MjBKTxQ0s6lMVIAA="> 
</div> 
<div class="form"></div> 
<div class="login_form_widget"> 
Username 
<div class="inputdiv_widget"> 
    <input class="textfield" id="user_username" name="user[username]" type="text"> 
</div> 
Password 
<div class="inputdiv_widget"> 
    <input class="textfield" id="user_password" name="user[password]" type="password"> 
</div> 

나는 엘리먼트의 id (user_username)와 name (user [username])을 사용해 보았는데 모두 동일한 결과를 보였다. 내가 여기서 누락 된 것이 있습니까? 당신이 좋아하는 레이블을 추가하는 시도하면 어떻게

답변

6

:

<label for="user_username">Username</label> 

과 사양에 당신이 사용

within ".login_form_widget" do 
    fill_in 'Username', :with => 'Admin' 
end 

찾을 라벨 특히 유용하지만 그렇지 않으면 내가 잘못 아무것도 보지 않았다 위에서 사용했던 구문.

+0

나는 실제로 이미 동일한 결과를 시도해 보았습니다. 동일한 페이지에서 두 번 렌더링되는 로그인 양식 때문에 문제가 발생할 수 있다고 생각하십니까? 로그인 페이지를 방문 할 때 일반 로그인 양식이 있지만 헤더에 하나가있어 사용자가 모든 페이지에 로그인 할 수 있습니다. 그게 문제가 될 수 있을까요? – Ken

+1

문제가되는 ID를 기준으로 타겟팅하는 경우. 실제로 동일한 페이지에 동일한 ID가 두 번 렌더링되어서는 안됩니다. 이 경우, 당신의 spec에서 fill_in 물건을 'within'selector ''블럭으로 감싸서 특정 로그인 필드를 타겟팅 할 수 있습니다. 대답 –

+0

에서 업데이트되었습니다. 로그인 페이지의 요소 ID는 헤더의 로그인 양식과 동일합니다. 그게 어떻게 나를 어떻게 추월했는지. within 블록을 사용하면 ID 이름을 수정하는 동안 임시로이 문제가 해결되었습니다. 당신의 도움을 주셔서 감사합니다! – Ken

관련 문제