2016-11-09 1 views
3

Ich verwende JS Capybara mit selenium-webdriver für meinen Funktionstest.Rspec: Capybara funktioniert nicht

Ich möchte eine Marke von Auswahlkästchen

Und hier ist mein HTML

<select id="campaign_brand_id" name="campaign[brand_id]" class="form-control"> 
    <option value="">Choose a Brand</option> 
    <option value="1">Brand1</option> 
    <option value="2">Brand2</option> 
</select> 

Hier mein Testcode ist

before(:each) do 
    @brand = FactoryGirl.create(:brand, name: 'Brand1', company: member.company) 
end 

scenario 'Create a new campaign - with minimum valid data', js: true do 
    visit new_brands_campaign_url(host: "skreem.dev", port: Capybara.current_session.server.port) 

    select (@brand.name), from: 'campaign_brand_id' 
    click_button 'Create Campaign' 
end 

ich die versucht haben, folgendes auch ...

1. select (@brand.name), from: 'campaign[brand_id]' 
2. select (@brand.id), from: 'campaign_brand_id' 
3. find('#campaign_brand_id').find(:xpath, "option[#{@brand.id}]").select_option 
4. within '#campaign_brand_id' do 
    find("option[value='1']").click 
    end 

Andere Capybara-Befehle wie fill_inchooseclick_button arbeiten ... Ich bin mit collection_select in der Ansicht ... Ist das dieses Problem verursacht?

enter image description here

+0

Könnten Sie genauer über die nicht funktionieren? –

+0

Was genau ist der Fehler, den Sie beim Auswählen von @ brand.name, von: "campaign_brand_id" 'bekommen? –

Antwort

1

Ich glaube, dass man es fast hatte mit XPath, aber ich versuche es zu vermeiden, darauf zurückzuführen, wie brüchig es sein kann.

Ich verwende den folgenden Code, obwohl vor kurzem bin ich nur mit capybara-webkit statt Selen meine Tests laufen:

option = @brand.name 
find('#campaign_brand_id').find(
    'option', text: /#{option}/i).select_option 

ich den Text als Selektor, wie ich das ist, was der Benutzer sieht und Daher sollte ein Feature-Test aussehen. Außerdem habe ich eine Regex verwendet, um den Text anzupassen, um die Groß-/Kleinschreibung zu ignorieren - dies soll verhindern, dass Tests aufgrund von unbeständigen Änderungen der Benutzeroberfläche, wie z. Es erspart Ihnen auch das peinliche Problem der css text-transform Unordnung mit dem angezeigten vs. tatsächlichen Fall des Textes.


aktualisieren

Wenn das Problem immer noch hält an, werden Sie einige Debug zu tun haben. Mein Vorschlag ist der pry debugger Edelstein. Fügen Sie es zu Ihrer gemfile hinzu und fügen Sie die Zeile binding.pry in das Szenario oberhalb der fehlerhaften Zeile ein. Wenn ich mich richtig erinnere, läuft Selen nur im Vordergrund, so dass Sie die interaktive Hebelkonsole verwenden können, während Sie die Seite sehen.

Versuchen Sie zunächst, die Auswahlbox (find('#campaign_brand_id')) und ihre Optionen zu finden, und sehen Sie dann, was der Selenium-Browser tut, während Sie die Befehle ausführen.

Sollten Sie kein Glück haben, vielleicht werden diese Fragen helfen:

  • Gibt es irgendwelche Fehler oder ist es still
  • Gibt es eine benutzerdefinierte JS/CSS-Fehler Ihre Auswahlboxen modifizieren?
  • Versuchen mit der Seite über execute_script (siehe selenium driver docs für Details)
+0

Immer noch bekomme ich den gleichen Fehler ... Andere Capybara-Befehle wie fill_in, wähle, click_button funktionieren gut ... Kann das Problem mit select nicht verstehen ??? ScreenShot hinzugefügt .... –

0

Verwendung ohne Klammern wählen die Interaktion:

select @brand.name, from: 'campaign[brand_id]' 

oder

select @brand.name, from: 'campaign_brand_id' 

Sie id oder Namen verwenden können, Option from

aber wenn Ihr Formular angepasst und echte Auswahl ausgeblendet ist, als Sie ein anderes Gehäuse verwenden müssen

Verwandte Themen