Ich verwende Rspec und Capybara.
Wie schreibe ich einen Schritt, um eine checkbox
zu prüfen? Ich habe check
anhand des Werts versucht, aber meine checkbox
kann nicht gefunden werden. Ich bin mir nicht sicher, was ich tun soll, da ich dieselbe ID mit unterschiedlichen Werten habe
Hier ist der Code:
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID">
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID">
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">
Ich habe folgendes für mich gefunden:
# Check
find(:css, "#cityID[value='62']").set(true)
# Uncheck
find(:css, "#cityID[value='62']").set(false)
Es ist besser, nicht mehrere Elemente mit demselben id zu erstellen, sodass Sie (und nicht nur dafür) ein Kontrollkästchen mit elegant aktivieren bzw. deaktivieren können
check 'cityID'
uncheck 'cityID'
Wenn man mehrere Elemente mit derselben ID nicht vermeiden kann und trotzdem ein Kontrollkästchen mit einem bestimmten Wert aktivieren muss, kann er dies mit tun
find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)
Weitere Informationen zu capybara Eingabemanipulationen finden Sie hier hier
Beim Ausführen des Capybara-Tests haben Sie das page
-Objekt erhalten. Damit können Sie alle Kontrollkästchen aktivieren/deaktivieren. Wie @buruzaemon schon erwähnt:
um ein Kontrollkästchen nach Namen, ID oder Beschriftungstext zu suchen und zu markieren.
Nehmen wir also an, Sie haben ein Kontrollkästchen in Ihrer HTML-Datei:
<label>
<input type="checkbox" value="myvalue" name="myname" id="myid">
MyLabel
</label>
Sie können dies mit überprüfen:
page.check('myid')
page.check('MyLabel')
page.check('myname')
Deaktivieren Sie dasselbe, verwenden Sie einfach die page.uncheck
-Methode.
Ich denke, Sie müssen möglicherweise eindeutige id
s zu Ihren Formularelementen geben, zunächst einmal.
In Bezug auf Capybara und Kontrollkästchen können Sie mit der Instanzmethode Capybara :: Node :: Actions # check # ein Kontrollkästchen nach Namen, ID oder Beschriftungstext suchen und markieren.
Ich weiß, dass dies eine ältere Frage ist, aber ich habe das selbst durchgearbeitet, und nachdem ich all das ausprobiert habe, hat dies für mich letztendlich funktioniert:
find("input[type='checkbox'][value='#{cityID.id}']").set(true)
Hoffe, das ist für jemanden hilfreich. Ich benutze Capybara 2.4.4.
sie können auch: xpath anstelle von: css verwenden, wenn Sie Probleme bei der Suche haben.
find (: xpath, '//*[@id="example"!').set(true)
in Chrome (und sicherlich anderen Browsern) können Sie das Element "inspizieren". Wenn Sie dann mit der rechten Maustaste auf das gewünschte Element klicken, wird "xpath kopieren" angezeigt, wenn Sie nicht wissen, was xpath war, jetzt tun Sie es.
.set (true) hat bei mir nicht funktioniert, also musste ich .click aufrufen:
find(...).click
Sie können auch überprüfen, ob in diesem Beispiel nicht alle Kontrollkästchen aktiviert sind.
all ('input [type = checkbox]'). jedes do | checkbox | checkbox.should_nicht geprüft werden end
Ein altes Thema, aber eine andere Lösung ist:
check('Option 3', allow_label_click: true)
check find(".whenever input")[:id]
Ich denke, das lässt Capybara auf einen Ereignis-Listener warten, der an diese Eingabe angehängt ist. Dies ist manchmal ein Ärgernis, wenn es nicht wartet ... Wählen Sie eine andere Eigenschaft (es muss eine sein) ...
Wenn die Box mit Text verknüpft ist, z. 'Option 3', dann können Sie es ab capybara 3.0.3
tun
check 'Option 3'