当前位置: 首页 > 面试题库 >

使用$ resource时,量角器超时,等待与页面同步

子车安和
2023-03-14
问题内容

我正在使用小型AngularJS应用测试量角器。

这是测试:

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')
    }])

使用量角器运行此测试会导致以下错误:

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。


问题答案:

这是一个已知问题,但是有一个临时解决方法。设置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);
  });
});


 类似资料:
  • 问题内容: 我正在测试AngularJS应用程序,并且对量角器非常新。每次我打开浏览器时,它都会打开,然后等待超时,然后在cmd上引发以下错误。 我尝试增加超时限制,但始终会收到此错误。我也尝试过使用所有这些: 该页面正确加载,并且如果我使用Eclipse和Selenium与按钮对象进行交互,则可以正常工作。 只有量角器出现同步问题。请帮忙。 问题答案: 量角器超时的可能原因: 您的网页未以预期的

  • 问题内容: 我的档案是: 我的节点项目在9001端口上运行并在监听。 我的测试是: 我得到的错误是: 我究竟做错了什么?? 问题答案: (非常简短的版本): 使用代替。 较长的版本: Protractor基本上是Selenium及其Javascript WebDriver代码的包装。量角器添加代码以等待Angular“安顿下来”(即完成$ digest循环),然后继续测试代码。但是,如果您的页面上

  • 我试图遵循量角器官方网站上的量角器教程,但我甚至无法完成步骤0。 我在用量角器 之后,我一直在遵循教程的第0步。我有配置。js文件和test-spec.js文件如下: 配置js公司 测试规范js 当我运行protector

  • 在Bash脚本中,我想做如下操作: 一、 例如,在后台启动两个应用程序,并给他们60秒时间完成工作。然后,如果他们没有在这段时间内完成,就杀了他们。 不幸的是,上面的方法行不通,因为< code>timeout是一个可执行文件,而< code>wait是一个shell命令。我试着把它改成: 但是这仍然不起作用,因为< code>wait只能在同一个shell中启动的PID上调用。 有什么想法吗?

  • 问题内容: 我有一个单击按钮并重定向到用户仪表板的测试。发生这种情况时,Webdriver返回: 为了解决这个问题,我将插入到发生重定向的位置,并假设我的CPU使用率很低,这可以解决此问题。但是,2000 ms是任意的并且很慢。是否有类似的东西会等到Angular在重定向页面上加载之前? 问题答案: 您认为这样的事情对您有用吗?最多需要等待10秒,URL才能包含文本“ pageTwo”或您输入的任