【问题标题】:SendKeys method of AutoIT, shell script or pywinauto lib is not workingAutoIT、shell 脚本或 pywinauto lib 的 SendKeys 方法不起作用
【发布时间】:2016-06-25 10:19:27
【问题描述】:

场景是,我想用python处理机器人框架中弹出的IE。为了处理弹出窗口,我使用了 AutoIT SendKeys、shell 脚本、pywinauto TypeKeys。 该代码在本地计算机上运行时可以正常工作,但是当我通过代理计算机上的团队城市运行脚本时,它会失败。 我的观察是,在代理机器中,代码无法处理弹出的窗口。

经过分析,我发现这是因为代理机器在通过团队城市运行脚本时处于锁定系统状态。

代码:

def fhandle_savepopup(self):

    shell = win32com.client.Dispatch("WScript.Shell")
    seleniumLib = BuiltIn().get_library_instance('Selenium2Library')
    shell.AppActivate ("Internet Explorer")
    sleep(2)
    autolib = BuiltIn().get_library_instance('AutoItLibrary')
    shell.SendKeys('{F6}')
    sleep(3)
    shell.SendKeys('{TAB}')
    sleep(3)
    shell.SendKeys('{ENTER}')

我也使用了 AutoIT 和 pywinauto 库。但没有运气。

请帮我找到解决办法。

【问题讨论】:

    标签: python selenium robotframework pywinauto


    【解决方案1】:

    您需要保持桌面打开且未锁定(可以通过setting auto-logon up + VNC 会话(如 TightVNC)来解决)。对于 TightVNC,您可能还需要更新显卡驱动程序并设置自定义分辨率(例如,在 NVIDIA 控制面板中)。当然,这个节点必须从这个打开的桌面(不是作为服务)连接到 Team City 主节点。

    另一种选择是静默单击窗口按钮(无需模拟真实用户输入)。在 pywinauto 中可以使用Click() 来完成(ClickInput() 更现实,不适用于锁定的系统):

    app.Window_(title="Popup title").Wait('visible', timeout=10)
    app.Window_(title="Popup title").OK.Click()
    

    附: TypeKeys() 也可以作为真正的用户输入。我们计划使用可能对您有用的WM_CHAR 窗口消息来实施静默版本 (SendChars)。但是 pywinauto 0.6.0 版本目前正在进行深度重构。所以它可能会在 4 月甚至 5 月发布,但会得到很好的 WPF 支持。

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多