2010-10-28 11 views

Répondre

1

J'utilise une étape web comme celui-ci et il fonctionne très bien:

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 
+1

Je n'ai pas réussi à obtenir cette solution. Quelqu'un d'autre a du succès avec ça? – Francois

+0

En utilisant rspec + capybara (pas de concombre) et je ne peux pas obtenir ce travail non plus. faire glisser les éléments fonctionne (comme dans la méthode renvoie true) mais l'ordre à l'écran n'est pas changé (par save_and_open_screenshot) ou en vérifiant directement le texte. – BM5k

2

la méthode drag_to ne fonctionne pas pour moi. Mais j'ai pu faire le premier élément de ma liste à être traîné à la dernière position en incluant ce qui suit dans mon test de sélénium capybara utilisant jquery.simulate.js:

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}); 
    }); 
}     
+0

Bonjour @Francois. J'ai essayé votre code, mais la bibliothèque simulate.js ne fonctionne pas avec les listes triables. J'ai créé un exemple où j'ai intégré le plugin simulate mais l'ai modifié pour qu'il ralentisse les étapes. Comme vous le verrez, le plugin simulate est en train de glisser, mais le tri ne répond pas correctement. Rendez-vous sur [http://jsbin.com/efuyef/7/edit#javascript,live](http://jsbin.com/efuyef/7/edit#javascript,live) pour voir un exemple où les opérations de traçage et de tri échouent . Moi aussi j'essaie de faire quelque chose de similaire pour le concombre, donc une solution à ce problème serait géniale. Comment avez-vous eu le vôtre pour travailler? –

11

J'ai développé un plugin JQuery pour résoudre ce problème, consultez jquery.simulate.drag-sortable.js qui comprend un plug-in avec une suite de tests et d'exemples.

J'espère que vous trouverez ceci utile! Les commentaires sont les bienvenus.

Matt

+0

Fonctionne comme un charme. Merci! – artemave

+0

J'ai ajouté un exemple d'étape de concombre en utilisant ceci pour le readme du projet. –

0

Pour moi, #drag_to travail a cependant ses pouvoirs semblent être limités.

Pour déplacer une ligne de table UI triables vers le bas, je devais créer une table avec trois lignes, puis exécutez cette étape de concombre:

# 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 

Ce échangerais la première avec la deuxième rangée. Mon interprétation est que Capybara ne traîne pas assez loin, donc je lui ai donné une cible au-delà de ma cible réelle.

Remarque: J'ai configuré UI-classable avec tolerance: 'pointer '.

Questions connexes