我目前正在尝试使用量角器对AngularJS应用程序进行一些E2E测试,并且我遇到了btstrpd错误。我是AngularJS的新手(我只是项目中的测试自动化人员),所以我非常感谢有关如何使其运行的任何指示。btstrpd使用量角器测试AngularJS应用程序时出错
基本上我只是复制和粘贴从量角器教程里面的配置和规格,将它改编为我的项目:
// conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['spec.js'],
rootElement: 'html'
}
// spec.js
describe('Protractor Demo App', function() {
it('should have a title', function() {
browser.get('http://myapp.abc.de/ext/#/login');
expect(browser.getTitle()).toEqual('My App');
});
});
当我适应它,并运行在网络上的一些随机AngularJS网站能正常工作。当运行它为我的当前项目我收到以下错误:
1) Protractor Demo App should have a title Message: UnknownError: unknown error: [ng:btstrpd] http://errors.angularjs.org/1.3.15/ng/btstrpd?p0=document (Session info: chrome=43.0.2357.132) (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 9 milliseconds
完整堆栈跟踪here。
我们使用AngularJS v1.3.0和Protractor v2.1.0。该网站是自动引导的;根元素是html标签。路线提供者是否会导致此错误?该配置如下:
var myApp = angular.module('myApp', [ 'ngRoute' ]);
myApp.config([ '$routeProvider', function($routeProvider) {
$routeProvider.when('/', {
templateUrl : 'app/tmpl/start.html'
}).when('/login', {
templateUrl : 'app/tmpl/login.html',
controller : 'LoginController'
}).when('/logout', {
templateUrl : 'app/tmpl/logout.html',
controller : 'LogoutController'
});
} ]);
myApp.config([ '$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push("myInterceptor");
} ]);
myApp.run([ '$rootScope', function($rootScope) {
$rootScope.$apply(function() {
$rootScope.tokenString = "Bearer _";
});
} ]);
的index.html:
<!doctype html>
<html ng-app="myApp">
<head>
<script src="lib/jquery/jquery-2.1.1.min.js"></script>
<script src="lib/bootstrap/js/bootstrap.js"></script>
<script src="lib/angular/angular.min.js"></script>
<script src="lib/angular/angular-route.min.js"></script>
<script src="app/app.js"></script>
<script src="app/controller/LoginController.js"></script>
<script src="app/controller/LogoutController.js"></script>
<script src="app/controller/NavbarController.js"></script>
<script src="app/services/AuthService.js"></script>
<script src="app/services/UserService.js"></script>
<script src="app/factories/Configurations.js"></script>
<script src="app/factories/myInterceptor.js"></script>
<link rel="stylesheet" href="lib/bootstrap/css/bootstrap.css">
</head>
<body>
<nav class="navbar navbar-default" role="navigation" ng-controller="NavbarController as navbar">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar-collapse-1">
<span class="sr-only">Toggle navigation</span> <span
class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand" ng-href="navbar.root()">myApp</a>
</div>
<div class="collapse navbar-collapse"
id="navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a ng-href="#/customers">Customers</a></li>
<li ng-show="!navbar.showLogout()"><a ng-href="#/login">Login</a></li>
<li ng-show="navbar.showLogout()"><a ng-href="#/logout">Logout</a></li>
</ul>
</div>
</div>
</nav>
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<div ng-view></div>
</div>
</div>
</div>
</body>
</html>
的东西,我读过的其他线程和已经尝试过,但至今没有工作:
- 更改框架为
jasmine2
- 使用
browser.driver.get
中的onPrepare
函数 - 使用
browser.waitForAngular
在beforeEach
功能 - 降级到量角器1.8
- 添加
allScriptsTimeout
到conf.js
编辑:我刚刚发现了一个有趣的事情。我能够与元素进行交互并执行多种场景。执行后,测试仍会失败,并显示btstrpd错误。
当您从您的量角器配置中移除'rootElement'行时会发生什么?另外,确保量角器更新到最新版本。大多数情况下,它可以自行找到根元素。 如果您发布“index.html”文件的代码,它也可能有所帮助。 –
我在说明中添加了'index.html'。量角器是最新的。当我删除'rootElement'配置时,问题保持不变。 – Kat
@Kat你有没有找到这个错误的解决方案? –