我目前正在嘗試使用量角器對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你有沒有找到這個錯誤的解決方案? –