pbi_validate_desktop_render
Automates visual verification of Power BI Desktop reports by capturing the actual window after an optional refresh, ensuring .pbip tables and matrices render with data instead of blank visuals.
Instructions
Abre un .pbip/.pbix y captura su ventana real sin depender del foco.
Es la comprobacion visual automatizable que complementa al validador
PBIR: espera el modelo, identifica la ventana por PID y hora de inicio,
y la renderiza con PrintWindow directamente a outputs/desktop_captures.
La captura no activa ni trae Desktop al frente, por lo que no puede
fotografiar por accidente otra ventana que tape el informe.
path (o pbip_path, el mismo nombre que devuelve pbi_session_info)
se puede omitir: entonces se usa el proyecto .pbip activo.
refresh=true es lo que hace que la captura signifique algo en un
.pbip: ese formato guarda la definicion, no los datos, asi que recien
abierto el modelo viene VACIO y las tablas y matrices salen en blanco
aunque el informe este perfecto. Con refresh se abre, se refresca, se
espera a que la ventana deje de repintar y se captura. Ese es tambien
el camino para fotografiar OTRA pagina con datos: page exige abrir el
proyecto, y al abrirlo hay que volver a refrescar.
Como el refresh modifica de forma irreversible el modelo en memoria,
refresh=true exige ademas confirm=true. confirm_reuse autoriza
mover una ventana que ya era del usuario; son autorizaciones distintas.
Pase lo que pase, la respuesta lleva data_loaded: si es false, la
captura no es representativa del informe, es la foto de un modelo sin
datos. Si no se pudo comprobar, se dice; no se afirma ninguna de las dos.
page: captura ESA pagina (id o nombre visible), no la que quedo
activa. fit_to_page (activado por defecto): fuerza la vista
"Ajustar a la pagina" para que salga el lienzo COMPLETO y no el tercio
superior al zoom guardado. Con el proyecto CERRADO (.pbip) ambos se
aplican como una vista temporal en disco que se restaura byte a byte
al terminar. Con la ventana YA ABIERTA -que es del usuario- se hacen
en la propia interfaz, pero SOLO con confirm_reuse=true: elegir una
pestaña y cambiar el zoom mueven esa ventana, y una captura que solo
debia observar no lo hace por su cuenta. Sin confirm_reuse, page
sobre una sesion abierta es un error y fit_to_page degrada a un
aviso (se captura al zoom actual). Con el, se elige la pestaña y el
zoom por UI Automation y se demuestra el resultado hasta donde se
puede (navigation): la pagina por el IsSelected de su pestaña; el
zoom solo por el nivel que anuncia Power BI, lo que prueba que el zoom
CAMBIO y no que el modo resultante sea "Ajustar a la pagina"
-verified_means lo dice en la propia respuesta-. Si la pagina no se
pudo demostrar, la tool falla en vez de capturar otra; si el zoom no
se pudo demostrar, lo dice en warnings. Nunca
toca pages.json de un proyecto abierto.
La captura separa cuatro señales que no son la misma cosa:
capture.identity_settled (la ventana muestra ESTE documento),
capture.frame_settled (la imagen dejo de cambiar), data_loaded
(el modelo tiene filas) y capture.frame_uniform (la imagen es casi
de un solo color: pagina vacia o visuales sin pintar).
capture.capture_representative resume las tres primeras.
Si la tool tuvo que abrir Desktop, lo cierra al terminar (tambien si la captura falla) y devuelve la seleccion de modelo a como estaba. Si el informe ya estaba abierto, reutiliza esa sesion y nunca cierra la ventana del usuario.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| path | No | ||
| confirm | No | ||
| refresh | No | ||
| timeout | No | ||
| pbip_path | No | ||
| request_id | No | ||
| reuse_open | No | ||
| fit_to_page | No | ||
| project_path | No | ||
| confirm_reuse | No | ||
| capture_timeout | No | ||
| refresh_timeout_seconds | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |