【发布时间】:2015-01-28 22:10:16
【问题描述】:
我是 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。很奇怪。
【问题讨论】:
-
到目前为止,我发现的唯一临时解决方案(受 aricearice 启发)是插入显式等待。这是一种似乎可行的方法:
browser.wait(function () { return $('#addReferringButton').then(function (element) { return true; }, function(error) { return false; }); }, 5000);
标签: angularjs protractor angular-routing