Angularjs 如何在由ajax调用填充的ng repeat中找到元素
我试图使用量角器进行一些端2端测试,但遇到以下问题: 我有这个html: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>
<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;
....
});