【问题标题】:Angular Protractor tests fail with Select2 inside ModalAngular Protractor 测试在 Modal 内使用 Select2 失败
【发布时间】:2015-08-04 11:28:18
【问题描述】:

我正在尝试使用量角器运行我的角度 e2e 测试。我遇到了一些在模态中存在选择的情况。根据运行测试的机器,这有时会失败,因为量角器找不到选择:

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

在较慢的机器上,这每次都能正常工作,而在较快的机器上,它经常会失败。我的猜测是,当量角器尝试访问选择器时,模态仍然处于动画状态,因此导致失败。

我尝试在我的量角器配置中使用 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 - 我没有使用显式等待,我也不想这样做,因为这些会大大减慢测试速度,或者在某些情况下仍然容易失败。

【问题讨论】:

    标签: javascript angularjs twitter-bootstrap protractor angularjs-select2


    【解决方案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”条件(只需替换上面示例中的 presentOf),或者编写您自己的,这将做任何您喜欢的事情(函数返回 true 或 false)。 E2E 测试应该像用户一样“思考”,并且用户会等待动画结束,所以最好还是使用显式等待动画。

    【讨论】:

    • 通过这样做,我可以在动画仍在运行时继续测试执行,因为项目已经存在但随着模态移动。当我尝试使用以下详细信息 click() 时,这会导致失败:“元素在点 (1347, 285) 处不可点击。”,这意味着选择不再位于该位置。
    猜你喜欢
    • 2020-06-10
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多