量角器wait()用于去抖动事件+加载

时间:2014-07-07 11:04:48

标签: angularjs testing protractor

我正试图让我的量角器测试成wait条件,但我的行为不一致。场景是这样的:

  1. 用户在搜索框中写入一些字词
  2. 触发去抖事件。因此,这取决于用户何时停止输入。
  3. 我们发出API请求,同时我们会显示is loading反馈并隐藏close button
  4. 反馈消失,close button重新定位,继续。
  5. 所以,为了达到这个目的,我正在观察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;
            });
        });
    }
    

1 个答案:

答案 0 :(得分:1)

最近有一个问题在等待下划线中的退出方法。我使用的解决方案是在protractor.conf中覆盖_.debounced,如此

onPrepare: function () {

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

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

不确定这是否可以回答您的问题,但这是一个非常好的解决方案