当可以从三个不同的 window 中显示一个 window 时,如何将焦点设置为随机 window

How to set focus at one random window when there can show up one window from three different

我正在尝试使用 pywinauto 自动化某些应用程序,但有一些步骤我不知道如何解决。

当我在主要 window 时,我单击 "proces" 按钮,然后可以打开 3 个不同的 1 个 window,但一次只能打开 1 个。请帮我解决这个问题。

示例:main window --> buton click --> 1st window (process file) or 2nd window (Your password expired, set new password) or 3rd window(此用户已登录,请终止他的会话并继续或中断)--> 3 个进程中的第 1 个 windows 但我不知道哪个会显示 --> ...

您可以简单地检查第一个或第二个或第三个 window 是否存在:

win1st = app.Window_(title="process file")
win2nd = app.Window_(title="Your password expired, set new password")
win3rd = app.Window_(title="this user is already logged in")

if win1st.Exists(timeout=5): # in seconds
    # process win1st
elif win2nd.Exists(): # default timeout is 0.5 sec
    # process win2nd
elif win3rd.Exists():
    # process win3rd

对于现有的 window,您也可以检查 IsVisible()IsActive() 值。

方法Wait('ready')WaitNot('visible') 可用于确保window 在这里或不在。 timeout 如果不是默认使用的参数,则可以是参数。


更有效的方法(因为之前如果第二个或第三个 window 引发,我们必须等待 5 秒以上):

from pywinauto.timings import WaitUntil

WaitUntil(5, 0.1, lambda: len(app.Windows_(visible_only=True)) >= 2)
title = app.active_().WindowText()
if title == "1st case":
    # process file
elif title == "2nd case":
    # change a password
elif title == "3rd case":
    # kill session