angularjs - Protractor wait() 用于去抖动事件 + 加载

标签 angularjs testing protractor

我试图让我的 Protractor 测试等待一个条件,但我得到了不一致的行为。场景是这样的:

  1. 用户在搜索框中写了一些词
  2. debounced 事件被触发。因此,这取决于用户何时停止输入。
  3. 我们发出 API 请求,同时显示正在加载 反馈并隐藏关闭按钮
  4. 反馈消失,关闭按钮重新出现,继续。

因此,为了实现这一点,我观察了关闭按钮。在用户停止写入和 debounce 事件触发之间 close button 是可见的。在 debounced 事件触发后(我们正在发出请求),正在加载 元素显示,关闭按钮 隐藏 [1]。完成后 关闭按钮 再次显示。

非常感谢任何想法,谢谢!

1:为了简化测试,我让 close button 消失至少 200 毫秒,这样在本地主机上就不会超快消失。这应该没问题,因为 webdriver 每 100 毫秒轮询一次等待条件。


所以,这是我的测试:

it('should show "no results" feedback when there are no results', function () {
    app.getHomepage();
    app.topMenu.searchLink.click();
    app.search.termsInput.sendKeys('chipijanders');
    app.search.waitForSearch();

    expect(app.search.noResults.isDisplayed()).toBe(true);

    // Checking the waitForSearch consistency
    for (var i = 0; i < 10; i++) {
        app.search.closeLink.click();
        app.topMenu.searchLink.click();
        app.search.termsInput.sendKeys('chipijanders');
        app.search.waitForSearch();
        expect(app.search.noResults.isDisplayed()).toBe(true);
    }
});

这里waitForSearch:

waitForSearch: function () {
    var self = this;

    browser.driver.wait(function() {
        return self.closeLink.isDisplayed().then(function (isDisplayed) {
            return !isDisplayed;
        });
    });

    browser.driver.wait(function() {
        return self.closeLink.isDisplayed().then(function (isDisplayed) {
            return isDisplayed;
        });
    });
}

最佳答案

最近遇到一个问题,等待下划线中的 decounced 方法。我使用的解决方案是像这样覆盖 protractor.conf 中的 _.debounced

onPrepare: function () {

    var debounceRightNow = function () {
        angular.module('debounceRightNow', []).run(
            function () {
                _.debounce = function (callback) {
                    return callback;
                };
            });
    };

    browser.addMockModule('debounceRightNow', debounceRightNow);
}

不确定这是否能回答您的问题,但这是一个不错的解决方案

关于angularjs - Protractor wait() 用于去抖动事件 + 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24609121/

相关文章:

javascript - 如何使用另一个字符串数组过滤 ng-repeat 中的字符串数组?

angularjs - AngularJS 中服务的条件注入(inject)

java - Hsqldb存储过程

angularjs - 如何在 Protractor 中启动任何测试用例之前运行 javascript 函数?

jenkins - 在 Windows Jenkins 从节点上运行 Protractor 时出现问题

angularjs - Protractor :WAITING规范完成 10000 毫秒后超时

javascript - 困在 JavaScript 中

angularjs - 如何在 View 中使用 html 元素呈现基本 HTML 代码

c# - 测试更多输入

javascript - 无法使用 Protractor 在搜索中选择特定结果 - AngularJS