我正在使用Python的PyAutoGUI库来自动化GUI。在我完成当前窗口上的数据输入后,我自动化的应用程序将打开一个新窗口。一切都由python自动化(当前窗口中的数据输入和打开窗口所需的点击)来处理。
在当前窗口中执行单击时,新窗口需要一些时间才能打开(可能介于2-5秒之间)。所以我可以在这里考虑两个选项:
time.sleep(5)
进行睡眠(Con:3秒可能会不必要地浪费)locateOnScreen
函数,可用于查明窗口是否实际出现在屏幕上。 (但是,这是CPU密集型的,并且该功能本身是CPU密集型的,并且需要大约2秒才能返回)所以它看起来[1]对我来说是一个更好的选择。还有其他一些我可能错过的技术会比这两种方法更好吗?感谢。
答案 0 :(得分:5)
对于Windows,仅GUI自动化pywinauto功能更强大(和pythonic)。它隐式等待一些默认时间并允许显式等待(内部有一些CPU非密集循环:0.1秒暂停并快速检查更改,然后再等待)。
PyAutoGUI locateOnScreen
函数使用屏幕截图的高级分析。这就是为什么它如此CPU密集(但跨平台)。
pywinauto示例:
from pywinauto import Application
app = Application(backend="win32").start(u'your_app.exe')
app.MainWindow.menu_select(u'File->Open')
app.OpenDialog.Edit.set_edit_text(u'some path')
app.OpenDialog.Open.click()
app.OpenDialog.wait_not('visible', timeout=10)
new_main_window = app.window(title_re='^.* - The Software$')
new_main_window.wait('ready', timeout=15)
Getting Started Guide是学习pywinauto核心概念的一个很好的起点。
答案 1 :(得分:0)
我会选择选项1,但如果这是打开窗口所需的最短平均时间,我会睡2秒钟。 2秒后,我会检查窗口是否已经出现,如果没有,那么我会再次睡2秒钟。这可能比睡5秒钟节省更多时间。
但是,由于尝试检查窗口是CPU密集型且耗时,我认为等待5秒会比所有人更好。