octalmage / robotjs

Node.js Desktop Automation.
http://robotjs.io
MIT License
12.31k stars 951 forks source link

typeStringDelayed don't write accents #572

Open ci-bus opened 4 years ago

ci-bus commented 4 years ago

Expected Behavior

When use typeString accents work fine example: áéñ... but when use typeStringDelayed not work.

Possible Solution

Change typeStringDelayed to get string and split this in characters and use typeString with sleep between chars

Steps to Reproduce (for bugs)

// execute: robot.typeString('áéíóúñ'); // fine robot.typeStringDelayed('áéíóúñ'); // not found

Your Environment

ci-bus commented 4 years ago

JavaScript fix

function typeStringDelayed (string) { return new Promise((ok, fail) => { try { typeStringDelayedChar(string, 0, ok); } catch (err) { fail(err); } }); }

function typeStringDelayedChar (string, i, ok) { if (i < string.length) { robot.typeString(string[i]); i ++; setTimeout(() => typeStringDelayed(string, i, ok), 50); } else ok(); }

Usage

typeStringDelayed('áéíóúÁÉÍÓÚñÑ¿?¡!@€$&...').then(() => console.log('typeStringDelayed finished!')).catch((err) => console.error('typeStringDelayed', err));