utils.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. export function selectClick(testid: string, eq = 0) {
  2. cy.getTestId(testid).click();
  3. cy.getTestId(testid).find('.rc-virtual-list-holder-inner')
  4. .children().eq(eq).click();
  5. }
  6. export function intoMenu(parent: string, child: string) {
  7. cy.getTestId('menu').children().each(function(el) {
  8. const titleElement = el.find('.ant-menu-submenu-title');
  9. if (titleElement.text() === parent) {
  10. titleElement.trigger('click');
  11. el.find(`ul>li[title="${child}"]`).trigger('click');
  12. }
  13. });
  14. }
  15. export function validateSelect(testid: string, value: string) {
  16. cy.getTestId(testid).find('.ant-select-selection-item')
  17. .should('have.attr', 'title', value).and('have.text', value);
  18. }
  19. export function validateTableList(tableName: string, firstPageNumber = 3, secondPageNumber = 2) {
  20. cy.getTestId(tableName).find('table').find('.ant-table-tbody')
  21. .children('.ant-table-row').should('have.length', firstPageNumber);
  22. cy.getTestId(tableName).siblings('.ant-pagination').find('li[title="2"]').click();
  23. cy.getTestId(tableName).find('table').find('.ant-table-tbody')
  24. .children('.ant-table-row').should('have.length', secondPageNumber);
  25. }
  26. export function validateTableSearch(
  27. tableName: string,
  28. value?: string,
  29. options?: {btnTestId?: string},
  30. ) {
  31. cy.getTestId(tableName).siblings('.ant-pagination').find('li[title="2"]')
  32. .click();
  33. const {btnTestId} = options ?? {};
  34. return function(text?: string) {
  35. cy.getTestId(btnTestId ?? 'search_btn').click();
  36. cy.getTestId(btnTestId ?? 'search_btn').should('have.class', 'ant-btn-loading');
  37. cy.getTestId(tableName).find('table').find('.ant-table-tbody')
  38. .children('.ant-table-row').first().find('td').first()
  39. .should('include.text', text ?? value);
  40. cy.getTestId(btnTestId ?? 'search_btn')
  41. .should('not.have.class', 'ant-btn-loading');
  42. cy.getTestId(tableName).siblings('.ant-pagination').find('li[title="1"]')
  43. .should('have.class', 'ant-pagination-item-active');
  44. };
  45. }
  46. export function tableBtnClick(tableName: string, index: number) {
  47. cy.getTestId(tableName).find('table').find('.ant-table-tbody')
  48. .children('.ant-table-row').first().find('td').last().children().eq(index)
  49. .click();
  50. }
  51. export function validateModalBtnGroup(modalName: string) {
  52. cy.getTestId(modalName).getTestId('modal_btn_group').find('.ant-btn')
  53. .should('have.class', 'ant-btn-loading');
  54. }
  55. export function validateModalOperation(modalName: string, text: string) {
  56. cy.getTestId(modalName).find('form').submit();
  57. validateModalBtnGroup(modalName);
  58. cy.get('.ant-message-notice-content').should('include.text', text);
  59. cy.getTestId(modalName).should('not.exist');
  60. }
  61. export function validatePut(
  62. modalName: string,
  63. label: string,
  64. options?: {addBtnTestId?: string},
  65. ) {
  66. const {addBtnTestId} = options ?? {};
  67. function validateAdd(fn: () => void) {
  68. cy.getTestId(addBtnTestId ?? 'add_btn').click();
  69. cy.getTestId(modalName).should('exist').and('be.visible');
  70. cy.getTestId(modalName).find('h3')
  71. .should('include.text', `新增${label}`);
  72. fn();
  73. validateModalOperation(modalName, '新增成功');
  74. }
  75. function validateEdit(tableName: string, validateFn: () => void) {
  76. tableBtnClick(tableName, 0);
  77. cy.getTestId(modalName).should('exist').and('be.visible');
  78. cy.getTestId(modalName).find('h3').should('include.text', `修改${label}`);
  79. validateFn();
  80. validateModalOperation(modalName, '修改成功');
  81. }
  82. return {validateAdd, validateEdit};
  83. }
  84. export function validateDelete(
  85. tableName: string,
  86. label: string,
  87. ) {
  88. tableBtnClick(tableName, 1);
  89. cy.get('.ant-modal-content').should('be.visible');
  90. cy.get('.ant-modal-confirm-title').should('include.text', `删除${label}`);
  91. cy.get('.ant-modal-confirm-content').should(
  92. 'include.text',
  93. `你确定要删除当前${label}吗?`,
  94. );
  95. cy.get('.ant-modal-confirm-btns').children().last().trigger('click');
  96. cy.getTestId(tableName).find('table').find('.ant-table-tbody')
  97. .children('.ant-table-row').first().find('td').last().children().eq(1)
  98. .should('have.class', 'ant-btn-loading');
  99. cy.getTestId(tableName).find('table').find('.ant-table-tbody')
  100. .children('.ant-table-row').first().find('td').last().children().first()
  101. .should('have.attr', 'disabled');
  102. cy.get('.ant-message-notice-content').should('include.text', '删除成功');
  103. }
  104. export function validateExport(testid?: string) {
  105. cy.getTestId(testid ?? 'export_btn').click();
  106. cy.getTestId(testid ?? 'export_btn').should('have.class', 'ant-btn-loading');
  107. cy.wait('@export');
  108. cy.getTestId(testid ?? 'export_btn').should('not.have.class', 'ant-btn-loading');
  109. }
  110. export function closeModal() {
  111. cy.get('.ReactModal__Overlay')
  112. .trigger(
  113. 'click',
  114. 'topRight',
  115. );
  116. }
  117. export function clickDatePicker(id: string) {
  118. cy.getTestId(id).click();
  119. cy.get('.ant-picker-panels').children().eq(0).find('.ant-picker-content')
  120. .find('tbody').find('td').eq(0).click();
  121. cy.get('.ant-picker-panels').children().eq(1).find('.ant-picker-content')
  122. .find('tbody').find('td').eq(0).click();
  123. }