---
name: cdp_type_text
kind: function
lang: go
domain: browser
version: "1.1.0"
purity: impure
signature: "func CdpTypeText(c *CDPConn, text string) error"
description: "Escribe texto en el elemento activo de la pagina caracter por caracter via Input.dispatchKeyEvent (camino human). Envia keyDown+keyUp por cada caracter con una pausa ALEATORIA (15-65ms) que imita el ritmo irregular humano. Para el camino rapido (un solo round-trip, sin teclear) usa CdpInsertText. Usar CdpClick primero para enfocar el elemento."
tags: [chrome, cdp, browser, automation, keyboard, input, devtools, navegator]
uses_functions: [cdp_connect_go_browser]
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [fmt, time]
params:
  - name: c
    desc: "conexión CDP activa"
  - name: text
    desc: "texto a escribir en el elemento enfocado"
output: "error si falla la escritura"
tested: false
tests: []
test_file_path: ""
file_path: "functions/browser/cdp_type_text.go"
---

## Ejemplo

```go
conn, _ := CdpConnect(9222)
CdpNavigate(conn, "https://example.com/search")

// Enfocar el campo de busqueda y escribir
CdpClick(conn, "input[type=search]")
CdpTypeText(conn, "golang websocket")
```

## Notas

Envia dos eventos por caracter: `keyDown` (con `text`, que ya inserta el caracter en Chrome) y `keyUp`. No envia un evento `char` extra: lo duplicaba en sitios que reaccionan a eventos `input` (DuckDuckGo, Google). La pausa ALEATORIA de 15-65ms entre caracteres imita el ritmo irregular humano (reduce deteccion) y ayuda con inputs que tienen debounce.

Para el camino rapido del modo automatico hay `CdpInsertText` (todo el texto en un solo `Input.insertText`, sin keyDown/keyUp por tecla) — mucho mas rapido, pero sitios que validan pulsacion a pulsacion pueden no reaccionar. Para texto largo donde no importa el sigilo, `CdpInsertText` es preferible.

## Capability growth log

- v1.1.0 (2026-06-13) — La pausa entre caracteres pasa de 10ms fija a aleatoria 15-65ms (ritmo no-máquina). Nueva función hermana `CdpInsertText`: inserta todo el texto en un solo round-trip (`Input.insertText`) para el modo automático rápido. Se extrajo el chequeo de foco a `assertEditableFocus` (compartido).
