2016-04-01 6 views
0

Ich habe den folgenden Code als Teil eines Tests:Text Validierung auf einer Webseite, in der mehrere Elemente haben das gleiche Label

if page.text.include? "Provide your details" 
    go_and_enter_details 
end 

Die Webseite h2 mehrere Elemente markiert hat, einschließlich der, die für den Inhalt überprüft hat wird.

Dieser Fehler wird zurückgegeben:

Ambiguous match, found 3 elements matching css "h2" (Capybara::Ambiguous) 

Wie kann erhalten Rubin/Gurke/Capybara zu identifizieren, ob die Seite den Text enthält ich überprüfen müssen?

+0

auf der HTML Je könnte der Lage sein, die [ 'within'] zu verwenden verwenden (http://www.rubydoc.info/github/ Methode jnicklas/capybara/master/Capybara/Session # innerhalb-instance_method), um das Element zu targetieren. – orde

+0

Dieser Fehler kommt nicht von Ihrem 'page.text.include? ... 'line - also gehe ich davon aus, dass es von deiner' go_and_enter_details' Methode kommt? Wenn ja, zeigen Sie diese Methode und genau, woher der Fehler kommt. Auch mit page.text.include? Sie umgehen das Warteverhalten von Capybaras, was zu flockigen Tests auf dynamischen Seiten führen kann. Wenn Sie 'page.has_text 'verwenden? "Gib deine Details an", dann wird Capybara ein wenig warten, um zu sehen, ob der Text auftaucht. Wenn Sie absichtlich das Warteverhalten nicht wollen, dann gewöhnen Sie sich an 'has_text? 'abc', warte: falsch 'um klar zu machen, dass es beabsichtigt ist –

Antwort

0

Sie haben verschiedene Möglichkeiten:

  • , wenn das Element, das Sie ausfüllen möchten auf der Seite die erste ist, können Sie first element

    first('YOUR ELEMENT').click 
    
  • Sie within verwenden, so dass Sie verwenden können, kann capybara sagen, wo Sie Ihr Element finden können (z. B. in einem div)

    within('body > div > div') do 
    #find your element and do your work 
    end 
    
  • können Sie die CSS selector oder die XPath Ihres Elements