Playwright Python中输入框失焦后内容被清除问题求助
问题:Playwright模拟输入6位数字后按Tab,输入框内容被清除,后台出现ORA-01422错误
问题描述
弹窗内有一个要求输入6位字符串格式文本的输入框,后台会校验输入是否为6位数字。手动输入文本并按Tab键时内容会保留,但使用Playwright模拟操作后,输入文本并按Tab键后输入框内容立即被清除。
代码片段
pin = str("123456") page.type('input[type="text"]', pin) page.wait_for_load_state("load") page.keyboard.press("Tab") page.wait_for_load_state("load")
补充信息
按Tab键后弹窗会瞬间出现ORA-01422 : exact fetch returns more than requested number of rows错误,肉眼无法察觉,通过屏幕录制逐帧查看发现该问题。
已尝试操作
- 确保pin变量为字符串类型
- 输入文本和按Tab后使用
page.wait_for_load_state("load")等待页面加载 - 检查Tab触发的JS事件和6位数字校验逻辑
- 尝试Chrome、Chromium和Nightly浏览器
预期&实际结果
- 预期:输入框内容在按Tab后保留,与手动操作一致
- 实际:Playwright操作时,输入文本并按Tab后输入框内容被清除
排查&解决建议
调整等待时机,确保输入完成后再触发Tab
page.wait_for_load_state("load")不适用于动态弹窗场景,可替换为等待输入框的值确实更新,避免过早触发Tab:page.type('input[type="text"]', pin) # 等待输入框值正确设置 page.wait_for_function('document.querySelector("input[type=\'text\']").value === "123456"') page.keyboard.press("Tab")模拟真实用户输入节奏
Playwright默认快速输入可能导致前端/后台处理不及时,添加delay参数模拟手动输入间隔:page.type('input[type="text"]', pin, delay=100) # 每个字符间隔100ms拦截分析Tab触发的请求
对比手动与自动化操作时的请求参数差异,确认是否因参数异常导致后台查询返回多行:# 打印所有请求信息,便于对比 page.on("request", lambda request: print(f"请求URL: {request.url},参数: {request.post_data}"))手动触发输入框的change事件
部分前端依赖change事件触发校验,可在输入完成后手动触发:input_elem = page.locator('input[type="text"]') input_elem.type(pin, delay=100) input_elem.dispatch_event("change") page.keyboard.press("Tab")定位错误触发的前端逻辑
后台返回ORA-01422错误后,前端大概率有对应的错误处理逻辑清空了输入框。可检查前端代码中该错误的处理分支,确认是否在自动化场景下触发了异常逻辑;同时联系后端确认查询触发条件,排查手动与自动化操作时的上下文(如session、cookie)差异。
内容的提问来源于stack exchange,提问作者Matin
相关产品推荐
相关产品推荐

