Транспортир: Можете ли вы отложить WebElement.sendKeys () в глобальном масштабе наPrepare? - PullRequest
0 голосов
/ 05 июля 2018

Я запускаю транспортир на медленной машине, и мне нужен транспортир, чтобы замедлять каждое нажатие клавиши и каждое действие. Часть действия выполнена, но как я могу выполнить часть 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 голосов
/ 11 июля 2019

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) {
                        .......................
                    }
                });
            }
        });
    }
});
...