Come controllare una casella di controllo in capibara?

Sto usando Rspec e Capybara.

Come posso scrivere un passo per selezionare una checkbox ? Ho provato a check base al valore ma non riesco a trovare la mia checkbox . Non sono sicuro di cosa fare, poiché in effetti ho lo stesso ID con valori diversi

Ecco il codice:

     

Ho trovato il seguente lavoro per me:

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

È meglio non creare più elementi con lo stesso id , in modo che (e non solo per quello) si possa facilmente selezionare / deselezionare una casella di controllo con eleganza

 check 'cityID' uncheck 'cityID' 

Se non è ansible evitare più elementi con lo stesso id e deve ancora spuntare una casella di controllo con un certo valore , può farlo con

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

Maggiori informazioni sulle manipolazioni di capibara possono essere trovate qui

Durante l’esecuzione del test Capibara, hai ottenuto l’object page . Questo è ansible utilizzare per selezionare / deselezionare le caselle di controllo. Come @buruzaemon ha già menzionato:

per trovare e selezionare una casella di controllo per nome, id o testo dell’etichetta.

Supponiamo quindi di avere una casella di controllo nel tuo html come:

  

Puoi controllare questo con:

 page.check('myid') page.check('MyLabel') page.check('myname') 

Deseleziona è lo stesso usa il metodo page.uncheck .

Penso che potresti dover dare degli id unici ai tuoi elementi del modulo , prima di tutto.

Ma per quanto riguarda Capybara e le caselle di controllo, il metodo di istanza del controllo Capybara :: Node :: Actions # ti permetterà di trovare e spuntare una casella di controllo per nome, id o testo dell’etichetta.

So che questa è una domanda più vecchia, ma ci ho lavorato da sola, e dopo aver provato tutto quanto sopra, questo è ciò che alla fine ha funzionato per me:

 find("input[type='checkbox'][value='#{cityID.id}']").set(true) 

Spero che questo sia utile a qualcuno. Sto usando Capybara 2.4.4.

puoi anche usare: xpath invece di: css se hai qualche problema a trovarlo.

find (: xpath, ‘//*[@id=”example”]’).set(true)

su Chrome (e sicuramente su altri browser), puoi “ispezionare l’elemento” e poi facendo clic con il tasto destro sull’elemento a cui sei interessato, c’è “copia xpath” se non sai cosa fosse xpath, ora lo fai.

Puoi anche controllare che tutte le checkbox non siano spuntate con questo esempio.

all (‘input [type = checkbox]’). each do | checkbox | checkbox.should_not be_checked end

.set (true) non ha funzionato per me quindi ho dovuto chiamare .click:

find(...).click

 check find(".whenever input")[:id] 

Penso che questo renderà capybara in attesa di qualsiasi listener di eventi collegato a quell’input, che a volte è un vero rompicapo se non attende …. Se quell’input non ha un ID, scegli un’altra proprietà (ce ne deve essere uno) …