将虚拟机上的Selenium测试的显示分辨率设置为Jenkins Slave

时间:2017-03-14 11:56:37

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

我在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 Slave通过JNLP代理连接。从站使用Log On As" Local System"使用"允许服务与桌面交互"选项已启用。

到目前为止,我们已经尝试了很多类似的事情:

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

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

3 个答案:

答案 0 :(得分:5)

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

Jenkins slave agent

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

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

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

希望这有助于某人!

答案 1 :(得分:3)

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

答案 2 :(得分:0)

我经历过同样的问题。我的seleniumn测试在jenkins slave下运行,安装为windows服务,使用" Local System"帐户"允许服务与桌面互动"在Windows 7中启用了选项。由于显示分辨率不正确,某些测试用例总是失败。

我登录到Windows VM(EXSI Server + VMware Fusion)的控制台,将分辨率更改为1400x900,然后重新启动windwos VM。一切都运作良好。