Sto provando a scrivere un test cetriolo/capibara per riordinare alcuni elementi e quindi salvarli nuovamente. Qualche idea su come fare al meglio?Come posso testare l'interfaccia utente JQuery con Cucumber
risposta
sto usando un passo web come questo e funziona benissimo:
When /^I drag "([^"]*)" on top$/ do |name|
item = Item.find_by_name(name)
sleep 0.2
src = find("#item_id_#{item.id}")
dest = find("div.title")
src.drag_to(dest)
end
metodo drag_to non ha funzionato per me. Ma io ero in grado di provocare il primo elemento nella mia lista per essere trascinato all'ultima posizione inserendo la seguente nella mia jquery.simulate.js capibara prova selenio utilizzando:
page.execute_script %Q{
$.getScript("/javascripts/jquery.simulate.js", function(){
distance_between_elements = $('.task:nth-child(2)').offset().top - $('.task:nth-child(1)').offset().top;
height_of_elements = $('.task:nth-child(1)').height();
dy = (distance_between_elements * ($('.task').size() - 1)) + height_of_elements/2;
first = $('.task:first');
first.simulate('drag', {dx:0, dy:dy});
});
}
Ciao @Francois. Ho provato il tuo codice, ma la libreria simulate.js non funziona con elenchi ordinabili. Ho creato un esempio in cui ho incorporato il plug-in simula ma l'ho modificato in modo da rallentare i passaggi. Come vedrai, il plugin simula sta trascinando, ma ordinabile non risponde correttamente. Vai a [http://jsbin.com/efuyef/7/edit#javascript,live](http://jsbin.com/efuyef/7/edit#javascript,live) per vedere un esempio in cui le operazioni trascinabili e l'ordinabile falliscono . Anche io sto cercando di fare qualcosa di simile per Cucumber, quindi una soluzione a questo sarebbe grandiosa. Come hai fatto a far funzionare il tuo? –
ho sviluppato un plugin jQuery per risolvere questo problema, controlla jquery.simulate.drag-sortable.js che include un plugin con una suite di test ed esempi.
Spero che trovi utile! Il feedback è benvenuto
Matt
Funziona come un fascino. Grazie! – artemave
Ho aggiunto un passaggio di cetriolo di esempio che utilizza questo file per il readme del progetto. –
Per me, #drag_to
ha funzionato, tuttavia, i suoi poteri sembrano essere limitati.
Per spostare una riga della tabella UI-ordinabili giù, ho dovuto creare una tabella con tre righe, quindi eseguire questo passaggio Cucumber:
# Super-primitive step
When /^I drag the first table row down$/ do
element = find('tbody tr:nth-child(1)')
# drag_to needs to drag the element beyond the actual target to really perform
# the reordering
target = find('tbody tr:nth-child(3)')
element.drag_to target
end
Questo sarebbe scambiare la prima con la seconda fila. La mia interpretazione è che Capibara non trascina abbastanza lontano, così ho dato un obiettivo oltre il mio obiettivo reale.
Nota: ho configurato l'interfaccia utente con tolerance: 'pointer
".
Non ho potuto ottenere questa soluzione per funzionare. Qualcun altro ha successo con questo? – Francois
Uso di rspec + capibara (non di cetriolo) e non riesco neanche a farlo funzionare. trascinando gli elementi funziona (come nel metodo restituisce true) ma l'ordine sullo schermo non viene modificato (per save_and_open_screenshot) o controllando direttamente il testo. – BM5k