如何在由ajax调用填充的ng-repeat中找到元素

时间:2014-10-04 20:36:02

标签: angularjs protractor

我正在尝试使用Protractor进行一些终端2端测试,我遇到了以下问题:

我有这个HTML:

<div ng-controller="Ctrl">
    ....
    <tr ng-repeat="row in service.data">
        <td>
            {{row.name}}
        </td>                               
        <td>
            <input type="checkbox" ng-modal="row.checked"/>
        </td>
    </tr>
</div>

在我的角度,我有以下js:

.controller('Ctrl', function($scope){
    $http.get('/api/service/').success(function(res){
       $scope.service.data = res.data;
    });
});

我无法找到从ng-repeat生成的表格行,因为在页面加载时它们不存在。

我的测试是使用此代码:

var items = element.all(by.repeater('row in service.data')).then(function(row){
    // But row is always []. It doesnt wait for $http to finish
});

我正在尝试创建一个测试用例来检查复选框并单击另一个操作按钮,但是我需要Protractor等待$ http调用完成并且angular首先呈现ng-repeat

1 个答案:

答案 0 :(得分:1)

我找到了问题!

有两个问题需要解决!

1.如果您的角应用不在身体中,请务必在conf.js中定义rootElement属性!

exports.config = {
    ...
    rootElement : '.element' // css selector to the element that contains ng-app
}

2.I转了browser.ignoreSynchronization = true;在beforeEach中,忘了为每个测试用例重新打开它。

beforeEach(function(){
    browser.ignoreSynchronization = true;
    ....
});

it('case', function(){
    browser.ignoreSynchronization = false;
    ....
});