diff --git a/.claude/skills/web-test/scripts/browser.mjs b/.claude/skills/web-test/scripts/browser.mjs index 60a96182..a538b980 100644 --- a/.claude/skills/web-test/scripts/browser.mjs +++ b/.claude/skills/web-test/scripts/browser.mjs @@ -1805,8 +1805,19 @@ export async function fillFields(fields) { // Combobox/reference with DLB: DLB-first, then paste fallback const refResult = await fillReferenceField(selector, r.field, fields[r.field], formNum); results.push(refResult); + } else if (r.hasPick && r.isDate) { + // Date/time field with calendar CB — use paste (calendar is not a selection form) + await page.click(selector); + await page.waitForTimeout(200); + await page.keyboard.press('Control+A'); + await page.evaluate(`navigator.clipboard.writeText(${JSON.stringify(String(fields[r.field]))})`); + await page.keyboard.press('Control+V'); + await page.waitForTimeout(300); + await page.keyboard.press('Tab'); + await waitForStable(); + results.push({ field: r.field, ok: true, value: String(fields[r.field]), method: 'paste' }); } else if (r.hasPick) { - // Reference field without DLB (non-editable): delegate to selectValue (F4 → selection form) + // Reference field with CB (non-editable or editable ref): delegate to selectValue (F4 → selection form) const svResult = await selectValue(r.field, String(fields[r.field])); if (svResult?.error) { results.push({ field: r.field, error: svResult.error, message: svResult.message }); diff --git a/.claude/skills/web-test/scripts/dom.mjs b/.claude/skills/web-test/scripts/dom.mjs index d553fe8c..9d5ab904 100644 --- a/.claude/skills/web-test/scripts/dom.mjs +++ b/.claude/skills/web-test/scripts/dom.mjs @@ -1189,7 +1189,11 @@ export function resolveFieldsScript(formNum, fields) { const label = (titleEl?.innerText?.trim() || '').replace(/\\n/g, ' ').replace(/:$/, ''); const last = { inputId: el.id, name, label }; if (document.getElementById(p + name + '_DLB')?.offsetWidth > 0) last.hasSelect = true; - if (document.getElementById(p + name + '_CB')?.offsetWidth > 0) last.hasPick = true; + const cbEl = document.getElementById(p + name + '_CB'); + if (cbEl?.offsetWidth > 0) { + last.hasPick = true; + if (cbEl.classList.contains('iCalendB')) last.isDate = true; + } allFields.push(last); }); // Checkboxes @@ -1268,6 +1272,7 @@ export function resolveFieldsScript(formNum, fields) { if (found.isRadio) { entry.isRadio = true; entry.options = found.options; } if (found.hasSelect) entry.hasSelect = true; if (found.hasPick) entry.hasPick = true; + if (found.isDate) entry.isDate = true; if (found._dcsCheckbox) { entry.dcsCheckbox = { inputId: found._dcsCheckbox.inputId, checked: found._dcsCheckbox.checked }; delete found._dcsCheckbox;