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

调试量角器到角度同步问题的规范方法

颛孙天宇
2023-03-14
问题内容

问题描述:

我们最近在量角器端到端测试中打开应用程序中的页面之一时遇到了这个臭名昭著的错误:

失败:超时,等待异步Angular任务在50秒后完成。这可能是因为当前页面不是Angular应用程序。

这是browser.get("/some/page/");在我们的一项测试中的一次通话中发生的:

describe("Test", function () {
    beforeEach(function () {
        browser.get("/some/page/");
    });

    it("should test something", function () {
        // ...
    });
)};

而且,对我们的案例来说很奇怪的是, 该错误未在Angular Web应用程序的任何其他页面上引发
-Protractor与Angular同步而没有任何问题。ng-app在所有页面上位置相关的内容都是相同的- ng-app在root
html标记上定义:

<html class="ng-scope" lang="en-us" ng-app="myApp" ng-strict-di="">

行为是一致的-每次我们使用导航到此页面时browser.get(),都会收到此错误。每当我们导航到应用程序中的任何其他页面时,同步均有效。

请注意,当然,我们可以关闭此页面的同步并将其视为非角度同步,但这只能视为一种解决方法。

问题:

还有什么会导致量角器到角度同步失败?我们应该检查什么?

而且,通常, 在Protractor中调试同步问题的推荐方法是什么?

使用当前最新的量角器5.5.1,角度1.5.6。


问题答案:

好的,这个问题引起了我的兴趣,因此我想出了一个程序化的解决方案来确定如何等待量角器:

var _injector = angular.element(document).injector();
var _$browser = _injector.get('$browser');
var _$http = _injector.get('$http');
var pendingTimeout = true;

//this is actually method that protractor is using while waiting to sync
//if callback is called immediately that means there are no $timeout or $http calls
_$browser.notifyWhenNoOutstandingRequests(function callback () {
  pendingTimeout = false
});

setTimeout(function () {
  //this is to differentiate between $http and timeouts from the "notifyWhenNoOutstandingRequests" method
  if (_$http.pendingRequests.length) {
    console.log('Outstanding $http requests', _$http.pendingRequests.length)
  } else if (pendingTimeout) {
    console.log('Outstanding timeout')
  } else {
    console.log('All fine in Angular, it has to be something else')
  }
}, 100)

在这里,在http://plnkr.co/edit/O0CkpnsnUuwEAV8I2Jil?p=preview中,您可以尝试超时和$
http调用,我的延迟端点将等待10秒才能解决该调用,希望对您有所帮助为了你



 类似资料:
  • 问题内容: 故事: 最近,由于其稳定和功能丰富,我们的UI从自定义表切换到Angular UI网格。 Angular UI网格主页面声称具有“ e2e测试集成”,但是我们很难做到这一点。 据我们了解,它们在“ e2e测试集成”下的含义是两个帮助文件:和。 有很多问题: 这两个帮助文件不是模块本身的一部分,并且不能作为单独的库使用,这意味着我们需要基本复制这两个文件的 当前 内容并手动在本地创建它们

  • 问题内容: WebStorm中提供了一种运行和调试量角器Web测试的方法。我只想在这里分享这个答案 问题答案: 获取节点路径(在终端中输入) 在WebStorm中:单击“ 编辑配置 ”-“ 运行 ”按钮左侧的下拉菜单(绿色箭头,类似于“播放”按钮) 单击“添加按钮”(绿色 + )以添加新的Node配置。选择“ Node.js ” 填写参数: 节点解释器 :Node.js的完整路径(从步骤1开始)

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

  • 问题内容: 我是Protractor的新手。尽管缺少文档,但我仍然了解基本原理,但找不到解决此问题的方法。 给出以下代码: 我可以看到输入获取了要插入的文本,并且模型以相同的值更新,但是测试失败,原因是description.getText()返回’‘(空字符串)。 有没有其他方法可以在输入中捕获值? 提前致谢。 问题答案: 显然,Selenium WebDriver有一个怪癖。看这里 尝试: 注

  • ![Frame Details][firebug正确显示了帧,但无法切换到帧]1 我正在尝试切换到id =所有设备的框架,但无法到达那里。我可以切换到任何其他框架,但不能切换到这个框架。以下是我尝试过的选项 browser.driver.switchTo(). frame('所有设备');browser.driver.switchTo(). frame(browser.driver.findEle

  • 我正在使用Angular 9、Node v14和e2e测试,使用Cucumber、量角器和量角器Cucumber框架。 量角器。conf.js tsconfig。e2e。json 发射json package.json 我可以在VSCode中启动调试器,但问题是每个断点都是未绑定的断点。 我还尝试在tsconfig中添加。e2e。json和我也尝试加入launch。json 问题似乎是ts节点在内