2017-04-11 180 views
1

我使用Vagrant运行ubuntu-16.04,并且需要在无限环境中运行angular2端到端(e2e)测试以进行持续集成。在冲刷角度文档后,我甚至没有发现任何似乎应该成为常见用例的提及。如何运行headless angular2 e2e在vagrant ubuntu-16.04中使用量角器测试?

我发现了几个指令集即将使用xvfb,但从角度上缺乏前沿文档,这让我觉得我缺少一些明显的东西。

http://www.tothenew.com/blog/protractor-with-jenkins-and-headless-chrome-xvfb-setup/

可有人请点我在正确的方向?

更新我回答了以下两个不同的工作解决方案的问题。

回答

1

XVFB解决方案:

独立硒服务器

下面是使用一个独立的硒服务器工作解决方案主要来自www.tothenew.com。

安装:

#Provision Java JDK 
sudo apt-get install default-jdk -y 

#Provision Protractor 
sudo npm install protractor -g 

#Webdriver update 
sudo webdriver-manager update 

#Exposing chromedriver 
sudo ln /usr/lib/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29 /usr/bin/chromedriver 

sudo apt-get install libxpm4 libxrender1 libgtk2.0-0 libnss3 libgconf-2-4 -y 

#Provision Google Chrome 
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' 
sudo apt-get update 
sudo apt-get install google-chrome-stable -y 

sudo apt-get install xvfb gtk2-engines-pixbuf -y 
sudo apt-get install xfonts-cyrillic xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable -y 
sudo apt-get install imagemagick x11-apps dbus-x11 -y 

创建脚本:/etc/init.d/selenium

config.vm.provision "shell", inline: <<-SHELL 
    echo -n            > /etc/init.d/selenium 
    echo '#!/bin/sh'         >> /etc/init.d/selenium 
    echo 'Xvfb -ac :99 -screen 0 1280x1024x16 &'  >> /etc/init.d/selenium 
    echo '#disown $1'         >> /etc/init.d/selenium 
    echo 'export DISPLAY=:99'       >> /etc/init.d/selenium 
    echo 'webdriver-manager start /dev/null 2>&1'  >> /etc/init.d/selenium 

    sudo chmod +x /etc/init.d/selenium 

SHELL 

更新protactor.conf.js使用seleniumAddress:

exports.config = { 
    allScriptsTimeout: 11000, 
    specs: [ 
     './e2e/**/*.e2e-spec.ts' 
    ], 
    capabilities: { 
     'browserName': 'chrome' 
    }, 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    directConnect: false, 
    baseUrl: 'http://localhost:4200/', 
    framework: 'jasmine', 
    jasmineNodeOpts: { 
     showColors: true, 
     defaultTimeoutInterval: 30000, 
     print: function() {} 
    }, 
    beforeLaunch: function() { 
     require('ts-node').register({ 
      project: 'e2e/tsconfig.e2e.json' 
     }); 
    }, 
    onPrepare() { 
     jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 
    } 
}; 

要运行:

    下面
  1. 运行/etc/init.d/selenium
  2. 运行NG E2E

基于从Sudharsan建议量角器启动Selenium服务器

是另一种可行的解决方案。量角器在这种情况下启动硒服务器。

安装:

#Provision Java JDK 
sudo apt-get install default-jdk -y 

#Provision Protractor 
sudo npm install protractor -g 

#Webdriver update 
sudo webdriver-manager update 

#Exposing chromedriver 
sudo ln /usr/lib/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29 /usr/bin/chromedriver 

#Provision Google Chrome 
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' 
sudo apt-get update 
sudo apt-get install google-chrome-stable -y 

#Provision xvfb 
sudo apt-get install -y xvfb 
sudo apt-get install -y xfonts-100dpi xfonts-75dpi xfonts-cyrillic dbus-x11 

量角器配置:

exports.config = { 
    specs: [ 
     './e2e/**/*.e2e-spec.ts' 
    ], 
    capabilities: { 
     'browserName': 'chrome' 
    }, 
    directConnect: true, 
    //getPageTimeout: 60000, 
    //allScriptsTimeout: 60000, 
    baseUrl: 'http://localhost:4200/', 
    framework: 'jasmine2', 
    jasmineNodeOpts: { 
     showColors: true, 
     defaultTimeoutInterval: 30000, 
     print: function() {} 
    }, 
    beforeLaunch: function() { 
     require('ts-node').register({ 
      project: 'e2e/tsconfig.e2e.json' 
     }); 
    }, 
    onPrepare() { 
     jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 
    } 
}; 

要运行:

xvfb-run -a -e /dev/stdout -s "-screen 0 2920x2580x24" ng e2e 

运行单元测试针对Chrome浏览器也适用

xvfb-run -a -e /dev/stdout -s "-screen 0 2920x2580x24" ng test --single-run 

无头铬溶液:

铬现在有一个无头选项。 xvfb不再需要。 xvfb安装可以省略。

因缘

browsers: ['ChromeCI'], 
customLaunchers: { 
    ChromeCI: { 
    base: 'Chrome', 
    flags: ['--no-sandbox', '--headless', '--disable-gpu', '--remote-debugging-port=9222'] 
    } 
}, 

量角器

capabilities: { 
    'browserName': 'chrome', 
    'chromeOptions': { 
    'args': ['no-sandbox', 'headless', 'disable-gpu'] 
    } 
}, 

测试然后可以正常运行:

ng test 
ng e2e 
+0

其他人来到这里的信息 - 对于无头镀铬解决方案,sendkeys可以不行。有一个已知问题sendkeys&headless chrome.https://bugs.chromium.org/p/chromedriver/issues/detail?id = 1772 – wizgot

+0

@wizgot sendKeys问题(需要* nix上的xvfb)在chromedriver 2.31中修复,您可以从源代码构建自己。目前它也正在为通用版本准备。 – AlwaysLearning

1

这很简单,只需按照以下步骤。

第1步:安装xvfb。

在终端输入以下命令来安装xvfb的和它的相关性,

sudo apt-get install -y xvfb 
sudo apt-get install -y xfonts-100dpi xfonts-75dpi xfonts-cyrillic dbus-x11 

那它。现在,您可以使用以下命令触发量角器测试,基于

xvfb-run -a -e /dev/stdout -s "-screen 0 2920x2580x24" protractor config.js 
+0

感谢Sudharsan。所以我只使用使用Chrome的默认量角器配置,并省略了seleniumAddress?你可能包括你的量角器配置参考? –

+0

只需从配置文件中删除'seleniumAddress'键即可。量角器将在XVFB缓冲区显示中自行启动硒服务器。 –

+0

使用你的方法,我遇到了这些问题。 1)量角器表明我需要运行webdriver-manager更新,2)缺少java,3)硒找不到Chrome二进制文件。一旦安装了这些程序(请参阅上面的安装列表),我收到以下错误:无法在页面http:// localhost:4200 /上找到Angular:正在寻找angularexceeded。在我的量角器conf我有{directConnect:true,baseUrl'http:// localhost:4200 /',framework:'jasmine',...} –

相关问题