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
相关产品推荐
相关产品推荐

