From 284b7fa929dacbdc95b975115755a522b966915e Mon Sep 17 00:00:00 2001 From: Kentaro Ohkouchi Date: Fri, 18 Mar 2022 15:26:51 +0900 Subject: [PATCH] Add page objects --- e2e-tests/pages/shopping/deliv.page.ts | 32 ++++++++++ e2e-tests/pages/shopping/payment.page.ts | 74 ++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 e2e-tests/pages/shopping/deliv.page.ts create mode 100644 e2e-tests/pages/shopping/payment.page.ts diff --git a/e2e-tests/pages/shopping/deliv.page.ts b/e2e-tests/pages/shopping/deliv.page.ts new file mode 100644 index 0000000000..07ae7e2de1 --- /dev/null +++ b/e2e-tests/pages/shopping/deliv.page.ts @@ -0,0 +1,32 @@ +import { Locator, Page } from '@playwright/test'; +import PlaywrightConfig from '../../../playwright.config'; + +export class ShoppingDelivPage { + readonly page: Page; + readonly nextButton: Locator; + readonly addNewDeliveryAddressButton: Locator; + readonly sendToMultipleButton: Locator; + + constructor(page: Page) { + this.page = page; + this.nextButton = page.locator('input[alt=選択したお届け先に送る]'); + this.addNewDeliveryAddressButton = page.locator('[alt=新しいお届け先を追加する]'); + this.sendToMultipleButton = page.locator('[alt=お届け先を複数指定する]'); + } + + async goto() { + await this.page.goto(`${PlaywrightConfig.use.baseURL}/shopping/deliv.php`); + } + + async gotoNext() { + await this.nextButton.click(); + } + + async gotoAddNewDeliveryAddress() { + await this.addNewDeliveryAddressButton.click(); + } + + async gotoSendToMultiple() { + await this.sendToMultipleButton.click(); + } +} diff --git a/e2e-tests/pages/shopping/payment.page.ts b/e2e-tests/pages/shopping/payment.page.ts new file mode 100644 index 0000000000..83372505ae --- /dev/null +++ b/e2e-tests/pages/shopping/payment.page.ts @@ -0,0 +1,74 @@ +import { Locator, Page } from '@playwright/test'; +import PlaywrightConfig from '../../../playwright.config'; + +export class ShoppingPaymentPage { + readonly page: Page; + readonly nextButton: Locator; + readonly paymentMethod: Locator; + readonly deliveryDate: Locator; + readonly deliveryTime: Locator; + readonly enablePoint: Locator; + readonly disablePoint: Locator; + readonly usePoint: Locator; + readonly message: Locator; + + constructor(page: Page) { + this.page = page; + this.nextButton = page.locator('[alt=次へ]'); + this.paymentMethod = page.locator('#payment'); + this.deliveryDate = page.locator('#deliv_date0'); + this.deliveryTime = page.locator('#deliv_time_id0'); + this.enablePoint = page.locator('#point_on'); + this.disablePoint = page.locator('#point_off'); + this.usePoint = page.locator('input[name=use_point]'); + this.message = page.locator('textarea[name=message]'); + } + + async goto() { + await this.page.goto(`${PlaywrightConfig.use.baseURL}/shopping/payment.php`); + } + + async gotoNext() { + await this.nextButton.click(); + } + + async selectPaymentMethod(label: string) { + await this.paymentMethod.locator(`text=${label}`).click(); + } + + async selectDeliveryDate(index: number) { + await this.deliveryDate.selectOption({ index: index }); + } + + async selectDeliveryTime(index: number) { + await this.deliveryTime.selectOption({ index: index }); + } + + async chooseToUsePoint() { + await this.enablePoint.check(); + } + + async doNotChooseToUsePoint() { + await this.disablePoint.check(); + } + + async fillUsePoint(point: number) { + await this.usePoint.fill(String(point)); + } + + async fillMessage(message: string) { + await this.message.fill(message); + } + + async fillOut(paymentMethod?: string, deliveryDateIndex?: number, deliveryTimeIndex?:number, message?: string, usePoint?: number) { + await this.selectPaymentMethod(paymentMethod ?? '銀行振込'); + await this.selectDeliveryDate(deliveryDateIndex ?? 1); + await this.selectDeliveryTime(deliveryTimeIndex ?? 1); + await this.fillMessage(message ?? 'お問い合わせ'); + + if (await this.enablePoint.isVisible()) { + await this.chooseToUsePoint(); + await this.fillUsePoint(usePoint ?? 1); + } + } +}