Al trabajar con Playwright y Aerokube Moon para realizar pruebas remotas, uno de los desafíos es utilizar un contexto persistente que soporte extensiones. A continuación se presenta una solución al problema descrito.
Problema Identificado
Cuando se utiliza el método chromium.connect
para conectarse a un navegador de forma remota, el método newContext()
crea un contexto en modo incógnito, limitando el uso de extensiones. El intento de usar launchPersistentContext
para obtener un contexto persistente resulta en errores de tipo, ya que este método no es compatible con conexiones remotas.
Solución Propuesta
Dado que launchPersistentContext
no puede utilizarse en un entorno remoto, se sugiere una alternativa que implica separar la lógica de lanzamiento según el entorno. La idea es ejecutar el contexto persistente localmente y el contexto incógnito de forma remota.
-
Configuración Local para el Contexto Persistente: Si su configuración permite pruebas locales, podría usar
launchPersistentContext
para crear un contexto que soporte extensiones y cargar las necesarias. - Configuración Remota para el Contexto Incógnito: Cuando se ejecute de forma remota utilizando Aerokube Moon, continuar utilizando
newContext()
para conectarse pero aceptando la limitación del no soporte de extensiones.
Ejemplo de Lógica Condicional
if (moonConfig.enableMoon) {
console.log("Starting test via Aerokube - Moon");
const wsUrl = new URL(moonConfig.remoteUrl);
for (const [key, value] of Object.entries(moonConfig.capabilities)) {
if (Array.isArray(value)) {
for (const item of value) {
wsUrl.searchParams.append(key, item);
}
} else {
wsUrl.searchParams.set(key, value);
}
}
if (isLocalEnvironment) { // Asegúrese de definir esta variable según su entorno
// Uso de contexto persistente para entorno local
this.browser = await playwright.chromium.launchPersistentContext(userDataDir, { headless: false });
} else {
// Uso de contexto incógnito para conexión remota
this.browser = await chromium.connect({ wsEndpoint: wsUrl.toString() });
this.context = await this.browser.newContext({ viewport: { width: 1920, height: 1080 } });
}
this.page = await this.context.newPage();
}
Conclusión
Para utilizar un contexto persistente con soporte de extensiones en Playwright con Aerokube Moon, es necesario separar la lógica de ejecución según el entorno. Esto permite aprovechar las capacidades de contexto persistente en entornos locales mientras se maneja adecuadamente la conexión remota.