【问题标题】:Protractor wait() for debounced event + loading量角器 wait() 用于去抖动事件 + 加载
【发布时间】:2014-07-07 11:04:47
【问题描述】:

我正在尝试将我的量角器测试设为wait 一个条件,但我的行为不一致。场景是这样的:

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

所以,为了实现这一点,我正在观察close button。在用户停止写入和去抖动事件之间触发close button 是可见的。在 debounced 事件触发后(我们正在发出请求),is loading 元素显示和 close button 隐藏 [1]。何时结束close button 再次显示。

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

1:为了简化测试,我让close button 消失了至少 200 毫秒,这样在 localhost 中就不会消失得非常快。这应该没问题,因为 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;
        });
    });
}

【问题讨论】:

    标签: angularjs testing protractor


    【解决方案1】:

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

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

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

    【讨论】:

    • 这个问题发生已经有一段时间了,但这对我来说似乎是一个好方法。
    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多