我们有一个Mac os服务器(10.10.3),我们用它来运行Jenkins的功能测试.
我们想(在我们的测试中)使用一个工具/库(sikulix作为信息),它使用了引擎java.awt.Robot类-java.awt.GraphicsEnvironment-.问题是:我们不能在无头环境中使用这个java类,因为它需要访问GUI.
所以我想知道是否有解决方案/黑客使这个工具与jenkins一起工作.
考虑到我们有一个USB-HDMI模拟器(mac无头加速器)模拟附加的显示器.
我们还安装了Xquartz,X11,xauth,所以我认为它会绕过这个java无头限制,强制将java.awt.headless属性设置为false,并使用X窗口,但事实并非如此.
如果我错了,请纠正我:我们不需要有真正的屏幕来做到这一点,这是显示模拟器/模拟器的目标; 不是吗?
我在我们的测试中成功尝试使用此lib:
在桌面上使用它(带监视器,它可以工作)
使用远程mac服务器 机器A和本地mac桌面 机器B之间的屏幕共享(通过执行此屏幕共享终端中的脚本)vnc?
在我的linux计算机(客户端)上使用ssh -Y,它也是X Window System(X11)应用程序的服务器:它在没有任何ssh配置更改(-Y标志)的情况下进行了X11转发.java.awt.headless = false在这里很有用
但我无法确定最后的解决方案是否有用.虽然我已经通过ssh执行了脚本,但我连接了一个屏幕:它可能会影响某些东西.
(请记住,最终目标是使用jenkins执行测试).
它引导我尝试:通过带有-Y标志的 ssh执行脚本,或者通过修改ssh_config/sshd_config文件(访问mac -remote服务器 - )并激活屏幕共享,但它不会自动识别X-window :(
在这里我的问题:
xvfb插件(jenkins)是否足以满足我们的需求?我不知道如何配置它.
是不是可以从mac服务器执行X11转发(用jenkins执行的脚本作为守护进程/代理;包括可能是ssh -Y连接,我还不知道如何让它工作)到共享的屏幕? - 这是服务器....不知道为什么它不能识别它 - .
是的,我知道,这个问题很奇怪,但我的大脑正在燃烧,我感到困惑......
顺便说一句,我宁愿做一切真无头,但如果不可能,我必须使用屏幕共享,我很好.
目前我真的很想知道是否有可能在无头环境中启动需要X11 -on mac的GUI应用程序...我认为正确的安装答案是肯定的,但显然它不是那么简单......或者我一定不能正确理解.
对于X11转发,我有$ DISPLAY var设置,但我仍然得到
错误:无法打开显示'地址'
即使我将显示设置为本地,远程或地址,我仍然被具有GUI访问权限的lib阻止.
另一个解决方案可能是附加终端会话(屏幕共享终端/终端启动脚本),我将在明天尝试使用tmux.我仍然觉得奇怪,服务器无法检测到它的共享会话(我想再说一遍!)....有一个打开的屏幕花花公子:s
使用xvfb:
export DISPLAY=:1
Xvfb :1 &
Run Code Online (Sandbox Code Playgroud)
然后mvn命令,但它仍然无法正常工作.
问题:我想知道是否可以在一个脚本文件中使用测试框架进行并行浏览,因此使用tester模块和casperjs测试命令.
我见过有些人创建了两个casper实例: CasperJS同时请求和https://groups.google.com/forum/#!topic/casperjs/Scx4Cjqp7hE,但正如文档中所述,我们无法创建新的casper实例在测试脚本中.
所以我尝试用类似的简单示例 - 使用casper测试脚本(只需复制并执行它就可以了):
var url1 = "http://casperjs.readthedocs.org/en/latest/testing.html"
,url2 = "http://casperjs.readthedocs.org/en/latest/testing.html"
;
var casperActions = {
process1: function () {
casper.test.begin('\n********* First processus with our test suite : ***********\n', function suite(test) {
"use strict";
casper.start()
.thenOpen(url1,function(){
this.echo("1","INFO");
});
casper.wait(10000,function(){
casper.test.comment("If parallel, it won't be printed before comment of the second processus !");
})
.run(function() {
this.test.comment('----------------------- First processus over ------------------------\n');
test.done();
});
});
},
process2: function () {
casper.test.begin('\n********* Second processus with our …
Run Code Online (Sandbox Code Playgroud) parallel-processing functional-testing node.js promise casperjs
好吧,我想知道如何在jenkins中找回测试失败的信息.
这里是我的文件夹(fr)的结果(显示22分钟,但并行显示为3分钟):
这里测试的描述失败-jenkins-:
这里测试的描述失败-casper-:
所以我的问题是jenkins显示只有测试的消息失败了,我想有线和代码也有用的信息(实际上有控制台输出但是不方便 - >我改变了我的我的,它是,请参阅与Jenkins的xUnit:如何在Build Console Output中显示颜色?,但我仍然需要'Pile d'exécution'/执行堆栈中的信息.
好吧,我可以通过指定slimer.bat文件的路径来启动slimerjs:C:\ bin\slimerjs\slimerjs.bat然后执行我的文件.
但是如果我修改casperjs文件(在bin \中)并修改slimer的默认exec:
'env_varname': 'SLIMERJS_EXECUTABLE',
'default_exec' : 'C:\bin\slimerjs\slimerjs.bat'
Run Code Online (Sandbox Code Playgroud)
当我执行casper命令时:
casperjs --engine=slimerjs test.js
Run Code Online (Sandbox Code Playgroud)
它不起作用,slimerjs.bat的路径似乎被忽略了.
我也试过了:https://github.com/laurentj/slimerjs/blob/master/BUILD.md
但单独的slimerjs.exe是不够的,我需要在我正在执行我的测试的当前文件夹中有application.ini和omni.ja,我不想在每个文件夹中添加一些文件.
我想要的只是在casperjs中使用引擎属性执行slimerjs,无论我在哪个文件夹,就像在phantomjs中所以我需要设置一个绝对路径(或从root的相对路径).
我不想在slimerjs.bat文件夹中指定我想要执行的文件夹或js测试:casperjs test C:/bin/try/test.js --engine = slimerjs.
这里有一个类似的问题:https: //github.com/n1k0/casperjs/issues/591
编辑(感谢Darren Cook的回答)了解更多详情:
set PATH=%PATH%;C:\\bin\\slimerjs
Run Code Online (Sandbox Code Playgroud)
如果我为slimer设置Windows PATH,当我执行casperjs test --engine = slimerjs test.js时,我有这样的消息:
但是在test.js文件夹中添加这两个文件可以解决问题.
所以我想我必须修改slimerjs bat文件,从slimerjs.bat文件夹设置:callexec路径,而不是当前的test.js文件夹.
这里 :
:callexec
if ["%HIDE_ERRORS%"]==[""] (
%SLIMERJSLAUNCHER% -app "%SLIMERDIR%application.ini" %PROFILE% -attach-console -no-remote %__SLIMER_ARGS%
) ELSE (
%SLIMERJSLAUNCHER% -app "%SLIMERDIR%application.ini" %PROFILE% -attach-console -no-remote %__SLIMER_ARGS% 2>NUL
)
Run Code Online (Sandbox Code Playgroud)
用:
SET SLIMERDIR=%~dp0
Run Code Online (Sandbox Code Playgroud)
问题是我不熟悉这种语法(批处理文件),它可能已经是正确的,问题不是来自这里.
但我观察到它似乎从当前文件夹中寻找application.ini和omni.ja,而不是slimerjs文件夹.
PS:第二个想法不起作用,但现在我知道它来自slimerjs.
编辑:
REM % ~ d[rive] …
Run Code Online (Sandbox Code Playgroud) 这是我的问题:我在一个特定的情况下尝试设置选择下拉列表的选项。我通常使用this.mouse.up() + this.mouse.down()
,但在这种情况下不能,因为这种行为在带有 webkit 的网站上不起作用(您可以将两者与 google chrome 和 Firefox 进行比较)。
这里是 url:在我的示例中,我想将字段“ANNEE”设置为年份 2008
我的代码:(我的函数更改 HTML 并启动 change() 事件)
//custom function
casper.fillSelect = function(selectSelector, optionText){
this.evaluate(function(sel,setByText) {
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents")
,x = document.querySelectorAll(sel + ' > option')
,l = x.length
;
evt.initEvent("change", false, true);
for (i=0; i<l; i++){
if(x[i].textContent.indexOf(setByText) !== -1){
console.log(x[i]);
console.log(x[i].getAttribute('value'));
x[i].setAttribute('selected', true);
x[i].parentNode.dispatchEvent(evt);
}
}
}
else {console.log("error with fillSelect");}
},selectSelector, optionText);
};
//event
casper.test.on('fail', function(failure) {
casper.capture('fail.png');
}); …
Run Code Online (Sandbox Code Playgroud) 所以问题已在这里提出,但解决方案对我不起作用(我可能做错了).我想按字母顺序("类型":"自然")对表格进行排序,但我希望空单元格位于底部(对于desc和asc).
我尝试了fbas给出的先前解决方案:
jQuery.fn.dataTableExt.oSort['mystring-asc'] = function(x,y) {
var retVal;
x = $.trim(x);
y = $.trim(y);
if (x==y) retVal= 0;
else if (x == "" || x == " ") retVal= 1;
else if (y == "" || y == " ") retVal= -1;
else if (x > y) retVal= 1;
else retVal = -1; // <- this was missing in version 1
return retVal;
}
jQuery.fn.dataTableExt.oSort['mystring-desc'] = function(y,x) {
var retVal;
x = $.trim(x);
y = $.trim(y);
if (x==y) retVal= 0; …
Run Code Online (Sandbox Code Playgroud)