【问题标题】:Setting display resolution for Selenium tests on virtual machine as Jenkins Slave将虚拟机上 Selenium 测试的显示分辨率设置为 Jenkins Slave
【发布时间】:2017-08-04 18:02:19
【问题描述】:

我在 Jenkins Slave 上运行一些 Selenium 测试时遇到问题。具体来说,用于运行测试的显示分辨率太小,导致部分测试失败。

为了检查显示分辨率,我们将显示高度和宽度记录到控制台,使用:

driver.manage().window().maximize();
System.out.println("Window height: " + driver.manage().window().getSize().getHeight());
System.out.println("Window width: " + driver.manage().window().getSize().getWidth());

这会返回:

Window height: 784
Window width: 1040

这对我来说似乎是一个非常奇怪的解决方案。所需的分辨率为 1920 x 1080。

用作从服务器的服务器是虚拟机 (Windows Server 2012 R2)。 Jenkins 从站通过 JNLP 代理连接。从站的服务以“本地系统”身份登录并启用“允许服务与桌面交互”选项运行。

到目前为止,我们已经尝试了很多方法,例如:

  • 使用 RDP 连接到从属虚拟机并断开连接以保持会话以所需的显示分辨率打开
  • 使用powershell设置显示分辨率
  • 在 VM 配置中设置默认显示分辨率
  • 使用 Selenium 设置窗口尺寸
  • 还有更多...

所有这些都没有解决问题。非常欢迎提出建议!

【问题讨论】:

  • 你大概可以设置显示大小:driver.manage().window().setSize(new Dimension(1920, 1080))
  • @Kishan Patel,在这种情况下没有任何影响。我认为不可能以这种方式设置大于服务器显示大小的大小。
  • 我现在正在使用 ubantu,所以无法实际测试它。但是,我尝试在开始测试之前按照 exe 设置分辨率。将脚本与测试脚本分开。它对我有用。你能试一试吗? tools.taubenkorb.at/change-screen-resolution
  • @GaurangShah 尝试了这个可执行文件和页面上提到的所有其他替代方案,但不幸的是它们都没有达到预期的结果。

标签: selenium jenkins vmware screen-resolution jenkins-slave


【解决方案1】:

对我有用的解决方案是以“无头”模式(无 GUI)运行 Chrome。当 GUI 不可用时,它与作为服务运行的 Jenkins 代理一起使用。 下面是web驱动初始化的代码示例:

var options = new ChromeOptions();
options.BinaryLocation = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
options.AddArgument("Headless");
options.AddArgument("window-size=1920,1080");

driver = new ChromeDriver(@"<path>\Selenium.WebDriver.ChromeDriver.2.37.0\driver\win32", options);

【讨论】:

    【解决方案2】:

    我也遇到过同样的问题。我的 seleniumn 测试在作为 Windows 服务安装的 jenkins slave 下运行,使用 Windows 7 中启用了“允许服务与桌面交互”选项的“本地系统”帐户。由于显示分辨率不正确,某些测试用例总是失败。

    我登录到windows VM(EXSI Server + VMware Fusion)的控制台,将分辨率改为1400x900,然后重启windwos VM。现在一切正常。

    【讨论】:

      【解决方案3】:

      在意识到 Jenkins 不一定需要将 slave 作为 Windows 服务运行后,终于设法解决了这些问题。要启动从属服务器,可以从 Jenkins 下载 JNLP 代理并将其复制到服务器。运行 JNLP 文件时,您可以选择将从代理安装为服务的选项。

      之前我们选择了这个选项,这就是从站作为服务运行的原因。停止并删除服务后,我们再次运行 JNLP 文件并确保不选择该选项。

      建议的解决方案包括断开远程桌面会话并以较大的分辨率保持会话打开,但在将从属服务器作为服务运行时不起作用。但是,当以默认方式运行从属设备时,它们确实可以工作。

      确保远程桌面会话在一段时间后没有结束:

      希望这对某人有所帮助!

      【讨论】:

        【解决方案4】:

        根据我的经验,您无法以编程方式解决此问题。您的测试将以您上次物理访问此 VM 显示器时使用的分辨率运行。例如,如果我在我的大屏幕显示器上打开 VM 并将其最大化,则测试将以该分辨率运行。但如果我在笔记本电脑屏幕上打开它并关闭 RDP 连接,测试将在较小的屏幕尺寸上运行。 我知道这听起来很奇怪,但我真的找不到更好的解决方案。 :D 所以现在我必须小心在我关闭 VM 之前在我的大屏幕上最大化 VM 显示。您可能不喜欢这个答案,但当您发现自己没有其他解决方案时请记住它。 ;)

        【讨论】:

        • 我对此进行了试验,但没有帮助。使用 RDP 登录到 VM 并断开会话。 jenkins 从服务以本地系统用户身份运行,因此使用我自己的用户连接到 VM 不会有任何影响。即使强制服务使用我自己的用户帐户运行,它也没有使用 RDP 会话中的分辨率。
        • 好的,我的奴隶在本地用户帐户上运行,而不是在本地系统上,抱歉没有帮助。
        猜你喜欢
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        相关资源
        最近更新 更多