Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Матовый

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

Для меня, #drag_to Тем не менее, работала, его полномочия, похоже, ограничены.

Чтобы переместить UI-сортируемую строку стола вниз, мне пришлось создать таблицу с тремя строками, а затем запустить этот шаг огурца:

# 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

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

ПРИМЕЧАНИЕ: я настроил UI-Relatable с tolerance: 'pointer'.

Я последовал за решение @ кодона, и он работает! Единственное, что я изменил в моем коде, настраивает UI-Relatable с tolerance: 'pointer'.

Ограничение, описанное в ответе @ кодона, тоже не уходит. (Я использую Capybara 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top