(我在是否应该把这篇文章发布在这里、ServerFault 和 StackOverFlow 上之间犹豫了很久。最后决定发布在这里。希望发布在正确的地方。)
我们使用 Selenium Grid 2 在 Amazon EC2 Windows 机器(使用 Amazon 的 CloudFormation API 启动)上运行我们的 UI 测试套件。我的问题是,如何更改该机器的分辨率?
如果我远程访问它,我可以使用远程桌面指定分辨率。但显然这不会永久改变分辨率。当我们运行测试时,分辨率太小,浏览器会将元素挤压在一起并导致测试失败。
有什么想法吗?我可以在 CloudFormation 配方中添加一些东西吗?在创建 AMI 之前我可以对图像做些什么吗?
谢谢。
答案1
答案2
您可以通过修改两个注册表值来更改屏幕分辨率。这两个值是: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Video\GUID\0000\DefaultSettings.XResolution
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Video\GUID\0000\DefaultSettings.YResolution
其中 GUID 是随机生成的 GUID。
实际上您可以指定任何 XResolution 和 YResolution 值,只要它们是十六进制的。
注意:如果使用 CRT 显示器,指定不合理的分辨率可能会损坏您的显示器。如果使用 LCD 显示器,您的显示器可能不再显示任何用户界面。更改屏幕分辨率的一个好方法是写下您想要填充屏幕宽度的像素数量(这是 XResolution)和您想要填充屏幕高度的像素数量(YResolution)。Windows 计算器(在 Server Core 中不可用,您必须找到另一台计算机或硬件高级计算器)提供了一种将十进制数转换为十六进制数的简单方法。然后,您可以使用这些值来修改相应的注册表值。重新启动将使您的首选屏幕分辨率符合现实。
您的显示器上使用的颜色深度在以下注册表值中捕获: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Video\GUID\0000\DefaultSettings.BitsPerPel
在我的盒子上,这个十六进制值设置为 0x00000008 (8),这意味着我的屏幕使用 8 位颜色深度。(256 色)将其更改为 16 位 (0x00000010) 将显示 65536 种颜色(高色彩)通常可用的其他值是 24 位 (0x00000018) 和 32 位 (0x00000020)。
答案3
我尝试了上述所有方法,但都失败了。我找到了一个适合我的情况的解决方案,很简单……使用 Windows Power Shell。
编写 power-shell 脚本
Set-DisplayResolution -Width 1920 -Height 1080 -Force
将其命名为resolution.ps1
保存在 C:\myTestFolder
并从下面的命令行运行它.....(我的脚本由批处理文件驱动)
WindowsPowerShell\v1.0\powershell.exe C:\myTestFolder\resolution.ps1
答案4
以下是我使用 RDP 在 AWS Windows 上设置无头屏幕分辨率的方法:
- 创建一个名为 rdp_local 的新用户
- 创建启动脚本以 RDP 到指定的用户帐户(例如 selenium)
- 添加防火墙规则以打开 RDP 端口 3389
- 配置自动登录以在重启时以 rdp_local 身份登录
请注意,自动登录需要用户名和密码,并且密码以未加密的形式存储在 Windows 注册表 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 下。
在 Amazon Windows Server 2012 R2 AMI 上测试。
下面是一个可以完成上述操作的 Chef 食谱:https://github.com/dhoer/chef-windows_screenresolution