如何在 GCP 中模拟 Windows VM 上的屏幕以进行 Electron 应用屏幕共享测试?

分享于2022年11月15日 electron google-cloud-platform jenkins webdriver-io webrtc 问答
【问题标题】:How to emulate screen on Windows VM in GCP for Electron app screenshare test?如何在 GCP 中模拟 Windows VM 上的屏幕以进行 Electron 应用屏幕共享测试?
【发布时间】:2022-08-18 22:21:38
【问题描述】:

设置:

  • 围绕最新 WebdriverIO v.7 的测试框架
  • GCP 上的 Jenkins:主 - Ubuntu,从 - Windows Server 2022 VM。
  • Jenkins master 和 slave 之间的连接是通过 GCP jenkins 插件完成的,因此正在创建 Windows slave 进行测试然后死掉。
  • 正在测试的应用程序:基于 Electron v14.2.1 的应用程序。

测试 - “用户可以启动屏幕共享”

  1. 用户开始通话。
  2. 用户选择可用屏幕并启动屏幕共享。

    问题: Electron 库无法检测到可用于捕获和共享的屏幕,因为在测试会话中没有打开 RDP 连接。

    在测试日志中没有找到来源(屏幕):

    2022-08-01 07:40:20:409 -00:00 | info | main-api-handler: - open-screen-picker-window - Properties: {
      \"cmd\": \"open-screen-picker-window\",
      \"id\": 1,
      \"sources\": []
    }
    

    问题:

    1. 如何模拟屏幕?
    2. 应该在哪里建立 RDP?应该是?
    3. 除了 RDP 之外,还有其他方法可以为 Electron 应用程序提供屏幕吗?
  • 对于 Windows,您必须拥有每个 RDP 连接(至少一个)的许可证。然后抓取屏幕截图以分发给多个客户端相当容易,但这需要编写您自己的代码。我不知道没有编写自己的视频驱动程序(非常复杂的任务)来模拟屏幕的方法。我会寻找为您执行此操作的第三方应用程序或库。今天,有许多会议类型的应用程序和库可用。
  • 谢谢@JohnHanley 的评论,但是您在说什么应用程序/库?
  • 谷歌搜索。我没有任何特别要推荐的。

【解决方案1】:

我的同事解决了这个问题:

“所以这个问题的根本原因是 Jenkins 用来配置节点的 SSH 服务器作为服务运行,这意味着它与桌面应用程序交互存在问题。不幸的是,Windows 自己的 SSH 服务器只作为服务运行。更多此处解释: Starting GUI programs via OpenSSH on Windows?

为了解决这个问题,我安装了一个单独的 SSH 服务器(来自 MSYS2 的 OpenSSH)。机器映像被配置为在启动时自动登录,并且 sshd 在以当前登录用户身份登录时启动。这使它可以访问桌面,并且屏幕共享测试现在似乎工作得更好了”

【讨论】: