Angular 量角器测试因模态内的 Select2 而失败

Angular Protractor tests fail with Select2 inside Modal

我正在尝试 运行 我的 angular 用量角器进行端到端测试。我有一些情况 select 存在于模态中。根据测试机器 运行,这有时会失败,因为量角器找不到 select:

NoSuchElementError: No element found using locator: By.cssSelector("div#s2id_items”)

在速度较慢的机器上每次都能成功,而在速度较快的机器上却经常失败。我的猜测是,当量角器尝试访问 selector 时,模态仍在动画中,因此导致失败。

我尝试使用量角器配置中 onPrepare 指令中的以下代码禁用动画但没有成功:

var disableNgAnimate = function() {
  angular.module('disableNgAnimate', []).run(['$animate', function($animate) {
    $animate.enabled(false);
  }]);
};
browser.addMockModule('disableNgAnimate',disableNgAnimate);

我正在使用 angular 1.4.3 与 bootstrap 3.3.5 和量角器 2.1.0。

谢谢

编辑:

1 - 我没有使用明确的等待,我也不想这样做,因为这会大大减慢测试速度,或者在某些情况下仍然容易失败。

您可以尝试使用Expected Conditions等待,例如:

var EC = protractor.ExpectedConditions;
var myElement= element(by.css('div#s2id_items'));

browser.wait(EC.presenceOf(myElement), 5000);
//rest of your code

这种等待不会减慢您的测试速度,因为它只会等待元素显示足够长的时间,如果没有显示,则在 5 秒后失败。

编辑:对于可点击的动画对象,您可以尝试内置 "elementToBeClickable" 条件(只需替换上面示例中的 presenceOf),或者编写您自己的,它会做任何您喜欢的事情(函数返回 true的假)。 E2E 测试应该 "think" 像用户一样,用户会等待动画结束,所以也许最好还是使用显式等待动画。