尝试进行e2e测试以测试我的服务器及其在TraviCI上的用户界面。但是,为了运行所有组件并访问BrowserStack上的seleniumServer,我无法提供必要的配置。
我能够启动会话,但在启动浏览器https://localhost:3000/login
时,我发现浏览器显示的页面未找到。如果我手动运行./BrowserStackLocal工具并使用browserstack访问我的localhost,我可以这样做没问题。
这是我的文件:
...
addons:
browserstack:
username: "<my username>"
access_key:
secure: "<secure key goes here>"
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);
});
}
};
答案 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')
。
我意识到这个答案对你来说可能为时已晚,但希望对其他人有所帮助。