alessandro trinca tornidor
commited on
Commit
·
ef61044
1
Parent(s):
aa2c02d
test: finish refactoring the test cases handling also mobile cases
Browse files
static/playwright.config.ts
CHANGED
@@ -49,7 +49,6 @@ export default defineConfig({
|
|
49 |
// { name: 'setup_classic_lite.koboldai.net', testMatch: 'setup-classic-lite.koboldai.net.ts' },
|
50 |
{
|
51 |
name: 'chromium',
|
52 |
-
grep: /test-classic-desktop/,
|
53 |
use: {
|
54 |
...devices['Desktop Chrome'],
|
55 |
viewport: { width: 1600, height: 1200 },
|
@@ -57,7 +56,6 @@ export default defineConfig({
|
|
57 |
},
|
58 |
{
|
59 |
name: 'firefox',
|
60 |
-
grep: /test-classic-desktop/,
|
61 |
use: {
|
62 |
...devices['Desktop Firefox'],
|
63 |
viewport: { width: 1600, height: 1200 },
|
@@ -65,75 +63,74 @@ export default defineConfig({
|
|
65 |
},
|
66 |
{
|
67 |
name: 'webkit',
|
68 |
-
grep: /test-classic-desktop/,
|
69 |
use: {
|
70 |
...devices['Desktop Safari'],
|
71 |
viewport: { width: 1600, height: 1200 },
|
72 |
},
|
73 |
},
|
74 |
{
|
75 |
-
name: '
|
76 |
-
grep: /test-classic-responsive/,
|
77 |
use: {
|
78 |
...devices['Desktop Chrome'],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
},
|
81 |
|
82 |
-
// Test against mobile viewports.
|
83 |
{
|
84 |
name: 'MobileChrome',
|
85 |
-
grep: /test-classic-mobile-pixel/,
|
86 |
use: { ...devices['Pixel 7'] },
|
87 |
},
|
|
|
|
|
|
|
|
|
88 |
{
|
89 |
name: 'MobileSafari',
|
90 |
-
grep: /test-classic-mobile-iphone/,
|
91 |
use: { ...devices['iPhone 13'] },
|
92 |
},
|
93 |
{
|
94 |
-
name: '
|
95 |
-
grep: /test-classic-landscape-mobile-iphone/,
|
96 |
use: { ...devices['iPhone 13 landscape'] },
|
97 |
},
|
98 |
|
99 |
{
|
100 |
name: 'iPad (gen 7)',
|
101 |
-
grep: /test-classic-ipad-seven/,
|
102 |
use: { ...devices['iPad (gen 7)'] }
|
103 |
},
|
104 |
{
|
105 |
name: 'iPad (gen 7) landscape',
|
106 |
-
grep: /test-classic-landscape-ipad-seven/,
|
107 |
use: { ...devices['iPad (gen 7) landscape'] }
|
108 |
},
|
109 |
{
|
110 |
name: 'iPad (gen 11)',
|
111 |
-
grep: /test-classic-ipad-eleven/,
|
112 |
use: { ...devices['iPad (gen 11)'] }
|
113 |
},
|
114 |
{
|
115 |
name: 'iPad (gen 11) landscape',
|
116 |
-
grep: /test-classic-landscape-ipad-eleven/,
|
117 |
use: { ...devices['iPad (gen 11) landscape'] }
|
118 |
},
|
119 |
{
|
120 |
name: 'iPad Mini',
|
121 |
-
grep: /test-classic-ipad-mini/,
|
122 |
use: { ...devices['iPad Mini'] }
|
123 |
},
|
124 |
{
|
125 |
name: 'iPad Mini landscape',
|
126 |
-
grep: /test-classic-landscape-ipad-mini/,
|
127 |
use: { ...devices['iPad Mini landscape'] }
|
128 |
},
|
129 |
{
|
130 |
name: 'iPad Pro 11',
|
131 |
-
grep: /test-classic-ipad-pro/,
|
132 |
use: { ...devices['iPad Pro 11'] }
|
133 |
},
|
134 |
{
|
135 |
name: 'iPad Pro 11 landscape',
|
136 |
-
grep: /test-classic-landscape-ipad-pro/,
|
137 |
use: { ...devices['iPad Pro 11 landscape'] }
|
138 |
}
|
139 |
/*
|
|
|
49 |
// { name: 'setup_classic_lite.koboldai.net', testMatch: 'setup-classic-lite.koboldai.net.ts' },
|
50 |
{
|
51 |
name: 'chromium',
|
|
|
52 |
use: {
|
53 |
...devices['Desktop Chrome'],
|
54 |
viewport: { width: 1600, height: 1200 },
|
|
|
56 |
},
|
57 |
{
|
58 |
name: 'firefox',
|
|
|
59 |
use: {
|
60 |
...devices['Desktop Firefox'],
|
61 |
viewport: { width: 1600, height: 1200 },
|
|
|
63 |
},
|
64 |
{
|
65 |
name: 'webkit',
|
|
|
66 |
use: {
|
67 |
...devices['Desktop Safari'],
|
68 |
viewport: { width: 1600, height: 1200 },
|
69 |
},
|
70 |
},
|
71 |
{
|
72 |
+
name: 'responsivePortrait',
|
|
|
73 |
use: {
|
74 |
...devices['Desktop Chrome'],
|
75 |
+
viewport: { width: 600, height: 1260 },
|
76 |
+
}
|
77 |
+
},
|
78 |
+
{
|
79 |
+
name: 'responsiveLandscape',
|
80 |
+
use: {
|
81 |
+
...devices['Desktop Chrome'],
|
82 |
+
viewport: { width: 2000, height: 600 },
|
83 |
}
|
84 |
},
|
85 |
|
86 |
+
// Test against mobile viewports.
|
87 |
{
|
88 |
name: 'MobileChrome',
|
|
|
89 |
use: { ...devices['Pixel 7'] },
|
90 |
},
|
91 |
+
{
|
92 |
+
name: 'MobileChromeLandscape',
|
93 |
+
use: { ...devices['Pixel 7 landscape'] },
|
94 |
+
},
|
95 |
{
|
96 |
name: 'MobileSafari',
|
|
|
97 |
use: { ...devices['iPhone 13'] },
|
98 |
},
|
99 |
{
|
100 |
+
name: 'MobileSafariLandscape',
|
|
|
101 |
use: { ...devices['iPhone 13 landscape'] },
|
102 |
},
|
103 |
|
104 |
{
|
105 |
name: 'iPad (gen 7)',
|
|
|
106 |
use: { ...devices['iPad (gen 7)'] }
|
107 |
},
|
108 |
{
|
109 |
name: 'iPad (gen 7) landscape',
|
|
|
110 |
use: { ...devices['iPad (gen 7) landscape'] }
|
111 |
},
|
112 |
{
|
113 |
name: 'iPad (gen 11)',
|
|
|
114 |
use: { ...devices['iPad (gen 11)'] }
|
115 |
},
|
116 |
{
|
117 |
name: 'iPad (gen 11) landscape',
|
|
|
118 |
use: { ...devices['iPad (gen 11) landscape'] }
|
119 |
},
|
120 |
{
|
121 |
name: 'iPad Mini',
|
|
|
122 |
use: { ...devices['iPad Mini'] }
|
123 |
},
|
124 |
{
|
125 |
name: 'iPad Mini landscape',
|
|
|
126 |
use: { ...devices['iPad Mini landscape'] }
|
127 |
},
|
128 |
{
|
129 |
name: 'iPad Pro 11',
|
|
|
130 |
use: { ...devices['iPad Pro 11'] }
|
131 |
},
|
132 |
{
|
133 |
name: 'iPad Pro 11 landscape',
|
|
|
134 |
use: { ...devices['iPad Pro 11 landscape'] }
|
135 |
}
|
136 |
/*
|
static/tests/{test-classic-desktop-0-lite.koboldai.net.spec.ts → test-classic-0-lite.koboldai.net.spec.ts}
RENAMED
@@ -11,12 +11,16 @@ const expectedStringArray = [
|
|
11 |
"Mr. Dursley was the director of a firm called Grunnings, which made drills. He was a big, beefy man with hardly any neck, although he did have a very large mustache.",
|
12 |
`"Shouldn'ta lost me temper," he said ruefully, "but it didn't work anyway. Meant ter turn him into a pig, but I suppose he was so much like a pig anyway there wasn't much left ter do."`
|
13 |
]
|
|
|
|
|
|
|
|
|
14 |
|
15 |
test('test My Ghost Writer, desktop: navigate between the list/tables containing the stemming; check for sentences sorrounding the clicked words/0', async ({ page }: { page: Page }, workerInfo: TestInfo) => {
|
16 |
const projectName = await initTest(page, workerInfo, testStoryJsonTxt)
|
17 |
await fillInputFieldWithString(page, '');
|
18 |
await page.waitForTimeout(200)
|
19 |
-
|
20 |
await expect(page.getByLabel('wordsearch_candidates_count')).toMatchAriaSnapshot(`- text: /2\\d\\d\\d\\d result\\(s\\) found/`);
|
21 |
const wordsearch_results = page.getByLabel("wordsearch_results")
|
22 |
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-0-${projectName}.txt` });
|
@@ -26,7 +30,7 @@ test('test My Ghost Writer, desktop: navigate between the list/tables containing
|
|
26 |
await page.waitForTimeout(200)
|
27 |
await expect(page.getByLabel('wordsearch_results')).toMatchAriaSnapshot(`- text: /40\\d results/`);
|
28 |
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-1-${projectName}.txt` });
|
29 |
-
|
30 |
console.log("end!")
|
31 |
await page.close()
|
32 |
})
|
@@ -35,21 +39,33 @@ test('test My Ghost Writer, desktop: navigate between the list/tables containing
|
|
35 |
const projectName = await initTest(page, workerInfo, testStoryJsonTxt)
|
36 |
await fillInputFieldWithString(page, '');
|
37 |
await page.waitForTimeout(200)
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
console.log("end!")
|
54 |
await page.close()
|
55 |
})
|
@@ -88,14 +104,11 @@ test('test My Ghost Writer, desktop: sort by frequency and alphabetically', asyn
|
|
88 |
await page.locator('#wordsearch_sort').selectOption('1');
|
89 |
await page.getByRole('button', { name: 'id-perform-wordsearch' }).click();
|
90 |
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-4-${projectName}.txt` });
|
91 |
-
|
92 |
-
await page.locator('#wordsearch_sort').selectOption('0');
|
93 |
-
await page.getByRole('button', { name: 'id-perform-wordsearch' }).click();
|
94 |
-
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-5-${projectName}.txt` });
|
95 |
|
|
|
96 |
await page.getByRole('button', { name: 'id-perform-wordsearch' }).click();
|
97 |
await expect(page.getByLabel('wordsearch_candidates_count')).toMatchAriaSnapshot(`- text: /2\\d\\d\\d\\d result\\(s\\) found/`);
|
98 |
-
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-
|
99 |
|
100 |
console.log("end!")
|
101 |
await page.close()
|
|
|
11 |
"Mr. Dursley was the director of a firm called Grunnings, which made drills. He was a big, beefy man with hardly any neck, although he did have a very large mustache.",
|
12 |
`"Shouldn'ta lost me temper," he said ruefully, "but it didn't work anyway. Meant ter turn him into a pig, but I suppose he was so much like a pig anyway there wasn't much left ter do."`
|
13 |
]
|
14 |
+
const editState = [
|
15 |
+
{ state: "read-only", expectedFirstAriaSnapshot: `- text: /40\\d results/` },
|
16 |
+
{ state: "editable", expectedFirstAriaSnapshot: `- text: /40\\d results/` }
|
17 |
+
]
|
18 |
|
19 |
test('test My Ghost Writer, desktop: navigate between the list/tables containing the stemming; check for sentences sorrounding the clicked words/0', async ({ page }: { page: Page }, workerInfo: TestInfo) => {
|
20 |
const projectName = await initTest(page, workerInfo, testStoryJsonTxt)
|
21 |
await fillInputFieldWithString(page, '');
|
22 |
await page.waitForTimeout(200)
|
23 |
+
|
24 |
await expect(page.getByLabel('wordsearch_candidates_count')).toMatchAriaSnapshot(`- text: /2\\d\\d\\d\\d result\\(s\\) found/`);
|
25 |
const wordsearch_results = page.getByLabel("wordsearch_results")
|
26 |
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-0-${projectName}.txt` });
|
|
|
30 |
await page.waitForTimeout(200)
|
31 |
await expect(page.getByLabel('wordsearch_results')).toMatchAriaSnapshot(`- text: /40\\d results/`);
|
32 |
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-1-${projectName}.txt` });
|
33 |
+
|
34 |
console.log("end!")
|
35 |
await page.close()
|
36 |
})
|
|
|
39 |
const projectName = await initTest(page, workerInfo, testStoryJsonTxt)
|
40 |
await fillInputFieldWithString(page, '');
|
41 |
await page.waitForTimeout(200)
|
42 |
+
for (let { state, expectedFirstAriaSnapshot } of Object.values(editState)) {
|
43 |
+
console.log(state, expectedFirstAriaSnapshot)
|
44 |
+
if (state === "editable") {
|
45 |
+
const toggleEditing = page.getByRole('checkbox', { name: 'Allow Editing' })
|
46 |
+
await toggleEditing.click()
|
47 |
+
await page.waitForTimeout(300)
|
48 |
+
await expect(toggleEditing).toBeChecked()
|
49 |
+
}
|
50 |
+
|
51 |
+
await expect(page.getByLabel('wordsearch_results')).not.toMatchAriaSnapshot(expectedFirstAriaSnapshot);
|
52 |
+
await page.getByLabel('id-div-candidate-1-nth').click();
|
53 |
+
await page.waitForTimeout(200)
|
54 |
+
await expect(page.getByLabel('wordsearch_results')).toMatchAriaSnapshot(expectedFirstAriaSnapshot);
|
55 |
+
///
|
56 |
+
await scrollToBottomById(page, "gametext")
|
57 |
+
await scrollToTopById(page, "wordsearch_results")
|
58 |
+
const id0 = 'id-div-1-range-0-nth'
|
59 |
+
let clickedElement = page.getByLabel(id0)
|
60 |
+
await expect(clickedElement).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-2-${projectName}-${state}.txt` });
|
61 |
+
await expect(clickedElement).not.toHaveClass("background-border-clicked")
|
62 |
+
await clickedElement.click();
|
63 |
+
await page.waitForTimeout(200)
|
64 |
+
await expect(clickedElement).toHaveClass("background-border-clicked")
|
65 |
+
console.log(`clicked on id ${id0}, check for the expected string...`)
|
66 |
+
await expectVisibleTextWithWalker(page, "gametext", expectedStringArray[0])
|
67 |
+
console.log(`${projectName}, state ${state} done.`)
|
68 |
+
}
|
69 |
console.log("end!")
|
70 |
await page.close()
|
71 |
})
|
|
|
104 |
await page.locator('#wordsearch_sort').selectOption('1');
|
105 |
await page.getByRole('button', { name: 'id-perform-wordsearch' }).click();
|
106 |
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-4-${projectName}.txt` });
|
|
|
|
|
|
|
|
|
107 |
|
108 |
+
await page.locator('#wordsearch_sort').selectOption('0');
|
109 |
await page.getByRole('button', { name: 'id-perform-wordsearch' }).click();
|
110 |
await expect(page.getByLabel('wordsearch_candidates_count')).toMatchAriaSnapshot(`- text: /2\\d\\d\\d\\d result\\(s\\) found/`);
|
111 |
+
await expect(wordsearch_results).toMatchAriaSnapshot({ name: `test-classic-desktop-0-wordsearch_results-5-${projectName}.txt` });
|
112 |
|
113 |
console.log("end!")
|
114 |
await page.close()
|
static/tests/{test-classic-desktop-1-lite.koboldai.net.spec.ts → test-classic-1-lite.koboldai.net.spec.ts}
RENAMED
File without changes
|
static/tests/test-helper.ts
CHANGED
@@ -346,9 +346,22 @@ export async function initTest(page: Page, workerInfo: TestInfo, filepath: strin
|
|
346 |
// 2. Activate the required UI mode (e.g., switch to classic or advanced UI)
|
347 |
await page.getByRole('button', { name: 'Set UI' }).click();
|
348 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
349 |
// 3. Upload a saved JSON story file to provide long text content for analysis
|
350 |
await uploadFileWithPageAndFilepath(page, filepath)
|
351 |
// activate wordsearch
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
await page.getByRole('link', { name: 'Settings' }).click();
|
353 |
await page.getByRole('checkbox', { name: 'wordsearch_toggle' }).check();
|
354 |
await page.getByRole('button', { name: 'OK' }).click();
|
|
|
346 |
// 2. Activate the required UI mode (e.g., switch to classic or advanced UI)
|
347 |
await page.getByRole('button', { name: 'Set UI' }).click();
|
348 |
|
349 |
+
const mobileButtonGlobalMenu = page.getByRole('button', { name: 'id-mobile-main-menu-options' })
|
350 |
+
if (await mobileButtonGlobalMenu.isVisible({timeout: 500})) {
|
351 |
+
await mobileButtonGlobalMenu.click();
|
352 |
+
await page.waitForTimeout(200)
|
353 |
+
console.log("#found mobile button for global menu, open it to prepare json story upload!")
|
354 |
+
}
|
355 |
+
|
356 |
// 3. Upload a saved JSON story file to provide long text content for analysis
|
357 |
await uploadFileWithPageAndFilepath(page, filepath)
|
358 |
// activate wordsearch
|
359 |
+
|
360 |
+
if (await mobileButtonGlobalMenu.isVisible({timeout: 500})) {
|
361 |
+
await mobileButtonGlobalMenu.click();
|
362 |
+
await page.waitForTimeout(200)
|
363 |
+
console.log("#found mobile button for global menu, open it to toggle word search!")
|
364 |
+
}
|
365 |
await page.getByRole('link', { name: 'Settings' }).click();
|
366 |
await page.getByRole('checkbox', { name: 'wordsearch_toggle' }).check();
|
367 |
await page.getByRole('button', { name: 'OK' }).click();
|