
Aloísio Vítor
Image Processing Expert
Publicado Oct 26, 2026
Actualizado Oct 26, 2026 · min de lectura

Una prueba de navegador en Robot Framework puede fallar porque la página ahora muestra un CAPTCHA en lugar del contenido que espera la siguiente aserción. Aumentar un timeout genérico no explica ese cambio. Una comprobación específica de CAPTCHA puede darle al test un resultado útil: el tipo de desafío y los parámetros que necesitaría un flujo de trabajo de solver aprobado.
Robot Framework es un framework de código abierto para pruebas de aceptación y automatización de procesos robóticos. Su sintaxis de palabras clave permite a los equipos expresar comprobaciones mientras que las bibliotecas en Python implementan las operaciones subyacentes. Este tutorial conecta una palabra clave en Python con el Core SDK de CapSolver y verifica que Robot reciba resultados reales de detección desde una página de navegador.
La detección de CAPTCHA pertenece a un punto de control conocido de la página, antes de que el test trate una página bloqueada como una respuesta normal de la aplicación.
Por ejemplo, un flujo de navegador permitido espera un formulario de búsqueda pero en su lugar llega a un desafío. La primera pregunta útil es si hay un CAPTCHA soportado presente. Un resultado de reconocimiento puede entonces informar un siguiente paso controlado: usar la integración de resolución documentada, pausar para una acción humana o registrar un fallo de prueba específico.
Esto es diferente a tratar cada elemento ausente como un CAPTCHA. Una página también puede fallar porque su script de aplicación no se cargó, porque su ruta cambió o porque un selector es incorrecto. Mantén la detección de CAPTCHA separada de esos diagnósticos.
La guía de usuario de Robot Framework documenta las bibliotecas de prueba en Python y la ejecución de palabras clave. La pequeña biblioteca que aparece abajo usa ese punto de extensión. Es una integración de ejemplo, no una afirmación de que Robot Framework incluya de serie una biblioteca nativa de CapSolver.
Instala Robot Framework, Playwright y el Core SDK en el mismo entorno de Python para que el runner de tests pueda importar los tres.
El ejemplo usa Python 3.12, Robot Framework 7.5, Playwright 1.64.0 y capsolver-core 0.1.1. El repositorio oficial del framework es la fuente para los antecedentes del proyecto y las rutas de instalación soportadas.
python -m pip install robotframework==7.5 playwright==1.64.0 capsolver-core==0.1.1
python -m playwright install chromium
Ejecuta la instalación y los tests con el mismo intérprete. Un fallo de configuración habitual es instalar una biblioteca de navegador en un entorno y ejecutar Robot desde otro. La importación entonces falla antes de que la página se llegue a abrir.
Este ejemplo solo detecta un widget y lee sus parámetros públicos. La resolución de pago requeriría una clave API de solver válida, una cuenta preparada y un flujo de trabajo aprobado por separado. El test siguiente no produce ningún resultado de pago.
Crea index.html en un directorio de fixtures dedicado y sírvelo en tu propia máquina.
Google documenta la clave pública de prueba de reCAPTCHA v2 en su guía para pruebas automatizadas. El fixture usa esa clave para cargar un widget reconocible sin usar la configuración de un sitio en producción.
<!doctype html><html><head><title>Owned CAPTCHA test fixture</title></head><body>
<h1>Owned development page</h1>
<div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</body></html>
Inicia un servidor local desde ese directorio:
python -m http.server 8766 --bind 127.0.0.1
El script del widget sigue necesitando acceso de red a Google. Si el widget del fixture no se carga, comprueba ese prerrequisito antes de interpretar un resultado de detección vacío. El servidor local expone el fixture solo en la interfaz de loopback.
Una clave de prueba es útil para comprobar el cableado y el reconocimiento. No es evidencia representativa de la dificultad de los desafíos en producción, del rendimiento de un solver de pago ni de la aceptación por parte de la aplicación. Mantén esas pruebas separadas en la checklist de lanzamiento.
Guarda la siguiente biblioteca como CaptchaCheck.py junto a tu archivo de test de Robot.
La biblioteca llama al método documentado get_captcha_info del Core SDK. El wrapper específico para Robot es deliberadamente pequeño: inicia un event loop, abre un navegador, lee la información y cierra el navegador en un bloque finally.
import asyncio
from robot.api.deco import keyword
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
@keyword("Inspect CAPTCHA Page")
def inspect_captcha_page(url):
return asyncio.run(_inspect(url))
async def _inspect(url):
async with async_playwright() as pw:
browser = await pw.chromium.launch(headless=True)
try:
page = await browser.new_page()
await page.goto(url, wait_until="networkidle")
async with create_capsolver() as cap:
infos = await cap.get_captcha_info(page)
return [{"type": item.type.value, "url": item.website_url,
"site_key": item.website_key} for item in infos]
finally:
await browser.close()
La lista devuelta contiene diccionarios simples, que son cómodos para las aserciones en Robot. Una lista vacía significa que esta inspección no devolvió información coincidente. No debería convertirse en una afirmación de que no existe ningún posible desafío en ninguna parte del flujo.
La espera de carga de página es adecuada para este pequeño fixture. Una aplicación en producción con actividad de red persistente puede necesitar una condición de preparación diferente y específica de la página. No copies networkidle en cada aplicación suponiendo que demuestra que el widget relevante ha terminado de renderizarse.
Canjea tu código de bonificación de CapSolver
Aumenta tu presupuesto de automatización al instante.
Usa el código de bonificación CAP26 al recargar tu cuenta de CapSolver para obtener un 5% extra de bonificación en cada recarga, sin límites.
Canjéalo ahora en tu Panel de CapSolver
Guarda lo siguiente como captcha.robot junto a la biblioteca y ejecútalo mientras el servidor local del fixture esté disponible.
*** Settings ***
Library CaptchaCheck.py
Library Collections
*** Variables ***
${PAGE_URL} http://127.0.0.1:8766/
*** Test Cases ***
Identify The Fixture CAPTCHA
${items}= Inspect CAPTCHA Page ${PAGE_URL}
Should Not Be Empty ${items}
${first}= Get From List ${items} 0
Should Be Equal ${first}[type] reCaptchaV2
Log ${items}
python -m robot --outputdir results captcha.robot
El test comprueba que el detector devolvió un resultado y que el fixture se identifica como reCaptchaV2. Su log contiene la URL de la página devuelta y la sitekey pública. El informe generado por Robot indica si esas aserciones han pasado.
Un resultado satisfactorio establece una cadena específica: Robot invocó tu palabra clave en Python, Playwright abrió el fixture, el Core SDK inspeccionó la página real y los datos devueltos llegaron a las aserciones de Robot. El código cierra el navegador incluso cuando se produce una excepción.
Interpreta los fallos en la etapa en que se producen. Un error de importación es un problema de dependencias. Un error de navegación es un problema de acceso a la página. Un timeout puede significar que el fixture no se estabilizó. Una aserción de tipo fallida significa que los datos devueltos no coincidieron con la expectativa del fixture. Estas condiciones requieren correcciones diferentes.
La detección proporciona información para una decisión de resolución, pero el siguiente paso debe preservar el contexto de página que la tarea requiere.
La guía oficial del SDK describe la resolución en navegador como una operación separada. Si tu flujo de trabajo en producción necesita resolver y continuar en la misma página, mantén viva esa página y su contexto de navegador durante la operación. La palabra clave de diagnóstico de este artículo cierra su navegador y por lo tanto no es un paso de continuación enchufable para una sesión autenticada existente.
Los equipos que ya usan SeleniumLibrary o Robot Framework Browser también deberían distinguir su navegador activo del que abre este ejemplo. Compartir una URL no comparte cookies, interacciones previas ni un objeto de página. Evita afirmar que un desafío se resolvió en el navegador activo del test cuando el trabajo en realidad ocurrió en otro.
Para pruebas de regresión ordinarias sobre sitios propios, las claves de prueba del proveedor pueden ser la opción más simple. Usa una ruta de resolución real solo cuando el objetivo del test requiera validar esa integración. La guía de claves de prueba de reCAPTCHA explica ese límite con más detalle.
Usa un pequeño punto de control explícito para distinguir un CAPTCHA reconocido de un fallo genérico de elemento. CapSolver proporciona la capacidad de detección en este ejemplo; Robot Framework convierte su resultado en una aserción de prueba legible. Añade la resolución de pago solo como un paso verificado por separado con la propiedad de página correcta y comprobaciones de resultado de aplicación adecuadas.
P: ¿Este test de Robot resuelve el CAPTCHA?
No. Detecta el CAPTCHA del fixture y devuelve sus parámetros públicos. El test no solicita una solución de pago ni verifica el envío de un formulario en producción.
P: ¿Es este un plugin oficial de Robot Framework?
No. El wrapper de palabra clave en Python es un ejemplo construido alrededor del mecanismo de bibliotecas documentado de Robot Framework y del Core SDK oficial. Se incluye el wrapper exacto para que su comportamiento sea inspeccionable.
P: ¿Puedo usar la misma palabra clave dentro de tests con SeleniumLibrary?
Puedes llamar a la palabra clave, pero abre un navegador de Playwright separado. No inspecciona ni continúa la sesión de navegador de SeleniumLibrary. Una integración sobre una sesión existente necesita una transferencia explícita y soportada.
P: ¿Por qué el fixture devuelve una lista vacía?
Comprueba si el script del widget se cargó, si se está sirviendo la página esperada y si el SDK soporta el desafío presente. Un resultado vacío por sí solo no identifica la causa.
P: ¿Necesito una clave API de solver para este ejemplo?
La comprobación demostrada de detección de parámetros no envía una tarea de resolución de pago. Un paso de resolución en producción requiere las credenciales y prerrequisitos documentados para esa operación.
P: ¿Debería cada prueba automatizada llamar a un solver de CAPTCHA?
No. Usa los mecanismos de prueba del proveedor para pruebas rutinarias de regresión sobre sitios propios cuando sea adecuado. Reserva las pruebas de integración con el solver para el flujo de trabajo que están destinadas a validar, y mantenlas acotadas.

Aloísio Vítor
Image Processing Expert
Interpreting the visual signals behind web workflows.
SOBRE EL AUTOR
Encuentra por qué un CAPTCHA visible se omite dentro de un iframe. Verifica el contexto del documento, la carga del widget, los parámetros del sitio y la transferencia del navegador a tu solucionador.

Planifica pruebas de CAPTCHA en Node.js con claves de prueba del proveedor, verificaciones controladas del solucionador y aserciones claras. Separa las regresiones del formulario de los fallos en la resolución externa.
