Skip to content

Commit 9975c3a

Browse files
renemadsenclaude
andcommitted
fix: replace missing #editFolderSelectorInput with #folderName textContent
The Angular template uses <span id="folderName"> not an input element. inputValue() hung forever causing Job B timeouts. Also fix tags test to use pressSequentially for Angular ngModel compatibility. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 74ba183 commit 9975c3a

4 files changed

Lines changed: 22 additions & 22 deletions

File tree

eform-client/playwright/e2e/plugins/items-planning-pn/ItemsPlanningPlanningPage.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,8 @@ export class ItemsPlanningPlanningPage extends PageWithNavbarPage {
195195
if (!pickOne) {
196196
const isChecked = await this.selectAllPlanningsCheckbox.locator('input').isChecked().catch(() => false);
197197
if (isChecked !== valueCheckbox) {
198-
// Use evaluate to click the mat-checkbox's internal div that handles the toggle
199-
await this.selectAllPlanningsCheckbox.evaluate((el: HTMLElement) => {
200-
const inner = el.querySelector('.mdc-checkbox') as HTMLElement;
201-
if (inner) inner.click();
202-
else el.click();
203-
});
198+
// Click on the mat-checkbox element itself to toggle
199+
await this.selectAllPlanningsCheckbox.click({ force: true, position: { x: 10, y: 10 } });
204200
await this.page.waitForTimeout(500);
205201
}
206202
} else {
@@ -326,7 +322,7 @@ export class PlanningRowObject {
326322
}
327323
if (
328324
planning.folderName &&
329-
(await modalPage.editFolderName.locator('#editFolderSelectorInput').inputValue()) !== planning.folderName
325+
((await this.page.locator('#folderName').textContent()) || '').trim() !== planning.folderName
330326
) {
331327
await modalPage.selectFolder(planning.folderName);
332328
}
@@ -441,11 +437,7 @@ export class PlanningRowObject {
441437
async clickOnCheckboxForMultipleDelete(valueCheckbox = true) {
442438
const isChecked = await this.checkboxDelete.locator('input').isChecked().catch(() => false);
443439
if (isChecked !== valueCheckbox) {
444-
await this.checkboxDelete.evaluate((el: HTMLElement) => {
445-
const inner = el.querySelector('.mdc-checkbox') as HTMLElement;
446-
if (inner) inner.click();
447-
else el.click();
448-
});
440+
await this.checkboxDelete.click({ force: true, position: { x: 10, y: 10 } });
449441
}
450442
}
451443

eform-client/playwright/e2e/plugins/items-planning-pn/b/items-planning.add.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ test.describe.serial('Items planning - Add', () => {
120120
await itemsPlanningModalPage.editItemBuildYear.inputValue()
121121
).toBe(planningData.buildYear);
122122
expect(
123-
await itemsPlanningModalPage.editFolderName.locator('#editFolderSelectorInput').inputValue()
123+
(await page.locator('#folderName').textContent() || '').trim()
124124
).toBe(planningData.folderName);
125125
expect(
126126
await itemsPlanningModalPage.editItemLocationCode.inputValue()

eform-client/playwright/e2e/plugins/items-planning-pn/b/items-planning.edit.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ test.describe.serial('Items planning actions - Edit', () => {
163163
await itemsPlanningModalPage.editItemBuildYear.inputValue()
164164
).toBe(planningData.buildYear);
165165
expect(
166-
await itemsPlanningModalPage.editFolderName.locator('#editFolderSelectorInput').inputValue()
166+
(await page.locator('#folderName').textContent() || '').trim()
167167
).toBe(planningData.folderName);
168168
expect(
169169
await itemsPlanningModalPage.editItemLocationCode.inputValue()

eform-client/playwright/e2e/plugins/items-planning-pn/c/items-planning.tags.spec.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,22 @@ test.describe.serial('Items planning - Tags', () => {
2828
test('should create tag', async () => {
2929
const tagsModalPage = new TagsModalPage(page);
3030
const tagsRowsBeforeCreate = await tagsModalPage.rowNum();
31-
await tagsModalPage.createTag(tagName);
32-
// Wait for tag list to refresh — retry rowNum until it increases
33-
let tagsRowsAfterCreate = tagsRowsBeforeCreate;
34-
for (let attempt = 0; attempt < 10; attempt++) {
35-
await page.waitForTimeout(1000);
36-
tagsRowsAfterCreate = await tagsModalPage.rowNum();
37-
if (tagsRowsAfterCreate > tagsRowsBeforeCreate) break;
38-
}
31+
// Manually create tag — click new tag button, type name, click save
32+
await tagsModalPage.newTagBtn().click();
33+
await page.waitForTimeout(500);
34+
await page.locator('#newTagName').waitFor({ state: 'visible', timeout: 90000 });
35+
// Use click + type instead of fill to ensure Angular ngModel picks up the value
36+
await tagsModalPage.newTagNameInput().click();
37+
await tagsModalPage.newTagNameInput().pressSequentially(tagName, { delay: 50 });
38+
await page.waitForTimeout(500);
39+
// Verify button is enabled before clicking
40+
await page.locator('#newTagSaveBtn:not([disabled])').waitFor({ state: 'visible', timeout: 10000 });
41+
await tagsModalPage.newTagSaveBtn().click();
42+
await page.waitForTimeout(500);
43+
await page.locator('#newTagBtn').waitFor({ state: 'visible', timeout: 40000 });
44+
// Wait for tag list to refresh
45+
await page.waitForTimeout(3000);
46+
const tagsRowsAfterCreate = await tagsModalPage.rowNum();
3947
const tagRowObject = new TagRowObject(page, tagsModalPage);
4048
const tagRowObj = await tagRowObject.getRow(tagsRowsAfterCreate);
4149
expect(tagsRowsAfterCreate).toBe(tagsRowsBeforeCreate + 1);

0 commit comments

Comments
 (0)