首页 > 解决方案 > 如何使用 pywinauto 移动 Firefox 窗口

问题描述

这是我的代码:

评论部分是我之前尝试过的,但没有奏效。

    try:
        # app = Application(backend="uia").start("C:\\Program Files\\Mozilla Firefox\\firefox.exe")
        # time.sleep(5)
        # mozilla = app.window_(title_re = ".*Mozilla Firefox")
        # time.sleep(5)
        # mozilla.move_window(200, 200, 200, 200, True)
        app = Application().start("C:\\Program Files\\Mozilla Firefox\\firefox.exe")
        dlg_spec = app.window()
        dlg_spec.move_window(x=None, y=None, width=200, height=100, repaint=True)
    except AppStartError:
        print("CANNOT START !!")
        return False
    except ElementNotFoundError : 
        print("COULD NOT FOUND THE WINDOW !!")
        return False
    except ElementAmbiguousError :
        print("TOO MANY FIREFOX !!")
        return False

我无法找到窗口!在评论中,我收到了这个错误:

    mozilla.move_window(200, 200, 200, 200, True)
  File "C:\Users\XX\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pywinauto\application.py", line 180, in __call__
    raise AttributeError("Neither GUI element (wrapper) " \
AttributeError: Neither GUI element (wrapper) nor wrapper method 'move_window' were found (typo?)

我会很感激任何帮助,谢谢。

标签: pythonautomated-testspywinauto

解决方案


您必须在调用中使用正确的titlebest_match值。.window(...)这样 pywinauto 就知道要搜索哪个窗口。例如,app.window(title_re=".*Firefox")

要列出所有标题,请使用以下语句:

print([w.window_text() for w in app.windows()])

也是.draw_outline()突出发现元素的有用方法。

推荐阅读:入门指南


编辑:

如果返回一个空列表,您必须使用方法而不是 / 除了.windows()按标题重新连接. 我们有一个功能请求来检测生成的进程,但目前它的优先级很低。connectstart

编辑2:

它如何为我工作:

from pywinauto import Application

app = Application(backend="win32").start("C:\\Program Files\\Mozilla Firefox\\firefox.exe")
app = Application(backend="win32").connect(title='Mozilla Firefox', found_index=0, timeout=5)
dlg_spec = app.window(title='Mozilla Firefox', found_index=0)
dlg_spec.move_window(x=None, y=None, width=200, height=100, repaint=True)

推荐阅读