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

Angularjs 如何在由ajax调用填充的ng repeat中找到元素,angularjs,protractor,Angularjs,Protractor,我试图使用量角器进行一些端2端测试,但遇到以下问题: 我有这个html: <div ng-controller="Ctrl"> .... <tr ng-repeat="row in service.data"> <td> {{row.name}} </td> <td>

我试图使用量角器进行一些端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>
我很难找到从
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
});

我正在尝试制作一个测试用例来选中复选框并单击另一个操作按钮,但我需要量角器来等待$http调用完成,并首先渲染
ng repeat

我发现了问题

有两个问题需要解决

1.如果angular应用程序不在body中,请确保在conf.js中定义了rootElement属性

exports.config = {
    ...
    rootElement : '.element' // css selector to the element that contains ng-app
}
2.我打开了browser.ignoreSynchronization=true;在beforeach中,并且忘记为每个测试用例重新启用它

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

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

是什么使这些行出现在页面中?重复由$http调用设置的“service.data”的ng repeat,但触发此$http调用的是什么?您的意思是当页面加载时数据不在那里。那么它什么时候出现呢?当用户单击按钮时,它位于角度控制器中,因此$http在页面加载时运行。量角器应该可以看到这些按钮,除非http调用返回空数组,或导致错误,或需要很长时间才能回答。您在执行测试时看到它们了吗?密码在哪里?
beforeEach(function(){
    browser.ignoreSynchronization = true;
    ....
});

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