Sto cercando di risolvere un bug nei nostri test che a mio parere dovrebbe funzionare. Sono abbastanza sicuro che sia un bug in selectize o capybara, ma non riesco a capire perché.Il menu a discesa non viene selezionato quando dovrebbe essere ... perché?
Sono entrato nella fonte per il capibara e tutto sembra funzionare come dovrebbe. Non sono davvero sicuro di come andare avanti.
Per testare questo errore, ho ridotto il bug il più possibile in un piccolo test application. Vedere l'impostazione di sotto
bugs/show.html.erb
<select id="select-repo" class="repositories selectized" placeholder="Pick a repository...">
</select>
<select id="dropdown1">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
</select>
<select id="dropdown2">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
</select>
bug_spec.rb
feature 'bug' do
it "spec setup", js: true do
visit bug_path
find('div.selectize-input input', match: :first).set('exercism.io')
select 'Four', from: 'dropdown1' # this is not getting selected
select 'Four', from: 'dropdown2'
sleep 2
expect(page).to have_select('dropdown1', selected: 'Four') # testing that dropdown1 is being selected
end
end
# note that the javascript to initialize the selectize drop down is in application.js if you want to look at it go to the github application.
La prova sopra le visite della pagina che ha un ajax selectize discesa e due elementi di selezionare Normale. Tenta di inserire il testo - 'exercism.io' - nel menu a tendina selectize (di solito ho un'altra linea per imitare effettivamente il tasto invio, ma l'errore si verifica senza quella riga) e poi continua per impostare il valore di dropdown1 e dropdown2. Ho effettuato il test js: true
e sleep 2
per far funzionare ajax e così puoi vedere cosa sta realmente succedendo durante l'esecuzione del test.
Il problema è che non riesce a impostare il valore di dropdown1. Quando esegui il test e vedi cosa succede, puoi vedere che trova il valore da impostare, ma in realtà non lo imposta. Si sposta sulla prossima selezione.
Un'altra cosa strana è che se cambio il test come di seguito, il test passa. Quindi sono abbastanza sicuro che abbia a che fare con l'impostazione del menu a discesa di selezione.
bug_spec.rb
feature 'bug' do
it "spec setup", js: true do
visit bug_path
select 'Four', from: 'dropdown1' # this is not getting selected
select 'Four', from: 'dropdown2'
find('div.selectize-input input', match: :first).set('exercism.io')
sleep 2
expect(page).to have_select('dropdown1', selected: 'Four') # testing that dropdown1 is being selected
end
end
ho replicato questo bug in un demo application che può essere trovato su github.
Scusate se questo è lungo, non ero veramente sicuro di come altro a formulare questa domanda.
Si noti che questo esempio è ridotto. Nel mio codice attuale uso il codice che i ragazzi hanno provided per usare capibara e selezionare insieme.
Non ho familiarità con gli anelli di rubino nel selenio. aiutatemi: quando fate 'selezionate 'Four', da: 'dropdown1' 'cosa fa la strategia selector' da: 'use? – sircapsalot
Si seleziona per ID –
Sì, è necessario distinguere tra, ottenere l'opzione e ottenere l'elemento secondario, nonché distinguere tra ottenere valore e ottenere da id, oppure ottenere da inner-text. Non ci sono abbastanza informazioni nella tua domanda per aiutarmi a rispondere al problema per te. – djangofan