2015-07-13 166 views
3

我目前正在尝试使用量角器对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.waitForAngularbeforeEach功能
  • 降级到量角器1.8
  • 添加allScriptsTimeoutconf.js


编辑:我刚刚发现了一个有趣的事情。我能够与元素进行交互并执行多种场景。执行后,测试仍会失败,并显示btstrpd错误。

+0

当您从您的量角器配置中移除'rootElement'行时会发生什么?另外,确保量角器更新到最新版本。大多数情况下,它可以自行找到根元素。 如果您发布“index.html”文件的代码,它也可能有所帮助。 –

+0

我在说明中添加了'index.html'。量角器是最新的。当我删除'rootElement'配置时,问题保持不变。 – Kat

+0

@Kat你有没有找到这个错误的解决方案? –

回答

0

下面解决了我的问题

我正在使用硒webdriver在Chrome浏览器上进行测试。我更新到最新的Chrome浏览器,我加入下文件夹中的最新chromedriver除了铬

C的默认文件夹:\ Program Files文件\的NodeJS \ node_modules \量角器\ node_modules \ webdriver的经理\硒

我还在上面的文件夹中添加了chromedriver的zip文件。

我还将chromedriver添加到环境路径变量中。

现在硒webdriver正在运行,我能够成功地测试项目。

相关问题