BrowserStack + Protractor + TravisCi和安全的localhost服务器 - 配置

时间:2016-10-11 06:07:06

标签: protractor travis-ci browserstack

尝试进行e2e测试以测试我的服务器及其在TraviCI上的用户界面。但是,为了运行所有组件并访问BrowserStack上的seleniumServer,我无法提供必要的配置。 我能够启动会话,但在启动浏览器https://localhost:3000/login时,我发现浏览器显示的页面未找到。如果我手动运行./BrowserStackLocal工具并使用browserstack访问我的localhost,我可以这样做没问题。 这是我的文件:

./ travis.yaml

...

addons:
  browserstack:
    username: "<my username>"
    access_key:
      secure: "<secure key goes here>"

config.js

var browserstack = require('browserstack-local');

exports.config = {

allScriptsTimeout: 11000,

specs: [
    'specs/*.js'
],

'seleniumAddress': 'http://hub.browserstack.com/wd/hub',

'capabilities': {
    'browserstack.user': '<my username>', //<<--- I also had a version without these properties for browserstack, and that didn't work either
    'browserstack.key': '<my key>',
    'browserName': 'chrome',
    'acceptSslCerts': true,
    'browserstack.debug': true,
    'chromeOptions': {
        'excludeSwitches': ["disable-popup-blocking"]
    }
},


baseUrl: 'https://localhost:3000/',
rootElement: 'div[ng-app]',

framework: 'jasmine',

jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
},

// Code to start browserstack local before start of test
beforeLaunch: function(){
    console.log("Connecting local");
    return new Promise(function(resolve, reject){
        exports.bs_local = new browserstack.Local();
        exports.bs_local.start({'key': exports.config.capabilities['browserstack.key'] }, function(error) {
            if (error) return reject(error);
            console.log('Connected. Now testing...');

            resolve();
        });
    });
},

// Code to stop browserstack local after end of test
afterLaunch: function(){
    return new Promise(function(resolve, reject){
        exports.bs_local.stop(resolve);
    });
}

};

2 个答案:

答案 0 :(得分:0)

由于您在BrowserStack Automate上测试本地/私有环境,因此您必须执行以下步骤:

1)通过BrowserStackLocal二进制文件创建本地测试连接。

2)在配置文件中添加功能'browserstack.local' : true

我在config.js文件中看不到该功能。添加功能,事情应该有效。

您的脚本与here类似。

答案 1 :(得分:0)

我最近遇到了同样的问题。首先,Ashwin是正确的,您需要将'browserstack.local' : true添加到量角器配置文件中。接下来,您需要在"browserstack-local": "^1.3.0"下将package.json添加到devDependencies。这是在构建服务器上安装Browserstack Local二进制文件所必需的。

<强>的package.json:

...
"devDependencies": {
 "browserstack-local": "^1.3.0"
}

除此之外,配置/设置不是问题。相反,它是如何您开始影响您的应用程序所服务的端口的测试。

使用本地二进制文件运行时它的工作原因是因为您的应用程序是在http://localhost:3000上启动的。

但是当您通过Travis构建并运行应用程序时(通过运行ng e2e或类似),它实际上是在另一个端口上启动您的应用程序(有关角度端口的更多信息,请参阅此post) 。您可以通过查看控制台日志来确认这一点,它应该从以下内容开始:

> ng e2e

** NG Live Development Server is listening on localhost:49152, open your browser on http://localhost:49152 **

在上面的示例中,它从端口49152开始。所以现在如果你在测试规范中的某个地方有localhost:3000硬编码,它就不会在那里找到任何东西。要解决此问题,请在测试规范文件中,而不是browser.get('http://localhost:3000/login'),尝试browser.get(browser.baseUrl + '/login')

我意识到这个答案对你来说可能为时已晚,但希望对其他人有所帮助。