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

Python Playwright无法在Prompt对话框填充输入内容问题求助

问题诊断与解决方案

你的问题核心是原生Prompt对话框无法填入内容,根源在于使用page.once("dialog")的事件监听方式不够可靠,推荐改用Playwright官方推荐的expect_dialog()上下文管理器来处理对话框,确保监听与触发的同步性。

修改后的代码实现

重构Prompt处理方法

def prompt_accept(self, prompt_text) -> None:
    # 用上下文管理器等待对话框,确保监听提前注册
    with self.page.expect_dialog() as dialog_info:
        self.popup_locator.prompt_trigger_btn.click()
    dialog = dialog_info.value
    # 传入内容并确认对话框
    dialog.accept(prompt_text)

    # 验证结果(自动等待元素状态,无需手动sleep)
    expect(self.popup_locator.prompt_result_p).to_be_visible()
    if prompt_text == "":
        expect(self.popup_locator.prompt_result_p).to_have_text("Fine, be that way...")
    else:
        expect(self.popup_locator.prompt_result_p).to_have_text(f"Nice to meet you, {prompt_text}!")

def prompt_dismiss(self) -> None:
    # 单独拆分取消对话框的逻辑
    with self.page.expect_dialog() as dialog_info:
        self.popup_locator.prompt_trigger_btn.click()
    dialog = dialog_info.value
    dialog.dismiss()
    expect(self.popup_locator.prompt_result_p).to_have_text("Fine, be that way...")

测试文件调整

def test_close(set_up):
    popup_obj = Popup_page(set_up)
    popup_obj.goto()
    # 按测试逻辑分步调用
    popup_obj.prompt_accept("Dupa")
    popup_obj.prompt_dismiss()
    popup_obj.prompt_accept("")

关键修改点说明

  • 替换事件监听方式:expect_dialog()会自动在触发对话框前完成监听注册,完全避免了page.once()可能出现的监听时机滞后问题。
  • 移除冗余sleep:Playwright的expect方法自带智能等待机制,会自动等待元素可见且文本匹配,无需手动添加time.sleep()。
  • 拆分逻辑:将确认、取消对话框的操作拆分为独立方法,让测试逻辑更清晰,避免单次调用重复执行不必要的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:31:30