在Protractor中模拟慢速键入

ale*_*cxe 5 javascript testing selenium angularjs protractor

sendKeys()方法会立即发送所有密钥(实际上,一次一个但很快):

var elm = element(by.id("myinput"));
elm.sendKeys("test");
Run Code Online (Sandbox Code Playgroud)

有没有办法减慢打字速度,以便量角器一次发送一个字符,每个字符之间有一个小延迟?

我们可以完全放慢Protractor的速度,但这不会改变sendKeys()工作方式,它也会减慢一切,而我们只需要"发送键"部分,并且仅在特定情况下.

ale*_*cxe 6

这个想法是使用browser.actions()和构造一系列"发送密钥"命令 - 一个用于字符串中的每个字符.在每个"发送密钥"命令之后,我们通过引入自定义sleep操作来添加延迟.最后,我们提出了一个可重用的功能:

function slowType(elm, keys, delay) {
    var action = browser.actions().mouseMove(elm).click();

    for (var i = 0; i < keys.length; i++) {
        action = action.sendKeys(keys[i]).sleep(delay);
    }

    return action.perform();
}
Run Code Online (Sandbox Code Playgroud)

用法:

slowType(elm, "some text", 100);
Run Code Online (Sandbox Code Playgroud)