2017-02-22 4 views
0

Ich versuche die Sichtbarkeit eines Div nach einem Klick auf eine Schaltfläche zu testen.testing show/hide mit minitest capybara rails

assert page.find("#visu")[:class].include?("hidden") # this passes 
    assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: none')]") 
    click_button("Show/hide") 
    assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: block')]") 

Leider funktioniert das nicht. Irgendwelche Tipps?

Ich verwende ‚Minitest-Schienen-Capybara‘

Antwort

1

standardmäßig nur Capybara sichtbaren Elemente findet, also, wenn Sie einen der Treiber verwenden, die vollständig CSS (so ziemlich alles außer rack_test) verarbeitet dann nur tun,

assert_selector(:css, '#visu') 

würde ausreichen, um nach einem sichtbaren Element zu suchen. Wenn Sie überprüfen möchten, dass ein Element speziell nicht sichtbar ist, würden Sie

assert_selector(:css, '#visu', visible: :hidden) 

Deshalb testen tun müssen, dass ein Element verborgen war und dann wurde sichtbar, dass es

assert_selector(:css, '#visu', visible: :hidden) 
click_button("Show/hide") 
assert_selector(:css, '#visu') 

Hinweis tun könnte mag eigentlich nicht sinnvoll sein zu prüfen, ob ein Element existiert aber nicht sichtbar ist, kann es sinnvoller sein, einfach zu prüfen, ob das Element nicht da ist (könnte versteckt sein, kann nicht existieren), da sich das Verhalten der Schaltfläche ändert Element (oder Rendering einer Vorlage) würde der Test nicht brechen (und die Änderung im Verhalten hätte die Benutzererfahrung nicht verändert). Dazu müssen Sie nur Wenn

refute_selector(:css, '#visu') # or assert_no_selector depending on preference 
click_button('Show/hide') 
assert_selector(:css, '#visu') 

tun konnte, auf der anderen Seite Sie den rack_test-Treiber verwenden, verarbeitet sie nur ein Teilabschnitt von CSS/Attribute Sichtbarkeit zu bestimmen. In diesem Fall wird ein Element als nicht sichtbar betrachtet, wenn das Inline-Stilattribut des Elements display: none/display:none enthält oder wenn das Element über ein hidden-Attribut verfügt (kein Klassenname von "Versteckt"). Wenn also das Element durch einen Klassennamen 'hide_me' versteckt wird, der display:none in einer externen CSS-Datei anwendet, würde rack_test dieses Element nicht als versteckt betrachten. Stattdessen könnten Sie so etwas wie

assert_selector(:css, '#visu.hide_me') 

und die vollständige Prüfung so etwas wie

assert_selector(:css, '#visu.hide_me') 
click_button("Show/hide") 
assert_selector(:css, '#visu:not(.hide_me)') 

Hinweis wäre tun: die: CSS-Selektor-Typ Parameter weggelassen werden können, wenn Sie Capybara.default_selector nicht geändert haben. Zusätzlich werden Fehlermeldungen viel aussagekräftiger unter Verwendung der assert_selector Assertion als assert page.has_xxx?

+0

assert_selector (: css, '#visu') findet es auch wenn es versteckt ist, also wie kann ich überprüfen, ob ich rack_test verwende? – Ayrad

+0

@Ayrad las den Teil der Antwort beginnend mit "Wenn auf der anderen Seite" ist bereits beantwortet, einfach ersetzen 'hide_me' mit was auch immer Klassenname Elemente in Ihrer App versteckt - von Ihrem Beispiel ist es wahrscheinlich 'versteckt' –

+0

ja, ich habe gelesen und wende den zweiten Teil assert_selector an (: css, '# visu.hidden') funktioniert perfekt, aber assert_selector (: css, '#visu: not (.hidden)') tut dies nicht, weil jquery das .hidden nicht aus dem Element I entfernt Angenommen – Ayrad