量角器:是否可以在Prepare上全局延迟WebElement.sendKeys()?

时间:2018-07-05 14:35:02

标签: javascript angular selenium protractor automated-tests

我正在慢速机器上运行量角器,我需要量角器来减慢每个按键和每个动作的速度。动作部分已经完成,但是我该怎么做keyPress部分呢?

我的本​​地解决方案是:

function delay(el, value, newDelay) {
    for (var i = 0; i < value.length; i++) {
        browser.sleep(newDelay || browser.params.delay);
        el.sendKeys(value[i]);
    }
}

在onPrepare中,我可以使用以下命令来减慢每个动作的速度:

browser.driver.controlFlow().execute = function () {
    var args = arguments;

    if (arguments[1] === "WebElement.sendKeys()")
        debugger;

    origFn.call(browser.driver.controlFlow(), function () {
        return protractor.promise.delayed(100);
    });

    return origFn.apply(browser.driver.controlFlow(), args);
};

但是我不知道如何降低sendKeys的速度,我相信我必须在放置调试器的地方做些什么,但是呢?

1 个答案:

答案 0 :(得分:1)

Aparenty,我发现的唯一解决方案是首先尝试发送整个字符串,如果失败,则一个个地发送密钥,然后再次检查,所以我的代码是这样的:

el.getAttribute('value').then(function (insertedValue) {
    if (insertedValue !== value) {
        el.clear().then(function () {
            el.sendKeys(protractor.Key.END);
            for (var i = 0; i < value.length; i++) {
                browser.sleep(100);
                el.sendKeys(value[i]);
                el.sendKeys(protractor.Key.END);
            }
            if (tryNo < 1) {
                el.getAttribute('value').then(function (insertedValue) {
                    if (insertedValue !== value) {
                        .......................
                    }
                });
            }
        });
    }
});