量角器等待动画完成

时间:2016-06-06 12:30:30

标签: javascript html protractor

在我们的应用程序中,我们有一些问题需要回答,这将更新进度条。目前,我有一个等待HTML属性更改的功能,适用于大多数事情,但是对于进度条来说有点挑剔,因为当条形从0 - 10%等移动时动画发生超过1-2秒。所以失败我目前面临的是:Expected 11 to be within range 12, 14

代码

Util.prototype.waitForAttributeChange = function (el, attr, time) {
    var timeout = time || 0,
        currentAttr;

    el.getAttribute(attr).then(function (val) {
        currentAttr = val;
        return currentAttr;
    }).then(function () {
        return browser.wait(function () {
            return el.getAttribute(attr).then(function (val) {
                return val !== currentAttr;
            });
        }, timeout);
    });
};

用法

Util.waitForAttributeChange(Page.progressBar(), 'style', 10000).then(function () {
    expect(Page.getProgressBarValue()).toBeWithinRange(12, 14);
};

问题:抓取的值不是进度条的最终结果,当它抓取它时它仍在移动(因为我的函数等待属性更改,此时属性确实发生了变化)

问题:还有其他方法可以等待动画,特别是等待它完成吗?和/或是否可以不使用browser.sleep()

1 个答案:

答案 0 :(得分:1)

您可以使用Expected Conditions解决此问题。

每当我需要等待元素可见时,我会使用以下方法,然后在执行下一步之前等待它消失。这对于可能阻止与其他元素交互的临时确认模态很有用。

let waitTimeInSeconds = 15;
let EC = protractor.ExpectedConditions;

secondsToMillis(seconds) {
    return seconds * 1000;
}

waitToBeVisible(element: ElementFinder) {
    browser.wait(EC.visibilityOf(element), this.secondsToMillis(waitTimeInSeconds), 'The element \'' + element.locator() + '\' did not appear within ' + waitTimeInSeconds + ' seconds.');
}

waitToNotBeVisible(element: ElementFinder) {
    browser.wait(EC.not(EC.visibilityOf(element)), this.secondsToMillis(waitTimeInSeconds), 'The element \'' + element.locator() + '\' still appeared within ' + waitTimeInSeconds + ' seconds.');
}