使用PyWinAuto+Robot Framework调整窗口大小报错求助
问题分析
你遇到的ArgumentError: expected WinFunctionType instance instead of WinFunctionType错误,本质是pygetwindow依赖的pywin32库在M2 Mac的Windows虚拟机环境中存在兼容性问题——虚拟机的ARM转x86架构导致pywin32底层函数调用出现类型不匹配。同时你代码中使用的pygetwindow对复杂窗口场景支持有限,更容易触发这类底层错误。
解决方案
1. 替换窗口操作库为pywinauto
放弃pygetwindow,改用专门针对Windows窗口自动化的pywinauto,它的兼容性和稳定性更好。修改你的Python代码如下:
from pywinauto import Desktop def change_resolution(window_title, width, height): width = int(width) height = int(height) try: # 通过UIA后端连接目标窗口(兼容性更强) target_window = Desktop(backend="uia").window(title=window_title) # 调整窗口大小并居中 screen_rect = target_window.rectangle() target_x = (screen_rect.width() - width) // 2 target_y = (screen_rect.height() - height) // 2 target_window.move_window(target_x, target_y, width, height) print(f"窗口 {window_title} 已调整为 {width}x{height} 并居中") except Exception as e: print(f"操作失败:{str(e)}") def set_resolution(window_title, width, height): change_resolution(window_title, width, height)
2. 确保依赖库版本适配
卸载原有冲突的库,重新安装适配虚拟机环境的版本:
pip uninstall pygetwindow pywin32 -y pip install pywinauto==0.6.8 pywin32==306
3. 检查虚拟机权限设置
- 打开Mac上的虚拟机软件(如Parallels/VMware),确保已开启「允许虚拟机控制输入设备」「共享系统权限」选项;
- 在Windows虚拟机中,右键点击运行Robot Framework的Python程序,选择「以管理员身份运行」,避免权限不足导致窗口操作失败。
4. 验证窗口标题准确性
窗口标题可能存在隐藏字符或截断,先运行以下代码列出所有当前窗口的准确标题,再传入关键字:
from pywinauto import Desktop for win in Desktop(backend="uia").windows(): print(f"窗口标题:{win.window_text()}")
内容的提问来源于stack exchange,提问作者EnkiduSlayer
相关产品推荐
相关产品推荐

