场景是,我想用python处理机器人框架中的IE弹出窗口。为了处理弹出窗口,我使用了AutoIT SendKeys,shell脚本,pywinauto TypeKeys。 在本地计算机上运行时代码正常工作,但是当我在代理计算机上通过team city运行脚本时,它会失败。 我的观察是,在代理机器中,代码无法处理弹出的窗口。
经过分析,我发现这是因为代理机器在通过团队城市运行脚本时作为锁定系统工作。
代码:
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 lib。但没有运气。
请帮我找到解决方案。
答案 0 :(得分:0)
您需要保持桌面打开和非锁定(可以通过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()
P.S。 TypeKeys()
也可以作为真实的用户输入。我们计划使用可能适合您的SendChars
窗口消息实现静默版本(WM_CHAR
)。但pywinauto 0.6.0版本目前正在进行深度重新分解。所以它可能会在四月甚至五月发布,但是有很好的WPF支持。