-
Notifications
You must be signed in to change notification settings - Fork 310
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
書き出しファイル名パターンのe2eテストを追加 #1488
The head ref may contain hidden characters: "\u66F8\u304D\u51FA\u3057\u30D5\u30A1\u30A4\u30EB\u540D\u30D1\u30BF\u30FC\u30F3\u306Ee2e\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0"
書き出しファイル名パターンのe2eテストを追加 #1488
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
import { test, expect, Page, Locator } from "@playwright/test"; | ||
|
||
import { navigateToOptionDialog } from "../../navigators"; | ||
import { getNewestQuasarDialog } from "../../locators"; | ||
|
||
test.beforeEach(async ({ page }) => { | ||
const BASE_URL = "http://localhost:5173/#/home"; | ||
await page.setViewportSize({ width: 800, height: 600 }); | ||
await page.goto(BASE_URL); | ||
}); | ||
|
||
/** | ||
* 書き出しファイル名パターンダイアログまで移動 | ||
*/ | ||
const moveToFilenameDialog = async (page: Page, optionDialog: Locator) => { | ||
await optionDialog.getByRole("button", { name: "編集する" }).click(); | ||
await page.waitForTimeout(500); | ||
|
||
const filenameDialog = getNewestQuasarDialog(page); | ||
await expect( | ||
filenameDialog.getByText("書き出しファイル名パターン") | ||
).toBeVisible(); | ||
|
||
const doneButton = filenameDialog.getByRole("button", { name: "確定" }); | ||
const textbox = filenameDialog.getByRole("textbox", { | ||
name: "ファイル名パターン", | ||
}); | ||
|
||
return { filenameDialog, doneButton, textbox }; | ||
}; | ||
|
||
test("「オプション」から「書き出しファイル名パターン」を変更したり保存したりできる", async ({ | ||
page, | ||
}) => { | ||
const optionDialog = await navigateToOptionDialog(page); | ||
|
||
let { doneButton, textbox } = await moveToFilenameDialog(page, optionDialog); | ||
|
||
// デフォルト状態は確定ボタンが押せる | ||
await expect(textbox).toHaveValue("$連番$_$キャラ$($スタイル$)_$テキスト$"); | ||
await expect(doneButton).toBeEnabled(); | ||
|
||
// 何も入力されていないときは確定ボタンが押せない | ||
await textbox.click(); | ||
await textbox.fill(""); | ||
await textbox.press("Enter"); | ||
await expect(optionDialog.getByText("何か入力してください")).toBeVisible(); | ||
await expect(doneButton).toBeDisabled(); | ||
|
||
// $連番$ が含まれていない場合は確定ボタンが押せない | ||
await textbox.click(); | ||
await textbox.fill("test"); | ||
await textbox.press("Enter"); | ||
await expect(textbox).toHaveValue("test"); | ||
await expect(optionDialog.getByText("$連番$は必須です")).toBeVisible(); | ||
await expect(doneButton).toBeDisabled(); | ||
|
||
// 無効な文字が含まれている場合は確定ボタンが押せない | ||
await textbox.click(); | ||
await textbox.fill("$連番$\\"); | ||
await textbox.press("Enter"); | ||
await expect(doneButton).toBeDisabled(); | ||
await expect( | ||
optionDialog.getByText("使用できない文字が含まれています:「\\」") | ||
).toBeVisible(); | ||
|
||
// $連番$ を含めると確定ボタンが押せる | ||
await textbox.click(); | ||
await textbox.fill("test"); | ||
await textbox.press("Enter"); | ||
await page.getByRole("button", { name: "$連番$" }).click(); | ||
await expect(textbox).toHaveValue("test$連番$"); | ||
await expect(doneButton).toBeEnabled(); | ||
|
||
// 確定するとダイアログが閉じて設定した内容が反映されている | ||
await doneButton.click(); | ||
await page.waitForTimeout(500); | ||
await expect(optionDialog.getByText("test$連番$.wav")).toBeVisible(); | ||
|
||
// 再度開くと設定した内容が反映されている | ||
({ doneButton, textbox } = await moveToFilenameDialog(page, optionDialog)); | ||
await expect(textbox).toHaveValue("test$連番$"); | ||
|
||
// デフォルト値にリセットできる | ||
await page.getByRole("button", { name: "デフォルトにリセット" }).click(); | ||
await expect(textbox).toHaveValue("$連番$_$キャラ$($スタイル$)_$テキスト$"); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
import { test, expect } from "@playwright/test"; | ||
|
||
import { navigateToMain } from "../navigators"; | ||
import { getNewestQuasarDialog, getQuasarMenu } from "../locators"; | ||
|
||
test.beforeEach(async ({ page }) => { | ||
const BASE_URL = "http://localhost:5173/#/home"; | ||
|
@@ -24,7 +25,7 @@ test("ツールバーのカスタマイズでボタンを追加でき、デフ | |
// ツールバーのカスタマイズページに移動 | ||
await page.getByText("設定").click(); | ||
await page.waitForTimeout(100); | ||
await page.getByText("ツールバーのカスタマイズ").click(); | ||
await getQuasarMenu(page, "ツールバーのカスタマイズ").click(); | ||
await page.waitForTimeout(100); | ||
await expect(page.getByText("ツールバーのカスタマイズ")).toBeVisible(); | ||
|
||
|
@@ -37,8 +38,7 @@ test("ツールバーのカスタマイズでボタンを追加でき、デフ | |
await page.getByRole("button").filter({ hasText: "全部書き出し" }).count() | ||
).toBe(1); | ||
await page.getByText("保存", { exact: true }).click(); | ||
await page | ||
.locator("#q-portal--dialog--6") | ||
await getNewestQuasarDialog(page) | ||
Comment on lines
-40
to
+41
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ダイアログは開いた順番?で最後のindexが変わるので頑健に |
||
.getByRole("button") | ||
.filter({ hasText: "close" }) | ||
.click(); | ||
|
@@ -56,7 +56,7 @@ test("ツールバーのカスタマイズでボタンを追加でき、デフ | |
// 再度ツールバーのカスタマイズページに移動し、デフォルトに戻すボタンを押す | ||
await page.getByText("設定").click(); | ||
await page.waitForTimeout(100); | ||
await page.getByText("ツールバーのカスタマイズ").click(); | ||
await getQuasarMenu(page, "ツールバーのカスタマイズ").click(); | ||
await page.waitForTimeout(100); | ||
expect( | ||
await page | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import { Page } from "@playwright/test"; | ||
|
||
/** | ||
* 最新のquasarダイアログのlocaltorを取得する | ||
*/ | ||
export function getNewestQuasarDialog(page: Page) { | ||
const locator = page.locator('[id^="q-portal--dialog"]'); | ||
return locator.last(); | ||
} | ||
|
||
/** | ||
* quasarのメニューのlocaltorを取得する | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. あっ、Typoしてますね(時すでに遅し) |
||
*/ | ||
export function getQuasarMenu(page: Page, menuName: string) { | ||
return page.getByRole("listitem").filter({ hasText: menuName }); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
メニューの内容は結構同じ案内があって一意に定まりにくいので専用関数を作ってみました。