8

我在 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 连接到从属 VM 并断开连接以保持会话以所需的显示分辨率打开
  • 使用powershell设置显示分辨率
  • 在 VM 配置中设置默认显示分辨率
  • 使用 Selenium 设置窗口尺寸
  • 和更多...

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

4

4 回答 4

7

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

詹金斯奴隶代理

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

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

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

希望这对某人有帮助!

于 2017-03-15T10:14:51.263 回答
4

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

于 2017-03-14T12:43:19.353 回答
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);
于 2021-09-08T08:31:14.653 回答
0

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

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

于 2017-11-23T06:24:19.830 回答