{ "source": "streamyard.com broadcasts -> studio", "capturedAt": "2025-11-15T00:00:00Z", "notes": "Selectores heurísticos y alternativas (texto, xpath, css) para pruebas E2E. Usar la estrategia text (Playwright) o XPath cuando el texto es estable.", "selectors": [ { "id": "broadcasts.enter_studio_link", "description": "Link 'Entrar al estudio' en la tabla de broadcasts (fila de transmisión)", "playwright": "text=Entrar al estudio", "css": "a:has-text('Entrar al estudio')", "xpath": "//a[contains(normalize-space(.), 'Entrar al estudio')]", "page": "broadcasts" }, { "id": "prejoin.start_camera_button", "description": "Botón para iniciar la cámara en la pantalla previa al ingreso", "playwright": "text=Iniciar cámara", "css": "button:has-text('Iniciar cámara')", "xpath": "//button[contains(normalize-space(.), 'Iniciar cámara')]", "page": "studio-prejoin" }, { "id": "prejoin.join_without_devices", "description": "Botón fallback 'Entrar sin micrófono/cámara' cuando no hay dispositivos", "playwright": "text=Entrar sin micrófono/cámara", "css": "button:has-text('Entrar sin micrófono/cámara')", "xpath": "//button[contains(normalize-space(.), 'Entrar sin micrófono/cámara')]", "page": "studio-prejoin" }, { "id": "prejoin.enter_studio_button", "description": "Botón final 'Entrar al estudio' en prejoin (si existe)", "playwright": "text=Entrar al estudio", "css": "button:has-text('Entrar al estudio'), a:has-text('Entrar al estudio')", "xpath": "//button[contains(normalize-space(.), 'Entrar al estudio')] | //a[contains(normalize-space(.), 'Entrar al estudio')]", "page": "studio-prejoin" }, { "id": "studio.add_guest_button", "description": "Botón 'Agregar invitados' en el panel del estudio (green room)", "playwright": "text=Agregar invitados", "css": "button:has-text('Agregar invitados')", "xpath": "//button[contains(normalize-space(.), 'Agregar invitados')]", "page": "studio" }, { "id": "studio.record_button", "description": "Botón 'Grabar' o 'Record' en la barra de control para iniciar/detener grabación", "playwright": "text=Grabar", "css": "button:has-text('Grabar'), button:has-text('Record'), button:has-text('Iniciar grabación'), button:has-text('Start Recording'), button:has-text('Recording'), button[data-testid*='record']", "xpath": "//button[contains(normalize-space(.), 'Grabar') or contains(normalize-space(.), 'Record') or contains(normalize-space(.), 'Iniciar grabación') or contains(normalize-space(.), 'Start Recording') or contains(normalize-space(.), 'Recording')]", "page": "studio" }, { "id": "studio.destination_button", "description": "Botón 'Agregar destino' (configuración de plataformas de multistream)", "playwright": "text=Agregar destino", "css": "button:has-text('Agregar destino')", "xpath": "//button[contains(normalize-space(.), 'Agregar destino')]", "page": "studio" }, { "id": "scenes.show_on_stage", "description": "Botón 'Mostrar en el escenario' dentro del listado de escenas (thumbnail)", "playwright": "text=Mostrar en el escenario", "css": "button:has-text('Mostrar en el escenario')", "xpath": "//button[contains(normalize-space(.), 'Mostrar en el escenario')]", "page": "studio-aside-scenes" }, { "id": "scenes.new_scene", "description": "Botón 'Nueva escena' en panel de Scenes", "playwright": "text=Nueva escena", "css": "button:has-text('Nueva escena')", "xpath": "//button[contains(normalize-space(.), 'Nueva escena')]", "page": "studio-aside-scenes" }, { "id": "assets.change_logo_section", "description": "Control para cambiar la sección del logo en Assets", "playwright": "text=Cambiar la sección del logo", "css": "button:has-text('Cambiar la sección del logo')", "xpath": "//button[contains(normalize-space(.), 'Cambiar la sección del logo')]", "page": "studio-aside-assets" }, { "id": "layouts.preset_individual", "description": "Botón de preset diseño 'Individual' (uno de los presets listados)", "playwright": "text=Diseño Individual", "css": "button:has-text('Diseño Individual'), button:has-text('Individual Central')", "xpath": "//button[contains(normalize-space(.), 'Diseño Individual') or contains(normalize-space(.),'Individual Central')]", "page": "studio" }, { "id": "studio.leave_link", "description": "Link 'Salir del estudio' para cerrar la sesión del studio", "playwright": "text=Salir del estudio", "css": "a:has-text('Salir del estudio'), button:has-text('Salir del estudio')", "xpath": "//a[contains(normalize-space(.), 'Salir del estudio')] | //button[contains(normalize-space(.), 'Salir del estudio')]", "page": "studio" } ] }