2017-03-05 3 views
0

können Sie bitte mit diesem Problem helfen?Capybara kann Felder im Funktionstest nicht finden

Capybara können die Felder für "Artikel [title]" und "Artikel [body]", im folgenden Feature-Test finden:

feature "Creating Articles" do 

scenario "A user creates a new article" do 
    visit '/' 

    click_link("New Article") 
    fill_in "article[title]",  with: "title" 
    fill_in "article[body]",  with: "article body" 
    click_button "Create Article" 

    expect(page).to have_content "title" 
    expect(page).to have_content "article body" 

end 

Beiden Felder in den Seiten-Quellcode zeigen sich als <input class="form-control" type="text" name="article[title]" id="article_title"> und <textarea class="form-control" name="article[body]" id="article_body" cols="60" rows="12"></textarea>

, aber RSpec zeigt diesen Fehler weiterhin an.

Capybara::ElementNotFound: 
    Unable to find field "article[title]" 

Vielen Dank für Ihre Hilfe!

+0

Da Sie eine ID auf beide definiert haben, warum nicht versuchen: fill_in „article“ mit: „title“ & fill_in „Körper“, mit: „Artikeltext“ – orion

+0

@orion 'wird fill_in' sichtbare Elemente finden, indem ID-, Name- oder Platzhalterattribute oder verknüpfter Beschriftungstext, so dass ein Wechsel zur ID keinen Unterschied macht. @street Ist der HTML-Code, den Sie anzeigen, wenn Sie im Test-Env oder in der Entwicklungsumgebung laufen? Wenn das dev env - add 'Schlaf 5; puts page.html 'nach dem' click_link ("New Article") '(das zweite - nicht sicher, warum Sie es zweimal klicken) und sehen Sie, was die tatsächliche Seitenquelle in der Testumgebung ist. Odds sind das Feld, von dem du denkst, dass es dort nicht ist oder es wird versteckt. –

+0

@Thomas Walpole. Ich hatte eine Factory- und sign_in-Methode, die in meinem obigen Code nicht enthalten war (ich dachte, es sei überflüssig). Nachdem ich "sleep 5; puts page.html" hinzugefügt hatte, half es mir, das Problem zu sehen, dass Capybara aufgrund einer falschen Methode in meiner Fabrik nicht in der Lage war, sign_in zu passieren. Danke für deine Hilfe! – rstreet

Antwort

-1

Möglicherweise haben Sie mehr Glück mit der ID für die fill_in Deskriptor. fill_in verwenden Deskriptoren für ihr Argument, also entweder diese Formen funktionieren soll:

fill_in "article_title",  with: "title" 
fill_in "article_body",  with: "article body" 

oder

fill_in "id=article_title",  with: "title" 
fill_in "id=article_body",  with: "article body" 

diesen Selenium Tutorial Siehe für eine sinnvolle Beschreibung der verschiedenen Deskriptoren. Ich behalte dieses Lesezeichen für Situationen wie Ihres.

+0

Greg, das Problem war in meiner Fabrik, die nicht im obigen Code enthalten war. Danke für die Referenz! – rstreet

Verwandte Themen