wake-up-neo.com

Wie kann ich ein Kontrollkästchen in Capybara aktivieren?

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">
115
John Dow

Ich habe folgendes für mich gefunden:

# Check
find(:css, "#cityID[value='62']").set(true)

# Uncheck
find(:css, "#cityID[value='62']").set(false)
146
Jon M

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

120
installero

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.

53
p1100i

Ich denke, Sie müssen möglicherweise eindeutige ids 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.

26
buruzaemon

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.

6
Michael Cruz

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.

1
kulssaka

.set (true) hat bei mir nicht funktioniert, also musste ich .click aufrufen:

find(...).click

1
HectorPerez

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

1
user3853159

Ein altes Thema, aber eine andere Lösung ist:

check('Option 3', allow_label_click: true)

1
Samuel
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'
0
Obromios