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

Python编写SAP GUI脚本时关闭弹窗的问题求助

解决SAP GUI脚本弹窗关闭失效问题

先梳理你代码里的几个关键问题,修正后就能正常关闭弹窗:

问题1:变量名不统一

你最后判断弹窗的代码用了session.ActiveWindow.Name,但前面所有操作都是self.session,变量名不一致会导致判断失效甚至报错,要统一用self.session。

问题2:setFocus方法未执行

所有setFocus都是方法调用,必须加(),比如self.session.findById("wnd[0]/usr/ctxtEINE-WERKS").setFocus(),不加括号的话这个方法根本没运行,焦点没正确设置,可能导致后续操作触发的弹窗不符合预期。

问题3:弹窗存在性判断不可靠

直接判断ActiveWindow的名称不一定准确,SAP GUI里可以用exists属性检查弹窗是否存在,这种方式更稳妥。另外,弹窗出现可能有延迟,加短暂等待能避免漏判。

修改后的代码

import time

for index, row in data.iterrows():

    self.session.findById("wnd[0]/usr/ctxtEINA-LIFNR").text = row.SAP_Local_Vendor_ID
    self.session.findById("wnd[0]/usr/ctxtEINA-MATNR").text = row.Part_No
    self.session.findById("wnd[0]/usr/ctxtEINE-EKORG").text = "1000"
    self.session.findById("wnd[0]/usr/ctxtEINE-WERKS").text = "0695"
    # 补全setFocus的括号,执行焦点设置
    self.session.findById("wnd[0]/usr/ctxtEINE-WERKS").setFocus()
    self.session.findById("wnd[0]/usr/ctxtEINE-WERKS").caretPosition = 4
    self.session.findById("wnd[0]/tbar[0]/btn[0]").press()
    self.session.findById("wnd[0]/tbar[1]/btn[8]").press()
    self.session.findById("wnd[1]/tbar[0]/btn[7]").press()
    self.session.findById("wnd[0]/usr/ctxtRV13A-DATAB").text = "12/01/2022"
    self.session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KBETR[2,0]").text = row.Unit_by_PER
    self.session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KPEIN[4,0]").text = "1000"
    # 补全setFocus的括号,执行焦点设置
    self.session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KPEIN[4,0]").setFocus()
    self.session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KPEIN[4,0]").caretPosition = 5
    self.session.findById("wnd[0]/tbar[0]/btn[11]").press()
    
    # 等待1秒确保弹窗加载完成,可根据实际情况调整时长
    time.sleep(1)
    # 检查弹窗wnd[1]是否存在,第二个参数False表示不存在时不报错
    if self.session.findById("wnd[1]", False).exists:
        self.session.findById("wnd[1]/tbar[0]/btn[5]").press()

额外说明

  • findById第二个参数传False,是为了避免元素不存在时抛出异常,而是返回一个exists为False的对象,让判断更安全。
  • time.sleep(1)的时长可以根据实际弹窗出现的速度调整,确保弹窗完全加载后再执行关闭操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:20:45