我目前正在尝试使用Protractor对AngularJS应用程序进行一些E2E测试,并且我遇到了 btstrpd 错误。我是AngularJS的新手(我只是项目中的测试自动化人员),所以我真的很感激如何使它运行。
基本上我只是从Protractor教程中复制并粘贴了示例配置和规范,并将其调整为我的项目:
// 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
allScriptsTimeout
添加到conf.js
编辑:我刚刚发现了一件有趣的事情。我能够与元素交互并执行多个场景。执行后,测试仍然失败并出现 btstrpd 错误。
答案 0 :(得分:0)
以下为我解决了问题
我正在使用selenium webdriver测试Chrome浏览器。我更新到最新的Chrome浏览器,我在下面的文件夹中添加了最新的chromedriver,除了默认的chrome文件夹
C:\ Program Files \ nodejs \ node_modules \ protractor \ node_modules \ webdriver-manager \ selenium
我还在上面的文件夹中添加了chromedriver的zip文件。
我还将chromedriver添加到环境路径变量中。
现在selenium webdriver正在运行,我能够成功测试项目。