You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Ubuntu22.04远程Windows运行Python UI测试脚本失败的解决方法

远程Windows机器执行UI测试的Python解决方案

问题核心

通过OpenSSH、paramiko、winrm、pypsexec等工具远程执行Python UI测试脚本时,应用仅以后台进程启动,无法加载UI界面,导致测试失败;手动SSH执行也存在同样问题,需寻找其他Python实现的远程执行方案。

可行替代方案

1. 结合RDP与pywinauto控制远程桌面

通过Python启动RDP连接远程机器,再利用pywinauto操控远程桌面内的UI操作,确保脚本运行在交互式会话中:

from pywinauto.application import Application

# 启动RDP并登录远程机器(需提前确认远程开启RDP服务)
rdp_app = Application().start('mstsc.exe /v:<win10_machine_ip> /u:myuser /p:mypassword')

# 等待远程桌面窗口加载,切换到桌面上下文执行脚本
desktop_app = Application().connect(title_re=".*Desktop")
desktop_app.window().type_keys('python C:\\path\\to\\myscript.py{ENTER}')

注意:此方案要求本地机器具备图形界面环境,远程机器已开启RDP权限。

2. 通过WMI强制在交互式会话启动进程

利用Windows WMI服务,指定进程在活跃交互式会话中启动,强制加载UI:

import win32com.client

# 连接远程机器WMI服务
wmi = win32com.client.GetObject(f"winmgmts:\\\\<win10_machine_ip>\\root\\cimv2")

# 配置进程启动参数,强制显示窗口
startup_config = wmi.Get('Win32_ProcessStartup')
startup_config.Properties['ShowWindow'].Value = 1  # 显示窗口
startup_config.Properties['Desktop'].Value = 'WinSta0\\Default'

# 启动测试脚本
process, return_code = wmi.Get('Win32_Process').Create(
    'python C:\\path\\to\\myscript.py',
    None,
    startup_config
)

注意:需确保远程机器开启WMI服务,执行用户拥有管理员权限,且目标会话为活跃的交互式会话(通常会话ID为1)。

3. 远程部署常驻代理服务

在远程Windows机器上部署一个运行在交互式会话中的Python HTTP代理,本地CI框架通过HTTP请求触发测试脚本执行:

远程代理代码(示例用Flask实现)

from flask import Flask, request
import subprocess

app = Flask(__name__)

@app.route('/trigger-ui-test', methods=['POST'])
def trigger_test():
    script_path = request.json.get('script_path')
    # 在当前交互式会话启动脚本,强制显示控制台窗口
    subprocess.Popen(
        ['python', script_path],
        creationflags=subprocess.CREATE_NEW_CONSOLE
    )
    return {"status": "test started"}

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

本地CI框架调用代码

import requests

response = requests.post(
    'http://<win10_machine_ip>:5000/trigger-ui-test',
    json={"script_path": "C:\\path\\to\\myscript.py"}
)

注意:需将代理服务设置为Windows登录时自动启动(可通过任务计划程序配置),确保其始终运行在有UI的交互式会话中。

关键原理说明

SSH、winrm等工具默认在非交互式会话中启动进程,Windows系统会限制非交互式会话加载UI界面。上述方案的核心是确保测试脚本运行在活跃的交互式用户会话中,从而正常加载应用UI。

内容的提问来源于stack exchange,提问作者Vinitha V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:36:12