Как я могу проверить jQuery ui сортировать с огурцом
Вопрос
Я пытаюсь написать тест огурца / 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