You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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后输入框内容被清除

排查&解决建议

  1. 调整等待时机,确保输入完成后再触发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")
    
  2. 模拟真实用户输入节奏
    Playwright默认快速输入可能导致前端/后台处理不及时,添加delay参数模拟手动输入间隔:

    page.type('input[type="text"]', pin, delay=100) # 每个字符间隔100ms
    
  3. 拦截分析Tab触发的请求
    对比手动与自动化操作时的请求参数差异,确认是否因参数异常导致后台查询返回多行:

    # 打印所有请求信息,便于对比
    page.on("request", lambda request: print(f"请求URL: {request.url},参数: {request.post_data}"))
    
  4. 手动触发输入框的change事件
    部分前端依赖change事件触发校验,可在输入完成后手动触发:

    input_elem = page.locator('input[type="text"]')
    input_elem.type(pin, delay=100)
    input_elem.dispatch_event("change")
    page.keyboard.press("Tab")
    
  5. 定位错误触发的前端逻辑
    后台返回ORA-01422错误后,前端大概率有对应的错误处理逻辑清空了输入框。可检查前端代码中该错误的处理分支,确认是否在自动化场景下触发了异常逻辑;同时联系后端确认查询触发条件,排查手动与自动化操作时的上下文(如session、cookie)差异。

内容的提问来源于stack exchange,提问作者Matin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:35:22