【发布时间】:2020-07-21 14:14:05
【问题描述】:
我正在尝试解决集成测试中的一个错误,该测试应该测试使用 mat-paginator 在页面之间切换是否正常工作。分页器的 pageSize 为 20,响应夹具包含 24 个“项目”。当我单击该按钮时,我希望看到 20 个表格行、一个启用的“下一步”按钮和剩余的 4 行。它在应用程序中运行良好,但是当我运行测试时,似乎 pageSize 被忽略了。 “下一步”按钮被禁用,分页器显示“第 1 页,共 1 页”并显示所有 24 个项目。
我得到的错误是Timed out retrying: cy.click() failed because this element is disabled,这是有道理的,因为只有一页而不是两页。
我尝试了不同的方法,例如在应用程序的实际代码中更改项目数量和更改 pageSize,并在测试窗口中检查元素(使用 Chrome 84)。将"items" 移动到"data" 也不起作用。
这些是测试、manyItems 和分页器(我确实删除了一些不适用于此问题的代码)
测试
cy.route({ method: 'POST', url: '**/graphql', response: manyItems }).as('manyItems');
cy.visit('/items');
cy.wait(['@manyItems', '@uset', '@colleagues', '@groups'], { requestTimeout: 10000 });
cy.get('.mat-paginator').find('button.mat-paginator-navigation-next.mat-icon-button').click();
许多项目
{
"data": {
"items": [
{ },
{ }, // etc.
]
}
}
分页器
<mat-paginator [pageSize]="20" [hidePageSize]="true" *ngIf="dataSource.data.length > 0"></mat-paginator>
有没有办法解决这个问题?
编辑
dataSource 分页器设置为超时:
setTimeout(() => (this.dataSource.paginator = this.paginator));
现在,当我删除超时时,分页器在实际应用程序中不起作用,所以我在想这个问题可能与它有什么关系?
【问题讨论】:
-
您尝试根据 API 响应对 DOM 元素进行断言,这不一定是错误的,但可能需要一些时间才能呈现。你能在
cy.get('.mat-paginator') ...之前添加一个cy.reload()并再次运行它吗?让我们确保与组件状态无关。 -
重新加载不起作用,它仍然加载了所有 24 个项目。