Commit 14eb0ef29f348328832039c9987d2e4be11f0825
1 parent
e892e9ad
新增采购单复制创建、采购单编辑保存
Showing
2 changed files
with
189 additions
and
0 deletions
pages/purchasePage.ts
| @@ -124,6 +124,16 @@ export class PurchasePage extends BasePage { | @@ -124,6 +124,16 @@ export class PurchasePage extends BasePage { | ||
| 124 | // 存储温度 | 124 | // 存储温度 |
| 125 | readonly storageTemperatureInput: Locator; | 125 | readonly storageTemperatureInput: Locator; |
| 126 | 126 | ||
| 127 | + // 编辑修改 | ||
| 128 | + readonly editButton: Locator; | ||
| 129 | + | ||
| 130 | + // 入账日期 | ||
| 131 | + readonly entryDateField: Locator; | ||
| 132 | + | ||
| 133 | + // 批次别名 | ||
| 134 | + readonly batchAliasInput: Locator; | ||
| 135 | + readonly batchAliasClearIcon: Locator; | ||
| 136 | + | ||
| 127 | constructor(page: Page) { | 137 | constructor(page: Page) { |
| 128 | super(page); | 138 | super(page); |
| 129 | 139 | ||
| @@ -188,6 +198,16 @@ export class PurchasePage extends BasePage { | @@ -188,6 +198,16 @@ export class PurchasePage extends BasePage { | ||
| 188 | 198 | ||
| 189 | // 存储温度 | 199 | // 存储温度 |
| 190 | this.storageTemperatureInput = page.locator('uni-view:nth-child(9) > .nut-cell__value > .nut-form-item__body__slots > .nut-input > .nut-input__value > .nut-input__input > .uni-input-wrapper > .uni-input-input'); | 200 | this.storageTemperatureInput = page.locator('uni-view:nth-child(9) > .nut-cell__value > .nut-form-item__body__slots > .nut-input > .nut-input__value > .nut-input__input > .uni-input-wrapper > .uni-input-input'); |
| 201 | + | ||
| 202 | + // 编辑修改 | ||
| 203 | + this.editButton = page.getByText('修改', { exact: true }); | ||
| 204 | + | ||
| 205 | + // 入账日期 | ||
| 206 | + this.entryDateField = page.locator('uni-view:nth-child(7) > .nut-cell__value > .nut-form-item__body__slots > .nut-input > .nut-input__value > .nut-input__mask'); | ||
| 207 | + | ||
| 208 | + // 批次别名 | ||
| 209 | + this.batchAliasInput = page.locator('uni-view:nth-child(8) > .nut-cell__value > .nut-form-item__body__slots > .nut-input > .nut-input__value > .nut-input__input > .uni-input-wrapper > .uni-input-input'); | ||
| 210 | + this.batchAliasClearIcon = page.locator('uni-view:nth-child(8) > .nut-cell__value > .nut-form-item__body__slots > .nut-input > .nut-input__clear > .nut-input__clear-icon'); | ||
| 191 | } | 211 | } |
| 192 | 212 | ||
| 193 | /** | 213 | /** |
| @@ -636,6 +656,31 @@ export class PurchasePage extends BasePage { | @@ -636,6 +656,31 @@ export class PurchasePage extends BasePage { | ||
| 636 | } | 656 | } |
| 637 | 657 | ||
| 638 | /** | 658 | /** |
| 659 | + * 选择入账日期:打开日历 → 翻到上一月 → 选择15号 | ||
| 660 | + */ | ||
| 661 | + async selectEntryDate(): Promise<void> { | ||
| 662 | + await this.entryDateField.click(); | ||
| 663 | + await this.page.waitForTimeout(500); | ||
| 664 | + await this.page.locator('.uni-calendar__header-btn').first().click(); | ||
| 665 | + await this.page.waitForTimeout(300); | ||
| 666 | + await this.page.locator('uni-view').filter({ hasText: /^15$/ }).nth(2).click(); | ||
| 667 | + await this.page.waitForTimeout(300); | ||
| 668 | + } | ||
| 669 | + | ||
| 670 | + /** | ||
| 671 | + * 清除并输入批次别名 | ||
| 672 | + * @param alias 批次别名 | ||
| 673 | + */ | ||
| 674 | + async clearAndEnterBatchAlias(alias: string): Promise<void> { | ||
| 675 | + await this.batchAliasInput.click(); | ||
| 676 | + await this.page.waitForTimeout(300); | ||
| 677 | + await this.batchAliasClearIcon.click(); | ||
| 678 | + await this.page.waitForTimeout(300); | ||
| 679 | + await this.batchAliasInput.click(); | ||
| 680 | + await this.batchAliasInput.fill(alias); | ||
| 681 | + } | ||
| 682 | + | ||
| 683 | + /** | ||
| 639 | * 清除采购列表搜索框内容 | 684 | * 清除采购列表搜索框内容 |
| 640 | */ | 685 | */ |
| 641 | async clearSearchInPurchaseList(): Promise<void> { | 686 | async clearSearchInPurchaseList(): Promise<void> { |
| @@ -645,6 +690,15 @@ export class PurchasePage extends BasePage { | @@ -645,6 +690,15 @@ export class PurchasePage extends BasePage { | ||
| 645 | } | 690 | } |
| 646 | 691 | ||
| 647 | /** | 692 | /** |
| 693 | + * 点击采购列表的修改按钮进入编辑页 | ||
| 694 | + */ | ||
| 695 | + async clickEditButton(): Promise<void> { | ||
| 696 | + await this.editButton.click(); | ||
| 697 | + await this.page.waitForLoadState('networkidle', { timeout: 30000 }); | ||
| 698 | + await this.page.waitForTimeout(1000); | ||
| 699 | + } | ||
| 700 | + | ||
| 701 | + /** | ||
| 648 | * 验证采购列表中存在商品 | 702 | * 验证采购列表中存在商品 |
| 649 | * @param productName 商品名称 | 703 | * @param productName 商品名称 |
| 650 | */ | 704 | */ |
tests/purchase.spec.ts
| @@ -535,4 +535,139 @@ test.describe('采购入库', () => { | @@ -535,4 +535,139 @@ test.describe('采购入库', () => { | ||
| 535 | await purchasePage.expectPurchaseOrderStatusPaid(); | 535 | await purchasePage.expectPurchaseOrderStatusPaid(); |
| 536 | }); | 536 | }); |
| 537 | }); | 537 | }); |
| 538 | + | ||
| 539 | + test('采购单编辑保存', async ({ page }, testInfo) => { | ||
| 540 | + test.setTimeout(60000); | ||
| 541 | + const purchasePage = new PurchasePage(page); | ||
| 542 | + | ||
| 543 | + // 添加allure元素 | ||
| 544 | + await allure.epic('仓储管理'); | ||
| 545 | + await allure.feature('采购入库'); | ||
| 546 | + await allure.story('采购单编辑保存'); | ||
| 547 | + | ||
| 548 | + // 测试数据 | ||
| 549 | + let supplierName: string; | ||
| 550 | + let warehouseName: string; | ||
| 551 | + let productName: string; | ||
| 552 | + let newSupplierName: string; | ||
| 553 | + let newWarehouseName: string; | ||
| 554 | + | ||
| 555 | + // 步骤1:进入采购入库页面 | ||
| 556 | + await allure.step('进入采购入库页面', async () => { | ||
| 557 | + await purchasePage.openPurchaseInbound(); | ||
| 558 | + }); | ||
| 559 | + | ||
| 560 | + // 步骤2:随机选择商品 | ||
| 561 | + await allure.step('随机选择商品', async () => { | ||
| 562 | + productName = await purchasePage.selectRandomProduct(); | ||
| 563 | + console.log('商品:', productName); | ||
| 564 | + }); | ||
| 565 | + | ||
| 566 | + // 步骤3:输入数量 | ||
| 567 | + await allure.step('输入数量', async () => { | ||
| 568 | + await purchasePage.enterQuantity('1'); | ||
| 569 | + }); | ||
| 570 | + | ||
| 571 | + // 步骤4:输入单价 | ||
| 572 | + await allure.step('输入单价', async () => { | ||
| 573 | + await purchasePage.enterPrice('1'); | ||
| 574 | + }); | ||
| 575 | + | ||
| 576 | + // 步骤5:点击完成 | ||
| 577 | + await allure.step('点击完成', async () => { | ||
| 578 | + await purchasePage.clickDone(); | ||
| 579 | + }); | ||
| 580 | + | ||
| 581 | + // 步骤6:随机选择供应商 | ||
| 582 | + await allure.step('随机选择供应商', async () => { | ||
| 583 | + supplierName = await purchasePage.getRandomSupplier(); | ||
| 584 | + console.log('供应商:', supplierName); | ||
| 585 | + }); | ||
| 586 | + | ||
| 587 | + // 步骤7:随机选择仓库 | ||
| 588 | + await allure.step('随机选择仓库', async () => { | ||
| 589 | + warehouseName = await purchasePage.getRandomWarehouse(); | ||
| 590 | + console.log('仓库:', warehouseName); | ||
| 591 | + }); | ||
| 592 | + | ||
| 593 | + // 步骤8:点击保存 | ||
| 594 | + await allure.step('点击保存', async () => { | ||
| 595 | + await purchasePage.clickSave(); | ||
| 596 | + }); | ||
| 597 | + | ||
| 598 | + // 步骤9:搜索商品 | ||
| 599 | + await allure.step('搜索商品', async () => { | ||
| 600 | + await purchasePage.searchInPurchaseList(productName); | ||
| 601 | + }); | ||
| 602 | + | ||
| 603 | + // 步骤10:点击修改按钮进入编辑页 | ||
| 604 | + await allure.step('点击修改按钮', async () => { | ||
| 605 | + await purchasePage.clickEditButton(); | ||
| 606 | + }); | ||
| 607 | + | ||
| 608 | + // 步骤11:连续添加两个商品 | ||
| 609 | + await allure.step('添加第一个商品', async () => { | ||
| 610 | + const name = await purchasePage.selectRandomProduct(); | ||
| 611 | + console.log('添加商品1:', name); | ||
| 612 | + await purchasePage.enterQuantity('1'); | ||
| 613 | + await purchasePage.enterPrice('1'); | ||
| 614 | + await purchasePage.clickDone(); | ||
| 615 | + }); | ||
| 616 | + | ||
| 617 | + await allure.step('添加第二个商品', async () => { | ||
| 618 | + const name = await purchasePage.selectRandomProduct(); | ||
| 619 | + console.log('添加商品2:', name); | ||
| 620 | + await purchasePage.enterQuantity('1'); | ||
| 621 | + await purchasePage.enterPrice('1'); | ||
| 622 | + await purchasePage.clickDone(); | ||
| 623 | + }); | ||
| 624 | + | ||
| 625 | + // 步骤12:填写货款优惠 | ||
| 626 | + await allure.step('填写货款优惠', async () => { | ||
| 627 | + await purchasePage.clickSubtotal(); | ||
| 628 | + await purchasePage.enterSubtotalAmount('1'); | ||
| 629 | + }); | ||
| 630 | + | ||
| 631 | + // 步骤13:添加入库费用 | ||
| 632 | + await allure.step('添加入库费用', async () => { | ||
| 633 | + await purchasePage.addExpense(0, '1'); | ||
| 634 | + }); | ||
| 635 | + | ||
| 636 | + // 步骤14:换选供应商 | ||
| 637 | + await allure.step('换选供应商', async () => { | ||
| 638 | + newSupplierName = await purchasePage.getRandomSupplier(); | ||
| 639 | + console.log('新供应商:', newSupplierName); | ||
| 640 | + }); | ||
| 641 | + | ||
| 642 | + // 步骤15:换选仓库 | ||
| 643 | + await allure.step('换选仓库', async () => { | ||
| 644 | + newWarehouseName = await purchasePage.getRandomWarehouse(); | ||
| 645 | + console.log('新仓库:', newWarehouseName); | ||
| 646 | + }); | ||
| 647 | + | ||
| 648 | + // 步骤16:选择入账日期 | ||
| 649 | + await allure.step('选择入账日期', async () => { | ||
| 650 | + await purchasePage.selectEntryDate(); | ||
| 651 | + }); | ||
| 652 | + | ||
| 653 | + // 步骤17:清除并输入批次别名 | ||
| 654 | + await allure.step('输入批次别名', async () => { | ||
| 655 | + await purchasePage.clearAndEnterBatchAlias('批次003'); | ||
| 656 | + }); | ||
| 657 | + | ||
| 658 | + // 步骤18:点击保存 | ||
| 659 | + await allure.step('点击保存', async () => { | ||
| 660 | + await purchasePage.clickSave(); | ||
| 661 | + }); | ||
| 662 | + | ||
| 663 | + // 步骤19:按供应商搜索 | ||
| 664 | + await allure.step('按供应商搜索', async () => { | ||
| 665 | + await purchasePage.searchInPurchaseList(newSupplierName); | ||
| 666 | + }); | ||
| 667 | + | ||
| 668 | + // 步骤20:验证采购列表中存在该商品 | ||
| 669 | + await allure.step('验证采购列表中存在该商品', async () => { | ||
| 670 | + await purchasePage.expectPurchaseListContainsProduct(productName); | ||
| 671 | + }); | ||
| 672 | + }); | ||
| 538 | }); | 673 | }); |
| 539 | \ No newline at end of file | 674 | \ No newline at end of file |