/// <summary> /// Sends a <c>keydown</c>, <c>keypress</c>/<c>input</c>, and <c>keyup</c> event for each character in the text. /// </summary> /// <param name="text">A text to type into a focused element</param> /// <param name="options">type options</param> /// <remarks> /// To press a special key, like <c>Control</c> or <c>ArrowDown</c>, use <see cref="PressAsync(string, PressOptions)"/> /// </remarks> /// <returns>Task</returns> public async Task TypeAsync(string text, TypeOptions options = null) { var delay = 0; if (options?.Delay != null) { delay = (int)options.Delay; } var textParts = StringInfo.GetTextElementEnumerator(text); while (textParts.MoveNext()) { var letter = textParts.Current; if (KeyDefinitions.ContainsKey(letter.ToString())) { await PressAsync(letter.ToString(), new PressOptions { Delay = delay }).ConfigureAwait(false); } else { if (delay > 0) { await Task.Delay(delay).ConfigureAwait(false); } await SendCharacterAsync(letter.ToString()).ConfigureAwait(false); } } }
/// <summary> /// Sends a <c>keydown</c>, <c>keypress</c>/<c>input</c>, and <c>keyup</c> event for each character in the text. /// </summary> /// <param name="text">A text to type into a focused element</param> /// <param name="options">type options</param> /// <remarks> /// To press a special key, like <c>Control</c> or <c>ArrowDown</c>, use <see cref="PressAsync(string, PressOptions)"/> /// </remarks> /// <returns>Task</returns> public async Task TypeAsync(string text, TypeOptions options = null) { var delay = 0; if (options?.Delay != null) { delay = (int)options.Delay; } foreach (var letter in text) { if (KeyDefinitions.ContainsKey(letter.ToString())) { await PressAsync(letter.ToString(), new PressOptions { Delay = delay }); } else { await SendCharacterAsync(letter.ToString()); } if (delay > 0) { await Task.Delay(delay); } } }