小编Fan*_*nch的帖子

在持续集成(无头环境 - > mac os X服务器)中,使用需要访问GUI的工具/ lib,xvfb/display emulator/X11转发

我们有一个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命令,但它仍然无法正常工作.

macos headless awtrobot jenkins xvfb

13
推荐指数
1
解决办法
1457
查看次数

CasperJS,与测试框架并行浏览

问题:我想知道是否可以在一个脚本文件中使用测试框架进行并行浏览,因此使用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

8
推荐指数
1
解决办法
2720
查看次数

CasperJs + jenkins:当测试失败时,如何检索此测试的所有信息

好吧,我想知道如何在jenkins中找回测试失败的信息.

这里是我的文件夹(fr)的结果(显示22分钟,但并行显示为3分钟):

jenkinsResult

这里测试的描述失败-jenkins-:

jenkins-casperJs测试失败 -

这里测试的描述失败-casper-:

casperjs测试失败

所以我的问题是jenkins显示只有测试的消息失败了,我想有线和代码也有用的信息(实际上有控制台输出但是不方便 - >我改变了我的我的,它是,请参阅与Jenkins的xUnit:如何在Build Console Output中显示颜色?,但我仍然需要'Pile d'exécution'/执行堆栈中的信息.

xunit jenkins casperjs

6
推荐指数
1
解决办法
1837
查看次数

在casperjs中启动slimerjs的正确方法是什么(使用绝对路径)?

slimerjs发射

好吧,我可以通过指定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时,我有这样的消息:

失败的slimerjs

但是在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)

exe relative-path absolute-path casperjs slimerjs

5
推荐指数
1
解决办法
9616
查看次数

CasperJS:下拉列表;选择一个选项,代码可以在 browser&slimer 中运行,但不能在 phantom 中运行

这是我的问题:我在一个特定的情况下尝试设置选择下拉列表的选项。我通常使用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)

javascript html-select phantomjs casperjs slimerjs

5
推荐指数
1
解决办法
4851
查看次数

排序(按字母顺序)以忽略空单元格:dataTables

所以问题已在这里提出,但解决方案对我不起作用(我可能做错了).我想按字母顺序("类型":"自然")对表格进行排序,但我希望空单元格位于底部(对于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 == "&nbsp;") retVal=  1;
    else if (y == "" || y == "&nbsp;") 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)

sorting jquery datatables emptydatatext

5
推荐指数
1
解决办法
7195
查看次数