量角器,AngularJS,Parse - 量角器不等待Angular解决

时间:2014-11-30 23:04:09

标签: angularjs protractor angular-routing

我是Protractor和AngularJS的新手。我在后端使用Parse。试着做一个非常简单的测试:

describe('Test', function () {

beforeEach(function () {
  browser.get('index.html#/example')
});

it('should have a button', function () {

   expect(element(by.css('#test321')).isElementPresent()).toBe(true); //fails 

}); ...

测试失败。该元素位于template.html中:

 ...
<body>
    <button id="test321">stuff</button>
...

通过角度路线加载。此路由还从后端加载数据:

...
config(['$routeProvider', function ($routeProvider) {
        $routeProvider.
            when('/example', {
                templateUrl: 'template.html',
                controller: 'templateCtrl',
                resolve: {
                    data: 'dataService' //Data is loaded from Parse. This line causes the problem
                }...

问题是由上面的“data:”行引起的。如果我拿出那条线,或者让它返回静态结果,它可以正常工作。此外,如果我移动此元素index.html也可以。

这似乎是一个时间问题。但是根据文档量角器(或特别是isElementPresent)在定位元素之前等待所有分辨率。

我被踩了。非常感谢您的帮助。

更新:根据this,这在Protractor 1.2中得到了解决,但我在1.4。很奇怪。

3 个答案:

答案 0 :(得分:6)

由于这是一个时间问题,解决方法可能是在断言它存在之前等待元素出现:

describe('Test', function () {

beforeEach(function () {
  browser.get('index.html#/example')
});

it('should have a button', function () {
   browser.wait(function() {
       return $('#test321').isPresent(); // keeps waiting until this statement resolves to true
   }, timeToWaitInMilliseconds, 'message to log to console if element is not present after that time');
   expect($('#test321').isPresent()).toBe(true);  

}); ...

答案 1 :(得分:1)

在Angular 2中,我在 protractor.conf.js 文件中使用以下内容:

onPrepare: function() {
    browser.ignoreSynchronization = false;
},
useAllAngular2AppRoots: true

答案 2 :(得分:0)

isPresent() will return promises,so put your expect code inside the callback function and try to execute. 

Try below code.hope it will work,

it('should have a button', function () {

   $('#test321').isPresent().then(function(result){
                                expect(result).toBe(true);
                                 });
 });