gpt4 book ai didi

javascript - 我如何告诉 Selenium Angular Controller 有 "loaded"

转载 作者:行者123 更新时间:2023-11-30 08:36:32 24 4
gpt4 key购买 nike

我有一些 UI 测试试图测试单击某个元素是否会出现其他内容。有一个针对所有测试的现有检查,旨在查看 DOM 是否已准备就绪,但是在甚至触发和 app.controller() 调用之间有一小段时间全部完成,我的测试可能会跳入并错误地确定点击尚未添加处理程序。

我可以使用 angular.element('[ng-controller=myController]').scope() 来确定范围是否已定义,但是仍然有一个非常小的窗口可以在点击处理程序之前运行测试边界(一个非常非常小的窗口)。

<div ng-controller="myController">
<div ng-click="doWork()"></div>
</div>

任何人都可以找到一种方法来判断已添加点击处理程序吗?

PS:当 Controller 加载时, Controller 内会触发一个事件:$scope.$on('$viewContentLoaded', function(){ });但这并没有真正帮助我,除非我在 Controller 中订阅它并在某处标记一个我可以通过 Selenium 检查的变量。

PPS:其中很多都有随范围变化而变化的类,它们可用于触发测试,但很多都没有。

最佳答案

有一个专门用于测试 AngularJS 应用程序的工具 - protractor .它基本上是 WebDriverJS 的包装器 - selenium javascript webdriver。

使用 protractor 的主要好处是它知道 Angular 何时安定下来并准备就绪。它使您的测试以自然的方式进行,而无需使用显式等待:

You no longer need to add waits and sleeps to your test. Protractor can automatically execute the next step in your test the moment the webpage finishes pending tasks, so you don’t have to worry about waiting for your test and webpage to sync.

它还提供了几个独特的 AngularJS 特定定位器,如 by.modelby.binding 等。而且,一般来说,它提供了一个非常 convenient and well-designed API 的定位器。用于端到端测试。

关于javascript - 我如何告诉 Selenium Angular Controller 有 "loaded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30922219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com