Confluence页面输入/唤起应用弹窗后继续输入的Playwright脚本问题
Confluence内容区唤起应用选择弹窗并输入的解决方案
问题核心
输入/唤起弹窗后,再次调用type方法输入应用名称时,原有的/被替换,导致弹窗失去触发条件而关闭。这通常是因为二次定位元素时DOM已发生变化,或type操作覆盖了原有内容。
可行解决方案
方案1:复用主内容区元素引用
输入/后,保持对同一主内容区元素的引用,继续追加输入应用名称,避免重新定位导致的内容覆盖:
// 提前定位主内容区元素并保存引用 const mainContentParagraph = page.locator('[aria-label="Main content area"] p'); // 输入/唤起弹窗 await mainContentParagraph.type('/'); // 等待弹窗加载完成 await page.waitForSelector('[role="listbox"]'); // 复用同一元素引用,追加输入应用名称 await mainContentParagraph.type(nameOfApplication); // 执行目标应用点击逻辑(已实现部分)
方案2:定位弹窗内的搜索输入框
部分Confluence版本中,唤起弹窗后焦点会自动转移到弹窗的搜索框,直接定位该输入框输入应用名称即可:
await page.locator('[aria-label="Main content area"] p').type('/'); await page.waitForSelector('[role="listbox"]'); // 定位弹窗内的搜索输入框(可根据实际DOM调整选择器) await page.locator('[role="listbox"] [aria-label="Search"]').type(nameOfApplication); // 执行目标应用点击逻辑(已实现部分)
方案3:使用键盘连续输入
通过键盘事件直接连续输入/和应用名称,确保输入动作的连贯性,避免DOM变化影响:
// 先确保焦点在主内容区 await page.locator('[aria-label="Main content area"] p').click(); // 连续输入/ + 应用名称 await page.keyboard.type(`/${nameOfApplication}`); // 等待弹窗加载 await page.waitForSelector('[role="listbox"]'); // 执行目标应用点击逻辑(已实现部分)
内容的提问来源于stack exchange,提问作者Den Silver
相关产品推荐
相关产品推荐

