9

I am trying to test my application where I need to move a widget from one location to other, in other word I need to test drag & drop functionality in an end to end test.

How would I test this?

Zahid Afaque
  • 243
  • 4
  • 13
  • 2
    Have a look at https://github.com/angular/protractor/issues/123 and https://github.com/angular/protractor/commit/fb46ec9bcd568510248831f11d43d0e2398cc606 – Nicolae Olariu Apr 10 '14 at 09:44
  • @Nicolae Olariu the link (https://github.com/angular/protractor/commit/fb46ec9bcd568510248831f11d43d0e2398cc606) you provided work for me – Zahid Afaque Apr 11 '14 at 11:47

3 Answers3

5

I had this same issue. The solution for me was to follow the advice in the Selenium issue here: https://code.google.com/p/selenium/issues/detail?id=3604#c20

Starting with the example from @nilsK, here was my solution:

var yourOffset = {x:5,y:5};
ptor().actions()
    .mouseMove(yourElement,yourOffset)
    .mouseDown()
    .mouseMove(yourElement,{x:0,y:0}) // Initial move to trigger drag start
    .mouseMove(youTarget[,targetOffset]) // [] optional
    .mouseUp()
    .perform();

I think this also solves this issue

Community
  • 1
  • 1
Brady Isom
  • 1,635
  • 2
  • 13
  • 11
1

you will need to chain your mouse actions:

var yourOffset = {x:5,y:5};
ptor().actions().
   mouseMove(yourElement,yourOffset).
   mouseDown().
   mouseMove(youTarget[,targetOffset]). // [] optional
   mouseUp().
   perform();
nilsK
  • 4,323
  • 2
  • 26
  • 40
0

You can use ptor.actions().dragAndDrop(el1, el2).perform();

I have an example here from the test suite in my own application:

/**
 * Reorders questions by dragging and dropping.
 */
this.moveQuestion = function (questionToMove, positionToMoveTo) {
    return page.getQuestionField(positionToMoveTo).then(function (dest) {
        page.getDragHandle(questionToMove).then(function (dragHandle) {
            ptor.actions().dragAndDrop(dragHandle, dest).perform();
            ptor.sleep(800);    // wait for animation
        });
    });
};
Brandon Anzaldi
  • 6,884
  • 3
  • 36
  • 55
Lukas S.
  • 5,698
  • 5
  • 35
  • 50