我试图找到以下问题的一些线索,但却无法在线找到好帮助。
我在无头模式的Linux机器上运行Xvfb(X虚拟帧缓冲区),firefox。 Xvfb主服务已启动并正在运行,并且已设置DISPLAY变量。
/usr/bin/Xvfb :99 -ac -screen 0 1600x1200x16
我有一些自动化的基于硒的测试,我使用Gradle( gradle test )运行。他们成功运行,在Jenkins中,我能够使用Xvfb插件实现这一点。 JUnit发布报告/结果信息和Gradle的report / test / index.html文件显示成功的测试运行。
我只是运行以下命令在Gradle中运行测试: gradle test -DsomePropConfigFileForEnv = SomeSourceConfigFilewithPathvalue
我的问题:
1.如何获取此自动化测试/运行所呈现的所有页面的屏幕截图(即登录页面,登录后的应用程序主页面,用户点击主页面在那里(即打开/单击各个选项卡,链接) ,表格,按钮等),最后退出页面。
我可以从 Xvfb_screen < N >获取屏幕截图文件,它是在-fbdir文件夹下创建的(我们在通过Jenkins作业运行Xvfb时指定的)但是如果测试成功运行,屏幕截图是黑页(这可能是由于我在下面提到的第二个项目) - 或者它& #39;有效的单页图像屏幕截图(如果在测试运行期间遇到错误)。
我试图获取自动Selenium测试所呈现的所有页面(我作为-D参数传递给Gradle的配置文件中包含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文件夹中删除,并且根本没有文件。
为什么此文件被删除。
如果它仍然存在,那么我可以使用xwd / xwud命令和其他工具(imagemagick转换等命令)来创建一个图像文件作为POST BUILD动作,甚至可以在"之后的BUILD部分中创建。调用Gradle"步骤
以下命令将创建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
是否有其他工具(安装简单而不会搞乱Linux服务器)可以实现相同的目标(捕获以无头方式在Xvf / firefox / Linux服务器后面进行测试的所有页面的屏幕截图)?
我也尝试过Selenium Grid服务器,但FF正在那里(由于某种原因),因此我尝试使用Firefox上的Jenkins,Gradle,Xvfb插件在Linux服务器上运行这些测试(无头模式)浏览器并计划有N号。执行者运行这些测试的多次运行,最后捕获每次运行的结果。
我正在归档工件(如果有的话)并使用Image Gallery插件,但是没有在Xvfb / firefox后面的Selenium中运行的所有渲染页面的图像。
非常感谢任何投入。
感谢。
答案 0 :(得分:2)
如果您使用Selenium运行,则可以使用driver.getScreenshotAs()
http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp
在您需要屏幕截图并将其输出到光盘的步骤或方法的末尾设置此项。
答案 1 :(得分:2)
doesn't
需要对项目的源代码进行任何更改。
#!bin/bash
##
## This script will capture Screenshot (every 0.1 seconds) of an automated GUI (for ex: Selenium tests) tests running behind a HEADLESS Xvfb display instance.
## Then, it'll create a mp4 format movie using the captured screenshots.
##
## Machine where you run this script, should have: Xvfb service running, a session started by Xvfb plugin via Jenkins, xwd,ffmpeg OS commands and imagemagick (utilities).
## - For ex, try this on RHEL to install imagemagick: yum install imagemagick
##
## Variables
ws=$1; ## Workspace folder location
d=$2; d=$(echo $d | tr -d ':'); ## Display number associated with the Xvfb instance started by Xvfb plugin from a Jenkins job
wscapdir=${ws}/capturebrowserss; ## Workspace capture browser's screen shot folder
if [[ -n $3 ]]; then wscapdir=${wscapdir}/$3; fi ## If a user pass a 3rd parameter i.e. a Jenkins BUILD_NUMBER, then create a child directory with that name to archive that specific run.
i=1;
rm -fr ${wscapdir} 2>/dev/null || ( echo - Oh Oh.. Cant remove ${wscapdir} folder; echo -e "-- Still exiting gracefully! \n"; exit 0);
mkdir -p ${wscapdir}
while : ; do
xwd -root -display :$d 2>/dev/null | convert xwd:- ${wscapdir}/capFile_${d}_dispId`printf "%08d" $i`.png 2>/dev/null;
if [[ ${PIPESTATUS[0]} -gt 0 || ${PIPESTATUS[1]} -gt 0 ]]; then echo -e "\n-- Something bad happened during xwd or imagemagick convert command, manually check it.\n"; exit 0; fi
((i++)); sleep 0.1;
done
ffmpeg -r 5 -i ${wscapdir}/capFile_dispId_%08d.png ${wscapdir}/out_byRateOf5.mp4 2>/dev/null || echo -e "\n-- Some error occurred (may be too many files opened), exiting gracefully!\n";