I am trying to test a drag and drop feature in my angular app, but it's not working.
my test
it('should plan a sprint', async () => {
let backlog = await browser.driver.findElement(by.id("backlog"));
let sprint = await browser.driver.findElement(by.id("sprint"));
let backlogRows = await backlog.findElements(by.tagName("tr"));
for(let i = 2; i < 5; i++)
{
console.log(backlogRows[i]);
await browser.actions().dragAndDrop(backlogRows[i], sprint).mouseUp().perform();
}
});
In my html I have two tables the backlog table contains 5 rows excluding the header at the time the test runs. I am trying to drag and drop rows from my backlog table to my sprint table
my html
<div>
<div class="d-flex justify-content-around mt-5 mb-5" *ngIf="sprint | async">
<div class="w-10">
<main-button (click)="navigateToAllSprints()" [label]="'Sprints'"></main-button>
</div>
<div class="d-flex flex-column w-50">
<mat-slide-toggle
[(ngModel)]="isCurrentSprint"
(change)="handleCurrentSprint($event.source.checked)">
{{ isCurrentSprint ? "Close Sprint" : "Set as current sprint" }}
</mat-slide-toggle>
<span class="text-danger mt-3 text-center">{{ activeSprintErrorMessage }}</span>
</div>
<div class="w-10">
<main-button (click)="navigateToAllSprintDetails()" [label]="'Edit Details'"></main-button>
</div>
</div>
<div cdkDropListGroup
class="d-flex justify-content-around">
<div class="w-40" *ngIf="backlogDataSource?.userstories">
<h2>Backlog</h2>
<table
mat-table [dataSource]="backlogDataSource"
cdkDropList
[cdkDropListData]="backlogDataSource.userstories | async"
(cdkDropListDropped)="drop('backlog', $event)"
cdkDropListSortingDisabled = "false"
class="w-100"
id="backlog">
<!-- Assignee Column -->
<ng-container matColumnDef="assignee">
<th mat-header-cell *matHeaderCellDef class="w-10"> <h2>Assignee</h2> </th>
<td mat-cell *matCellDef="let userstory"> <p>{{userstory.assignee}}</p> </td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef class="w-25"> <h2>Name</h2> </th>
<td mat-cell *matCellDef="let userstory"> <p class="truncate">{{userstory.name}}</p> </td>
</ng-container>
<tr class="mat-row" *matNoDataRow>
<td class="mat-cell text-center" colspan="5">No userstories found in the backlog</td>
</tr>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr
mat-row
*matRowDef="let userstory; columns: displayedColumns;"
routerLink="/project/{{projectId}}/userstory/{{userstory.id}}/details"
cdkDrag
[cdkDragData]=userstory>
</tr>
</table>
</div>
<div class="w-40" *ngIf="sprintDataSource?.userstories">
<h2>{{ (sprint | async)?.name }}</h2>
<table
mat-table [dataSource]="sprintDataSource"
cdkDropList
[cdkDropListData]="sprintDataSource.userstories | async"
(cdkDropListDropped)="drop(sprintName, $event)"
cdkDropListSortingDisabled = "false"
class="w-100"
id="sprint">
<!-- Assignee Column -->
<ng-container matColumnDef="assignee">
<th mat-header-cell *matHeaderCellDef class="w-10"> <h2>Assignee</h2> </th>
<td mat-cell *matCellDef="let userstory"> <p>{{userstory.assignee}}</p> </td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef class="w-25"> <h2>Name</h2> </th>
<td mat-cell *matCellDef="let userstory"> <p class="truncate">{{userstory.name}}</p> </td>
</ng-container>
<tr class="mat-row" *matNoDataRow>
<td class="mat-cell text-center" colspan="5">No userstories found in this sprint</td>
</tr>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr
mat-row
*matRowDef="let userstory; columns: displayedColumns;"
routerLink="/project/{{projectId}}/userstory/{{userstory.id}}/details"
cdkDrag
[cdkDragData]=userstory>
</tr>
</table>
</div>
</div>
I already tried
await browser.driver.actions().dragAndDrop(backlogRows[i], sprint).mouseUp().perform();
but it also does not work.What am I doing wrong and how do I get the drag and drop in protractor to work?