Подтвердить что ты не робот

Как я могу проверить JQuery UI Sortable с огурцом

Я пытаюсь написать тест огурца /capybara, чтобы изменить порядок некоторых предметов, а затем сохранить их обратно. Любые мысли о том, как лучше всего это сделать?

4b9b3361

Ответ 1

Я использую такой веб-шаг, и он отлично работает:

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

Ответ 2

Я разработал плагин JQuery для решения этой проблемы, проверьте jquery.simulate.drag-sortable.js, который включает в себя плагин вместе с набором тестов и примеров.

Надеюсь, вы сочтете это полезным! Обратная связь приветствуется.

Matt

Ответ 3

метод drag_to не работал у меня. Но я смог заставить первый элемент в моем списке перетащить в последнюю позицию, включив в мой тест capybara selenium следующее: 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});
  });
}                 

Ответ 4

Для меня #drag_to действительно работало, однако его полномочия кажутся ограниченными.

Чтобы переместить строку таблицы сортировки UI вниз, мне пришлось создать таблицу с тремя строками, затем выполнить этот шаг 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

Это заменит первый со второй строкой. Моя интерпретация заключается в том, что Капибара не тянется достаточно далеко, поэтому я дал ей цель, превышающую мою реальную цель.

Примечание. Я настроил UI-сортировку с помощью tolerance: 'pointer '.

Ответ 5

Я следовал за решением @codener, и оно работает! Единственное, что я изменил в своем коде, - это настраиваемый пользовательский интерфейс с tolerance: 'pointer'.

Ограничения, описанные в ответе @codener, тоже не исчезли. (Я использую капибару 2.18.0.) Не требуется третий ряд, чтобы поменять местами первый и второй ряд.

When /^I drag the first table row down$/ do
  element = find('tbody tr:nth-child(1)')
  target = find('tbody tr:nth-child(2)')
  element.drag_to target
end