3

我试图让 pyautogui 的 locateOnScreen 在虚拟机上工作,这样我就可以一次运行多个测试。我希望虚拟框中有一些我缺少的设置可以解决这个问题。这是代码:

import pyautogui
import win32com.client
autoit = win32com.client.Dispatch("AutoItX3.Control")

autoit.run(application_path)

open_application = autoit.winWait("title_of_app", "", 10)
header_logo = pyautogui.locateOnScreen("header_logo.png", 10)

if open_application == 1 and header_logo is not None:
    print "Detected application window."
else:
    if open_application == 0:
        print "Failed to detect application window."
        assert open_application 
    else:
        print "Failed to detect logo in header of application window."
        assert header_logo

在虚拟机之外,这通过了,在里面我总是遇到“无法在应用程序窗口的标题中检测到徽标”。我已经尝试了很多调整图像,但什么都不会。主桌面是 Windows 7 64 位,VM 是 Window 7 32 位。有没有办法让它在 VirtualBox 或任何 VM 软件上运行?

编辑:我应该补充一点,AutoIt 的 winWait 返回 1 或 0,PyAutoGUI 的 locateOnScreen 返回 None 或图像在屏幕上的坐标以及所用图像的大小。

4

1 回答 1

1

这是旧的,但它显示为未答复。所以我想我会把我的评论移到我想出来的地方,得到一个答案。

“我能够解决这个问题。我正在测试的应用程序使用快速时间来渲染(或类似的东西),无论出于何种原因,这都会阻止它被 pyautogui 的屏幕截图拾取。使用 pyqt4,我能够采取包含应用程序窗口的截图,将Qimage转换为PIL,并使用pyautogui的needle in haystack函数(定位函数)在截图中找到标志。我不知道是否有更好的方法来处理这个,但现在它正在工作。”

于 2020-07-10T17:29:08.320 回答