Помогите, пожалуйста, сделать drag and drop.
Вот приложение: Angular Sortable and Draggable Demo. (этот сайт использую как пример).
Задача: в колонке Done нужно переместить карточку ‘Test user module’ самый низ (т/е/ сделать её последней в колонке Done).
Firefox 45.4.0 (c v.47 то же самое)
Selenium 2.53.6
Python 2.7.10
Вижу, что элемент хватается, но когда происходит moveTo, указатель мышки передвигается без захваченного элемента. Если разбить actions на два подхода: clickAndHold и moveTo и между ними поставить паузу и в этот момент просто переместить мышку вручную (захваченный элемент сдвинется с места), то всё срабатывает.
Спасибо огромное! Всё заработало. Оказывается вся магия заключается в этих строчках:
actions.moveToElement(source_card).build().perform();
// does not appear to work
actions.dragAndDropBy(source_card, 0, target_card_location.y - source_card_location.y)
.build().perform();
Thread.sleep(1000);
// works
actions.clickAndHold(source_card).moveToElement(target_card).release().build()
.perform();
Т.е. грубо говоря двойной драг-н-дроп - это решение проблемы.
Проверил, что происходит когда делаем перетаскивание вручную: изначально список карточек в колонке представлен в виде набора li-шек в ul. Когда начинаем перетаскивание, перетаскиваемая li скрывается, добавляется новая li как плейсхолдер + (тут самое главное): Формируется новый ul c одной li (та самая, которую мы перетаскиваем) и в новом ul уже происходит изменение позиции. Поэтому, как я понял, и нужно два драг-н-дропа. Первый который произведёт построение нового ul, и второй который будет делать собственно перетаскивание. Т/е/ всё легко перенеслось на на чистый selenium+python
Спасибо, ещё раз!
P.S. Глянул Ваши проекты на гитхабе - очень здорово!