2016-06-26 11 views
2

Ich muss das Vorhandensein von etwas Text in einem bestimmten Teil der Seite überprüfen.Capybara erwarten page.selector to_have

expect(page).to wird zu viel Text ausgegeben, es ist besonders ärgerlich für die Seite, die die Bedingungen der Vereinbarung halten, die immer so lang sind.

Ich möchte expect(page).to(have_text( in wie etwas verwandeln expect('#id').to(have_text(...)

ich nicht herausfinden kann, wie man den Teil der Seite von ID verwiesen auszuwählen. Sollte ich meine expect(page) in eine within('#id') schreiben?

EDIT: wenn möglich, eine Lösung, die gegen verschachtelte Tags arbeitet

<div id="id"> 
    <span class="nested">...</span> 
    Text I want to check with have_text() 
</div>` 

Antwort

1

Sie haben mehrere Möglichkeiten hier, entweder

section = find(:css, '#id') #the :css may be optional depending on your Capybara.default_selector setting 
# or - section = find_by_id('id') 
expect(section).to have_text(...) 

oder

expect(page).to have_css('#id', text: '...') 

oder

expect(page).to have_selector(:id, 'id', text: '...') 

je nachdem, ob Sie das Element für andere Dinge benötigen oder nicht.

+0

Funktionieren diese Lösungen auch gegen Tags, die nicht nur Text, sondern auch verschachtelte Tags haben? '

...Text I want to check
'
...Text I want to check
' –

+0

@ CyrilDuchon-Doris Ja, standardmäßig entspricht die Textoption einem Teilstring eines sichtbaren Textes innerhalb des Elements -' expect (Seite) .to haves_css ('# targetId', Text: 'Text, den ich überprüfen möchte ")" –