我正在使用一个小型AngularJS应用程序测试Protractor。
这是测试:
describe('Testing Protractor', function() {
var draftList;
it('should count the number of drafts', function() {
browser.get('#/');
draftList = element.all(by.repeater('newsletter in drafts'));
expect(draftList.count()).toEqual(2);
});
});
控制器:
angular.module('myApp.controllers', []).
controller('DraftsCtrl', ['$scope', 'Draft', function($scope, Draft) {
$scope.drafts = Draft.query();
}])
草稿服务:
angular.module('myApp.services', ['ngResource']).
factory('Draft', ['$resource',
function($resource) {
return $resource('api/drafts/:id')
}])
使用Protractor运行此测试会导致以下错误:
Error: Timed out waiting for Protractor to synchronize with the page after 11 seconds
但是,如果在控制器中我改变了这一行:
$scope.drafts = Draft.query();
到此:
$scope.drafts = [];
测试按预期失败,但更重要的是:它没有超时。
启用query()后,无论是在浏览器中手动运行应用程序还是查看Protractor打开的浏览器窗口,API返回的数据都会由转发器正确显示。
为什么当服务与API通信时,Protractor无法与页面同步?
AngularJS是v1.2.0-rc3。量角器是v0.12.0。
答案 0 :(得分:26)
这是known issue,但有一个临时解决方法。设置ptor.ignoreSynchronization = true
。
例如:
describe('Testing Protractor', function() {
var draftList;
var ptor;
beforeEach(function() {
ptor = protractor.getInstance();
ptor.ignoreSynchronization = true;
});
it('should count the number of drafts', function() {
ptor.get('#/');
draftList = element.all(by.repeater('newsletter in drafts'));
expect(draftList.count()).toEqual(2);
});
});
答案 1 :(得分:3)
browser.ignoreSynchronization = true;
为我做好了准备。
答案 2 :(得分:1)
我正在使用Protractor 3.3.0并且为了在我的测试中使用它,我必须推迟忽略同步,直到我完成设置。
所以在我之前我每次都打电话给我:
var searchBox = element(by.css('#inpt_search'));
searchBox.sendKeys('test');
然后我必须等待模拟后端填充视图(我对这些sleep
调用不满意所以如果有人有更好的方法来做这个请评论,我不能得到{{ 1}}使用expectedConditions.presenceOf
工作,因为它是同一个bug的一部分。
然后在测试中我设置了browser.sleep(500)
,它会阻止被阻止的内容并查看浏览器内容。
browser.ignoreSynchronization = true
答案 3 :(得分:1)
不使用This docker project is intended to run zeppelin in a docker container, complete with the hadoop and spark clients configured to work with the hadoop cluster.
For OSX:
Prerequisites (available through brew install):
- docker
- docker-machine
- virtualbox
First, ensure that you have a virtual machine set up for docker-machine. You can create one named `dockermachine` with:
```
docker-machine create --driver virtualbox dockermachine
```
If the vm is running, stop it.
```
docker-machine stop dockermachine
```
Next, set up port the forwarding rules.
```
VBoxManage modifyvm dockermachine --natpf1 "zeppelinPF1,tcp,,4194,,4194"
VBoxManage modifyvm dockermachine --natpf1 "zeppelinPF2,tcp,,4195,,4195"
VBoxManage modifyvm dockermachine --natpf1 "zeppelinPF3,tcp,,4196,,4196"
VBoxManage modifyvm dockermachine --natpf1 "zeppelinPF4,tcp,,8080,,8080"
```
,而是使用browser.ignoreSynchronization
。 browser.waitForAngularEnabled(*boolean*)
将browser.waitForAngularEnabled(false)
设置为browser.ignoreSynchronization
,true
将browser.waitForAngularEnabled(true)
设置为browser.ignoreSynchronization
。
您还可以将其作为测试套件配置文件的一部分包含在内:
false