首先,谢谢你抽出时间回顾我的问题。这是我第一次尝试问一个问题,所以如果我遗漏了必要的细节或含糊不清,请原谅我。
我的测试脚本: python2.7 pywinauto: 0.6.8
在使用pywinauto从我的测试脚本中打开两个第三方应用程序时,我已经能够成功地执行第一个应用程序,但是当我试图打开第二个应用程序时,start()和connect()似乎有效,但是第二个应用程序没有打开它的窗口。
第一个应用程序:
self.app = Application(backend="uia", allow_magic_lookup=True)
if not self.app.is_process_running():
self.app.start(self.te_exe_path)
self.app.connect(path=self.te_exe_path)
self.window = self.app.top_window()
这个很好用。然后我可以使用:
windowlist = self.app.windows() to find the window names
control_IDs = self.window.print_control_identifiers()
浏览应用程序的控件ID。
当我试图对第二个应用程序使用相同的调用时,start()和connect()调用看起来很好,但是第二个应用程序的窗口没有显示。
self.sec_app = Application(backend="uia", allow_magic_lookup=True)
if not self.sec_app.is_process_running():
self.sec_app.start(self.sec_exe_path, timeout=15)
self.sec_app.connect(path=self.sec_exe_path)
self.sec_window = self.sec_app.top_window()
top_window()调用返回一条错误消息,类似于:“没有找到该应用程序的Windows”,我想这并不奇怪,因为应用程序没有显示它的窗口。
在connect()之后添加了几个调用:
self.sec_app.window()
returns: <pywinauto.application.WindowSpecification object at 0x12C4CC70>
如果我打电话:
self.sec_app.active()
returns: RuntimeError: No Windows of that application are active
这也不奇怪,因为第二个应用程序没有打开它的第一个窗口。
我可以手动启动这两个应用程序,没有问题。对于我可能做错了什么,或者第二个应用程序可能有什么问题,有什么想法吗?
发布于 2022-01-25 17:29:05
因为connect(path="...")
无法区分具有相同可执行名称的不同进程。您需要通过标题或title_re进行连接:
self.sec_app.connect(title="Second Window Title", timeout=10)
如果两个标题都是相同的,那么让我们尝试添加found_index=0
,但我不确定它是否有效(需要反复检查)。
另一种方法是使用类Desktop
而不是Application
。
from pywinauto import Desktop
Desktop(backend="uia").window(title="Second Window Title", found_index=0).wait('visible', timeout=10)
当然,found_index
可以是1,2,3等。
https://stackoverflow.com/questions/70776249
复制相似问题