我试图在以下问题上找到一些线索,但无法在线找到好的帮助 .
我正在无头模式的Linux机器上运行Xvfb(X虚拟帧缓冲区),firefox . Xvfb主服务已启动并正在运行,并且已设置DISPLAY变量 .
/usr/bin/Xvfb :99 -ac -screen 0 1600x1200x16
我有一些自动化的基于硒的测试,我正在使用Gradle(gradle测试)运行 . 它们成功运行并且在Jenkins中'm able to get this working using Xvfb plugin. JUnit post publish report/result info and Gradle'的report / test / index.html文件显示成功的测试运行 .
我只是运行以下命令在Gradle中运行测试: gradle test -DsomePropConfigFileForEnv=SomeSourceConfigFilewithPathvalue
My questions:
1.如何获取此自动化测试/运行所呈现的所有页面的屏幕截图(即登录页面,登录后的应用程序主页,用户点击主页面在那里(即打开/单击各个选项卡,链接) ,表格,按钮等),最后退出页面 .
我能够从Xvfb_screen < N >文件中获取屏幕截图,该文件是在-fbdir文件夹下创建的(我们在通过Jenkins作业运行Xvfb时指定的)但是如果测试成功运行,屏幕截图是黑页(这可以由于我在下面提到的第二个子弹) - 或者它是一个有效的单页图像截图(如果在测试运行期间遇到错误) .
我正在尝试获取自动化Selenium测试所呈现的所有页面(我传递给Gradle的配置文件作为-D参数,其中包含URL /用户名/浏览器,版本等信息) . PS:这不仅仅是因为某些随机网址,我正在尝试使用Xvfb DISPLAY虚拟帧缓冲区获取图像截图 .
- 在测试期间,我看到有一个有效的虚拟帧缓冲文件,其大小有效 .
例如:当Jenkins作业正在进行并运行Gradle测试任务并且Xvfb插件已经启动了一个新的xvfb实例时,我看到:
/production/JSlaves/kobaloki2_1/xvfb-2015-02-04_01-16-37-6170319257811815857.fbdir/Xvfb_screen0
但是一旦测试完成(或者我们的错误),该文件就会从这个xxxx.fbdir文件夹中删除,并且根本就没有文件 .
Why is this file getting deleted .
如果它仍然存在,那么我可以使用xwd / xwud命令和其他工具(imagemagick转换等命令)来创建一个图像文件作为POST BUILD动作,甚至在“调用Gradle”步骤之后的BUILD部分中 .
以下命令将创建firefox屏幕截图的.png图像文件(仅一页截图)并假设xvfb在DISPLAY =:107上运行
xwd -root -display :107 | convert xwd:- /tmp/capture2.png
以下xvfb进程(仍在运行,其中包含一个有效的Xvfb_screen ****文件 - 由Jenkins作业创建,其中Xvfb插件配置了偏移量基数100和7因此是节点/内部版本号, :107作为DISPLAY号码) .
u10002 30717 19950 1 01:16 ? 00:00:00 Xvfb :107 -screen 0 1024x768x8 -fbdir /production/JSlaves/kobaloki2_1/xvfb-2015-02-04_01-16-37-6170319257811815857.fbdir
- 我没有运行Xvfb / Imagemagick等来获取URL的图像(例如:www.google.com),但试图获取测试运行期间测试在Xvfb内存虚拟帧缓冲区/文件后面呈现的所有屏幕截图 .
有没有其他工具(简单到可以安装而不搞乱Linux服务器)可以实现相同的功能(捕获以无头方式在Xvf / firefox / Linux服务器后面进行测试的所有页面的屏幕截图)?
我也尝试过Selenium Grid服务器,但FF正在那里(由于某种原因),因此我试图在Linux服务器上使用Jenkins,Gradle,Xvfb插件运行这些测试(无头模式)使用firefox浏览器并计划拥有N没有 . 执行程序运行这些测试的多次运行,最后捕获每次运行的结果 .
我正在归档工件(如果有的话)并使用Image Gallery插件,但是没有在Xvfb / firefox后面的Selenium中运行的所有渲染页面的图像 .
任何输入都非常感谢 .
谢谢 .
2 回答
如果您正在运行Selenium,那么您可以使用driver.getScreenshotAs()
http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp
在您想要屏幕截图并将其输出到光盘的步骤或方法的末尾设置此项 .
好的,这就是我做的 . 这种方法
doesn't
要求对项目的源代码进行任何更改 .已安装imagemagick(.. k),即yum在RHEL上安装imagemagick .
在目标服务器上创建了一个脚本,现在可以正常工作了 . 我所做的就是,在Jenkins工作中,当我已经启动了Xvfb实例(在Jenkins中使用Xvfb插件),然后在通过Gradle(或任何构建工具)运行Selenium GUI测试之前一秒钟,我调用以下内容脚本并传递参数(其中DISPLAY变量值可用于Jenkins作业,因为我们在其中使用Xvfb插件) . 在测试结束时,脚本自动存在(因为xwd命令不再获取任何输入以便正常退出)并最终在Jenkins上发布图像和.mp4(视频)文件(作为侧栏显示Test结果/视频)并使用"Image Galary Plugin"和.mp4文件归档工件(.png图像文件) .
注意:这要求您的机器已安装: imagemagick , xwd 和 ffmpeg . 如果传递给任何命令的选项不同 . 到您的操作系统机器,然后相应地调整它 . ffmpeg命令中的帧速率值可以是分数即1/5或0.5或15或任何你想要的东西(尝试一下,看看你得到了什么) .
如果你想要存档大量数据,这取决于你 . 如果你有足够的空间,并且你的Jenkins工作有更好的旧构建清理保留策略,你可以这样做 .