提高 AWS 实例中硒测试的屏幕分辨率

Posted

技术标签:

【中文标题】提高 AWS 实例中硒测试的屏幕分辨率【英文标题】:Increasing screen resolution for selenium test in AWS instance 【发布时间】:2017-12-20 12:13:09 【问题描述】:

我正在使用竹子进行硒测试。在竹子中,我使用的是弹性代理,它是一个 aws 实例 - windows 2012。默认情况下,代理的屏幕分辨率为 1024x768。我只是想提高屏幕分辨率。

是否可以在创建 ami 的过程中或在启动代理之后增加屏幕分辨率?

任何帮助将不胜感激。谢谢。

【问题讨论】:

forums.aws.amazon.com/thread.jspa?threadID=148846 ***.com/questions/20178032/… 在无头 Chrome 中运行它不依赖于屏幕分辨率。 【参考方案1】:

对于这个确切的场景,我可以想出一个解决方法 --

问题在于,除非您使用 RDP 进行连接,否则 AWS EC2 实例会使用默认的基本图形适配器,其最大分辨率为 1024x768。 尝试通过 Selenium 设置浏览器大小将不起作用,因为浏览器窗口将自动调整为最大桌面分辨率大小。

但是,您可以这样做: 在测试运行期间打开浏览器后,您可以调用非托管代码并通过 user32.dll 中的方法设置浏览器窗口的大小,该方法带有阻止 Windows 自动将浏览器窗口大小调整回最大桌面分辨率大小的标志。

代码如下(部分摘自pinvoke.net)。这是一个 C# 示例,但可以重新设计为其他类型的解决方案,以便从您的框架中调用。

在框架内某处的类中,放置以下内容,然后在代码中实例化浏览器窗口,只需调用 SetBrowserLocAndSize 方法即可:

// Windows Interop Screen window position setter extern method
[DllImport("user32.dll", SetLastError = true)]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

public static void SetBrowserLocAndSize(string windowTitle, int x, int y, int width, int height)

    var proc = Process.GetProcesses().FirstOrDefault(p => p.MainWindowTitle.Contains(windowTitle));

    if(proc == null)
    
        throw new NotFoundException($"Could not find a window containing a window title of 'windowTitle'");
    

    var hwnd = proc.MainWindowHandle;

    // See https://www.pinvoke.net/default.aspx/user32.setwindowpos for information on this method
    SetWindowPos(hwnd, new IntPtr(0), x, y, width, height, 0x0100 | 0x0400 | 0x0040);

【讨论】:

以上是关于提高 AWS 实例中硒测试的屏幕分辨率的主要内容,如果未能解决你的问题,请参考以下文章

修改Android手机的分辨率和屏幕密度

如何在 Windows 上测试不同 DPI/屏幕分辨率的 Qml/Quick UI?

如何从没有屏幕的机器上获取屏幕分辨率?

Silverlight 3:调整屏幕分辨率的技巧

多屏幕多分辨率的支持和一些概念

运行 pythonw.exe 时影响 Python 脚本 tkinter 分辨率和屏幕截图大小