2017-02-09 10 views
0

私は理解して、私は、次のエラーを取得するテストを実行したときに、私はこのテストカピバラ:: ElementNotFound:XPathを見つけることができません「[@href '] //」

feature 'Edit post' do 
    let(:post) { build(:post) } 

    scenario 'can edit post' do 
    visit root_path 
    find(:xpath, "//a[@href='/posts/1']").click 

    click_link 'Edit' 

    fill_in 'Title', with: 'This is an updated post' 
    click_button 'Save' 

    expect(page).to have_content('Post was successfully updated') 
    expect(page).to have_content('This is an updated post') 
    end 
end 

を抱えています、カピバラはリンク

Failure/Error: find(:xpath, "//a[@href='/posts/1']").click 

    Capybara::ElementNotFound: 
     Unable to find xpath "//a[@href='/posts/1']" 

を見つけることができないと言われ、私は、ブラウザ上でアプリを開く場合は、私はroot_path(インデックス)からshowリンクをクリックして、私はそこだと思わせるshowアクションにアクセスすることができますテストスクリプトでエラーが発生しました。これをどうすれば解決できますか?私がやった

UPDATE がpage.htmlを置く、これは、オブジェクトが遅延して構築されているletを使用しているとき、私は

<tbody> 
<tr> 
<td>Nihil neque corrupti atque qui eum omnis sapiente harum.</td> 
<td>[&quot;Alias quas culpa expedita voluptatem vel. Eos aut autem tempora saepe odit iste. Iste ducimus dolorem a corrupti esse enim sint. Fugiat eum doloremque soluta ut voluptate sit. Nostrum unde in nobis quam ut adipisci quos cupiditate.&quot;, &quot;Fugiat voluptatem qui totam fugit culpa et. Id omnis repellendus labore mollitia earum dignissimos ipsum. Eum rem qui excepturi culpa aut. Cum adipisci aspernatur nulla qui odio. Sequi minima doloremque iure ea possimus maiores alias.&quot;]</td> 
<td><a href="/articles/1">Show</a></td> 
<td><a href="/articles/1/edit">Edit</a></td> 
<td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/articles/1">Destroy</a></td> 
</tr> 
</tbody> 
</table> 
<br> 
<a href="/articles/new">New Article</a> 

    </body> 

答えて

0

を得るものです。つまり、テストで一度実際に参照するまでは存在しません。あなたはそれを決して参照しないので、それは決して構築されていないので、存在しません。あなたは、この場合にlet!に切り替えると、それはあなたが持っている他の問題は、あなたはそれが1のIDを使用して構築すると仮定することができないということです

let!(:post) { create(:post) } 

構築するためにそれを強制されますので、あなたはおそらくポストを使用したいです実際に良く読み、はるかに少ない脆性

ようになります - あなたのURLのid

find(:xpath, ".//a[@href='/posts/#{post.id}']").click 

https://github.com/teamcapybara/capybara#beware-the-xpath--trapことなしに何のスコープは、XPath式を使用している場合があり、それを置くことに慣れ、動作しません有数の点に注意してください。)

click_link(href: post_path(post)) 

ですが、機能テストでの確認はベストプラクティスではありません。あなたは、私がまた `代わりに、ビルドのcreate`を使用してみました!聞かせて使用してみました、それ

click_link(post.name) #whatever is actually shown on the page 
+0

に示したテキストに基づいてリンクをクリックしたほうが良いと思いますが、私は自分のコードを変更し – Lykos

+0

を動作しませんでしたあなたのような 'find()...' idを今見つけられない 'xpathを見つけることができません// // [@href = '/ articles /']' ' – Lykos

+0

も作成する必要があります。私のレビューで - それ以外の場合は保存されず、あなたのページに表示されません。あなたの例をあなたの現在のコードに更新してください。 –

関連する問題