我试图通过Protractor / Selenium对一个弹出的Angular 4项目进行E2E测试。
我的package.json
:
...
"scripts": {
"pree2e": "webdriver-manager update --standalone false --gecko false --quiet node",
"e2e": "protractor ./protractor.conf.js"
}
...
我的protractor.conf
:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
directConnect: true,
allScriptsTimeout: 60000,
getPageTimeout: 60000,
specs: [
'./src/e2e/**/*.e2e-test.ts'
],
capabilities: {
'browserName': 'chrome'
},
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 60000
},
onPrepare() {
require('ts-node').register({
project: 'tsconfig.e2e.json'
});
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: true
}
}));
browser.driver.manage().timeouts().setScriptTimeout(60000);
}
};
运行npm run e2e
Chrome启动时,它会尝试为每次测试打开data:text/html,<html></html>
,然后快速关闭。我错过了什么?我尝试将baseUrl
添加到我的protractor.conf
,但它没有帮助,因为看起来Selenium甚至没有运行。
答案 0 :(得分:0)
我终于找到了解决问题的方法。我不知何故需要运行ng serve
,现在可以,因为项目已被弹出,可以通过npm run start
运行。这是Travis CI部署(我强烈推荐),请参阅before_script
:
before_script:
- nohup npm run start &
script:
- npm run build -aot --target=production --environment=prod
- npm run test
- npm run e2e
最终package.json
(在ng eject
之后保持默认值):
...
"scripts": {
"ng": "ng",
"lint": "ng lint",
"build": "webpack",
"start": "webpack-dev-server --port=4200",
"test": "karma start ./karma.conf.js",
"pree2e": "webdriver-manager update --standalone false --gecko false --quiet",
"e2e": "protractor ./protractor.conf.js",
"postinstall": "npm run build -aot --target=production --environment=prod"
}
...
最终protractor.conf
(在ng eject
之后保持默认值):
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./src/e2e/**/*.e2e-test.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
beforeLaunch: function() {
require('ts-node').register({
project: 'tsconfig.e2e.json'
});
},
onPrepare() {
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: true
}
}));
}
};
以下是ng eject
:https://github.com/angular/angular-cli/issues/6171时发生的事情。
两天半的时间。感谢Angular CLI团队提供此错误,真的,谢谢。