{"id":47668678,"url":"https://github.com/roberto22palomar/pepenium","last_synced_at":"2026-04-02T12:12:03.246Z","repository":{"id":332180000,"uuid":"1121667465","full_name":"roberto22palomar/pepenium","owner":"roberto22palomar","description":"Pepenium is a Java-based test automation framework for mobile applications (Android / iOS) and web, built on top of Appium and Selenium. Allows to execute in device farms as Browserstack or AWS Device Farm with the same code. Including web responsive.","archived":false,"fork":false,"pushed_at":"2026-03-30T11:05:08.000Z","size":529,"stargazers_count":2,"open_issues_count":10,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-30T12:11:06.180Z","etag":null,"topics":["android-testing","appium","automation","aws-device-farm","browserstack","ci-cd","framework","ios-testing","java","mobile-testing","qa","selenium","test-automation"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/roberto22palomar.png","metadata":{"files":{"readme":"README.es.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-23T11:00:23.000Z","updated_at":"2026-03-30T11:05:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/roberto22palomar/pepenium","commit_stats":null,"previous_names":["roberto22palomar/pepenium"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/roberto22palomar/pepenium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roberto22palomar%2Fpepenium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roberto22palomar%2Fpepenium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roberto22palomar%2Fpepenium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roberto22palomar%2Fpepenium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roberto22palomar","download_url":"https://codeload.github.com/roberto22palomar/pepenium/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roberto22palomar%2Fpepenium/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31216354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-30T15:24:02.938Z","status":"ssl_error","status_checked_at":"2026-03-30T15:23:44.804Z","response_time":138,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-testing","appium","automation","aws-device-farm","browserstack","ci-cd","framework","ios-testing","java","mobile-testing","qa","selenium","test-automation"],"created_at":"2026-04-02T12:12:02.581Z","updated_at":"2026-04-02T12:12:03.239Z","avatar_url":"https://github.com/roberto22palomar.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/roberto22palomar/pepenium/actions/workflows/ci-build.yml\"\u003e\n    \u003cimg alt=\"Build\" src=\"https://github.com/roberto22palomar/pepenium/actions/workflows/ci-build.yml/badge.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/roberto22palomar/pepenium/actions/workflows/ci-build.yml\"\u003e\n    \u003cimg alt=\"Coverage\" src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/roberto22palomar/pepenium/coverage-badge/.github/badges/coverage.json\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg alt=\"License\" src=\"https://img.shields.io/badge/License-MIT-green.svg\" /\u003e\n  \u003c/a\u003e\n  \u003cimg alt=\"Java\" src=\"https://img.shields.io/badge/Java-11-blue.svg\" /\u003e\n  \u003cimg alt=\"Maven\" src=\"https://img.shields.io/badge/Maven-3.x-orange.svg\" /\u003e\n  \u003cimg alt=\"JUnit\" src=\"https://img.shields.io/badge/JUnit-5-purple.svg\" /\u003e\n  \u003cimg alt=\"Selenium\" src=\"https://img.shields.io/badge/Selenium-4-43B02A.svg\" /\u003e\n  \u003cimg alt=\"Appium Client\" src=\"https://img.shields.io/badge/Appium%20Client-10-00BFFF.svg\" /\u003e\n\u003c/p\u003e\n\n# Pepenium\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e |\n  \u003cstrong\u003eEspanol\u003c/strong\u003e\n\u003c/p\u003e\n\nPepenium es un framework de automatizacion en Java para Android, iOS y Web construido sobre Appium, Selenium y JUnit 5.\n\nLa direccion actual del proyecto es simple de entender y practica de ejecutar: los tests declaran un target funcional, los execution profiles deciden donde corren y el framework se encarga del ciclo de vida de sesion, el logging y el diagnostico de fallos.\n\n## Empieza Aqui\n\nSi eres nuevo en el proyecto, empieza por [START-HERE.es.md](docs/es/START-HERE.es.md).\n\nPrimeros pasos recomendados:\n\n1. Ejecuta `mvn -q -DskipTests test-compile`\n2. Ejecuta el showcase web desktop para tener tu primer exito real\n3. Pasa a Android solo cuando la ruta web ya funcione\n\nFicheros de entorno listos para copiar:\n\n- [`.env.web.example`](.env.web.example)\n- [`.env.android.host-emulator.example`](.env.android.host-emulator.example)\n- [`.env.android.docker-emulator.example`](.env.android.docker-emulator.example)\n\n## Por Que Pepenium\n\n- Un test por target funcional, no un test por proveedor\n- Un modelo de ejecucion compartido para local, BrowserStack y AWS Device Farm\n- Lifecycle de driver y sesion centralizado en una unica factoria\n- Helpers reutilizables `Actions*` para Web, Android e iOS\n- Capturas pensadas para flujos rapidos sin screenshots borrosos\n- Logs mas limpios con contexto automatico y evidencia de fallo\n\nConsulta [START-HERE.es.md](docs/es/START-HERE.es.md) para el camino mas rapido al primer uso, [QUICK-START.es.md](docs/es/QUICK-START.es.md) para la guia mas completa y [CHANGELOG.md](CHANGELOG.md) para el historico de versiones.\nUsa [ENVIRONMENT.md](docs/ENVIRONMENT.md) como referencia central de variables de entorno y properties de runtime.\nUsa el `docker-compose.yaml` de la raiz si quieres ejecutar el servidor Appium local en Docker mientras el emulador Android sigue en el host.\nUsa [consumer-smoke/README.md](consumer-smoke/README.md) si quieres validar el consumo de la API publica desde un proyecto Maven separado.\n\nEl workflow principal de CI ejecuta `verify` sobre el framework y despues valida ese consumer smoke, de modo que los quality gates y el consumo externo queden comprobados de forma continua.\n\n## Calidad\n\n- El CI ejecuta `mvn verify` en cada push y pull request sobre `main`\n- La cobertura se agrega a partir de los reportes JaCoCo generados por `pepenium-core` y `pepenium-toolkit`\n- Checkstyle, SpotBugs y `japicmp` forman parte del camino normal de verificacion\n- El proyecto independiente `consumer-smoke` valida el consumo de la API publica fuera del reactor principal\n\r\n## Usar Pepenium Desde Otro Proyecto\n\nSi quieres consumir Pepenium desde otro proyecto Maven, la regla corta es:\n\n- usa `pepenium-toolkit` para proyectos normales de automatizacion\n- usa `pepenium` solo si quieres intencionadamente la capa core/runtime sin los helpers del toolkit\n- no anadas `pepenium-parent` en `\u003cdependencies\u003e` porque es el parent POM de Maven, no la dependencia normal para escribir tests\n\nDependencia tipica de consumo:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.roberto22palomar\u003c/groupId\u003e\n    \u003cartifactId\u003epepenium-toolkit\u003c/artifactId\u003e\n    \u003cversion\u003e0.9.4\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\r\nPor que `pepenium-toolkit` suele ser el punto de entrada correcto:\n\r\n- es el artefacto contra el que la mayoria de usuarios externos querran construir\r\n- te da `ActionsWeb`, `ActionsApp`, `ActionsAppIOS`, `AssertionsWeb`, `AssertionsApp` y `AssertionsAppIOS`\r\n- arrastra transitivamente el core/runtime, asi que sigues teniendo `BaseTest` y `TestTarget` sin cablear ambas capas a mano\r\n\r\nSi quieres un ejemplo concreto de consumidor, mira [consumer-smoke/README.md](consumer-smoke/README.md).\n\n## Autoria Plug and Play\n\nPepenium recomienda ahora un estilo de autoria basado en anotaciones para que el framework se sienta lo mas plug and play posible.\n\nForma tipica:\n\n```java\n@PepeniumTest(target = TestTarget.WEB_DESKTOP)\nclass LoginTest {\n\n    @PepeniumInject\n    private WebDriver driver;\n\n    @PepeniumInject\n    private LoginFlow flow;\n\n    @Test\n    void loginWorks() {\n        driver.get(\"https://the-internet.herokuapp.com/login\");\n        flow.runSuccessfulLogin(\"tomsmith\", \"SuperSecretPassword!\");\n    }\n}\n```\n\nEse estilo recomendado soporta:\n\n- `@PepeniumTest` en lugar de extender `BaseTest`\n- `@PepeniumInject` para `WebDriver`, `DriverSession`, `Actions*`, `Assertions*`, pages y flows\n- `@PepeniumPage` junto con `@FindBy` de Selenium para page objects mas ligeros\n- inyeccion de `PepeniumSteps` para registrar pasos sin depender de herencia\n\n`BaseTest` sigue totalmente soportado como ruta clasica. La via basada en anotaciones pasa a ser la forma recomendada de uso de cara a `1.0.0`.\n\r\n## Reportes Nativos\r\n\r\nPepenium genera ahora un bundle nativo de reporting HTML y JSON listo para usar despues de cada ejecucion.\r\n\r\n![Vista previa del reporte de Pepenium](docs/assets/reporting-preview.svg)\r\n\r\nQue genera:\n\n- un `index.html` a nivel de suite\n- un `summary.json` a nivel de suite\n- un HTML por test\n- un JSON por test\n- screenshots enlazadas como evidencia cuando estan disponibles\n\nLos reportes HTML se tratan como diagnostico soportado y orientado al usuario. Los ficheros JSON estan disponibles y son utiles, pero su esquema sigue evolucionando y todavia no se promete como contrato publico versionado.\n\r\nDonde lo escribe por defecto:\n\n```text\ntarget/pepenium-reports/\n```\n\nPor que aporta valor:\n\n- puedes abrir un HTML limpio en vez de leer toda la consola\n- los fallos muestran execution story, diagnostic focus, badges de assertions y screenshots agrupadas\n- el indice de suite da tarjetas resumen, desglose por target/profile/provider e insights rapidos como los tests mas lentos\n- la consola imprime enlaces directos `file:///...` al reporte individual y al indice\n\nUsa [REPORTING.es.md](docs/es/REPORTING.es.md) para la guia especifica de reporting y sus opciones de configuracion.\n\n## Que Aporta La Linea Actual 0.9.x\n\n- Quality gates reales de Maven con Enforcer, JaCoCo, Checkstyle y SpotBugs\n- Un camino de `verify` mas fuerte en CI para comprobar higiene de libreria de forma continua\n- Metadata y packaging orientados a release con sources y Javadocs\n- Workflows dedicados de preflight y publicacion por tag para release\n- Comprobacion de compatibilidad de API publica y validacion mas fuerte de consumer smoke\n- Endurecimiento de `core`, `toolkit`, execution profiles y reporting\n\r\n## Arquitectura Actual\n\nModulos del repositorio:\n\n- `pepenium-core`: motor del framework, runtime, ejecucion y configuracion de providers\n- `pepenium-toolkit`: helpers reutilizables para quien escribe tests, como acciones y utilidades de soporte\n- `pepenium-examples`: tests, flows y page objects de ejemplo de uso interno del repositorio, construidos sobre `pepenium` y `pepenium-toolkit`\n\r\n### `core`\n\nPiezas de runtime y ejecucion del framework:\n\n- `PepeniumTest`\n- `PepeniumInject`\n- `PepeniumPage`\n- `PepeniumSteps`\n- `BaseTest`\n- `DriverConfig`\n- `DriverRequest`\n- `DriverSession`\n- `DriverSessionFactory`\n- `DefaultDriverSessionFactory`\n- `ExecutionProfile`\n- `ExecutionProfiles`\n- `ExecutionProfileResolver`\n- `FailureContextReporter`\n- `LoggingContext`\n- `PepeniumBanner`\n- `StepTracker`\n- `TestTarget`\n- `core/config/browserstack`: modelos de configuracion de BrowserStack\n- `core/config/yaml`: loaders YAML para catalogos de BrowserStack\n\nLos builders de request especificos de proveedor viven actualmente en:\n\n- `core/configs/local`\n- `core/configs/browserstack`\n- `core/configs/aws`\n\n### `toolkit`\n\nBloques reutilizables:\n\n- `toolkit/actions`: `ActionsWeb`, `ActionsApp`, `ActionsAppIOS`\n- `toolkit/assertions`: `AssertionsWeb`, `AssertionsApp`, `AssertionsAppIOS`\n- `toolkit/support`: helpers reutilizables de settle y scroll\n\n### `examples`\n\r\nTests de ejemplo que muestran el patron de uso previsto:\n\n- `pepenium-examples/src/test/java/.../tests/myProjectExample/android`\n- `pepenium-examples/src/test/java/.../tests/myProjectExample/ios`\n- `pepenium-examples/src/test/java/.../tests/myProjectExample/web`\n\nAhora los examples estan agrupados por target funcional y no por entorno.\nEste modulo es intencionadamente solo para el repositorio: no es un artefacto de consumo publicado ni forma parte del contrato de compatibilidad de la API publica.\n\r\n## Modelo de Ejecucion\n\nLa forma recomendada es declarar el `TestTarget` mediante `@PepeniumTest`:\n\n```java\n@PepeniumTest(target = TestTarget.ANDROID_NATIVE)\npublic class ExampleAndroidNativeTest {\n\n    @PepeniumInject\n    private ExampleAndroidShowcaseFlow flow;\n}\n```\n\nLa forma clasica con `BaseTest` sigue estando soportada si un equipo prefiere autoria basada en herencia.\n\nEn runtime, Pepenium resuelve un execution profile:\n\n- desde `-Dpepenium.profile=...`\n- o desde `PEPENIUM_PROFILE`\n- o desde el perfil por defecto del target cuando existe\n- con la metadata de perfiles cargada desde `pepenium-core/src/main/resources/execution-profiles.yml`\n\nEso permite ejecutar el mismo test en varios entornos sin tocar su codigo.\n\n## Targets Soportados\n\n- `ANDROID_NATIVE`\n- `ANDROID_WEB`\n- `IOS_NATIVE`\n- `IOS_WEB`\n- `WEB_DESKTOP`\n\n## Execution Profiles Incluidos\n\n- `local-android`\n- `local-android-web`\n- `local-web`\n- `local-web-firefox`\n- `local-web-edge`\n- `aws-android`\n- `aws-android-web`\n- `aws-ios`\n- `browserstack-android`\n- `browserstack-android-web`\r\n- `browserstack-ios`\r\n- `browserstack-ios-web`\r\n- `browserstack-windows-web`\r\n- `browserstack-mac-web`\n\nEl catalogo de perfiles incluido se define en:\n\n- `pepenium-core/src/main/resources/execution-profiles.yml`\n\nLos ids de perfil forman parte del contrato soportado de lanzamiento. Los valores internos de `configKey` que hay detras de ese catalogo siguen siendo detalles internos del framework y pueden evolucionar antes de `1.0.0`.\n\r\n## Tests de Ejemplo\n\n- Android nativo: [ExampleAndroidNativeTest.java](pepenium-examples/src/test/java/io/github/roberto22palomar/pepenium/tests/myProjectExample/android/ExampleAndroidNativeTest.java)\n- Android web: [ExampleAndroidWebTest.java](pepenium-examples/src/test/java/io/github/roberto22palomar/pepenium/tests/myProjectExample/android/ExampleAndroidWebTest.java)\n- iOS nativo: [ExampleIOSNativeTest.java](pepenium-examples/src/test/java/io/github/roberto22palomar/pepenium/tests/myProjectExample/ios/ExampleIOSNativeTest.java)\n- iOS web: [ExampleIOSWebTest.java](pepenium-examples/src/test/java/io/github/roberto22palomar/pepenium/tests/myProjectExample/ios/ExampleIOSWebTest.java)\n- Web desktop: [ExampleDesktopWebTest.java](pepenium-examples/src/test/java/io/github/roberto22palomar/pepenium/tests/myProjectExample/web/ExampleDesktopWebTest.java)\n\n### Showcase Web Funcional\n\nLos ejemplos web ahora son examples funcionales reales sobre [The Internet](https://the-internet.herokuapp.com/), no solo plantillas de estructura.\n\nEl modulo `pepenium-examples` esta pensado como showcase ejecutable dentro de este repositorio. Sus tests son opt-in y permanecen desactivados por defecto en los builds normales del reactor.\n\r\nEl showcase actual de desktop/mobile-web demuestra:\n\n- ejecucion por profile reutilizando la misma clase de test\n- uso de `ActionsWeb` y `AssertionsWeb`\n- trazabilidad semantica con `StepTracker`\n- screenshots como evidencia\n- page objects y orquestacion mediante flows\n- un flujo publico real de varias pantallas:\n  - login\n  - validacion del area segura\n  - interaccion con dropdown\n  - validacion de estados en checkboxes\n  - navegacion al example de add/remove elements\n\nValores por defecto del example funcional:\n\n- `PEPENIUM_BASE_URL=https://the-internet.herokuapp.com/login`\n- `PEPENIUM_WEB_USERNAME=tomsmith`\n- `PEPENIUM_WEB_PASSWORD=SuperSecretPassword!`\n\nPuedes ejecutar el showcase desktop web con:\n\n```text\nmvn -pl pepenium-examples -am \"-Dpepenium.examples.skip.tests=false\" \"-Dpepenium.excludedTags=\" \"-Dtest=ExampleDesktopWebTest\" \"-Dsurefire.failIfNoSpecifiedTests=false\" test\n```\n\n### Showcase Template De Android Nativo\n\nEl ejemplo Android nativo queda ahora planteado como un showcase template mas serio, no como un example funcional contra una app publica.\n\nEse showcase Android pone el foco en:\n\n- pasos semanticos mediante `StepTracker`\n- uso reutilizable de `ActionsApp` y `AssertionsApp`\n- limites de carga de pagina explicitos\n- screenshots como evidencia\n- un flujo corto pero representativo de busqueda y bottom navigation, pensado para adaptarse a una app real\n\nAsi el ejemplo Android sigue siendo honesto y util sin depender de una app publica de terceros que no sea lo bastante estable como carta de presentacion oficial del framework.\n\n### Showcase Template De iOS Nativo\n\nEl ejemplo iOS nativo sigue la misma estrategia que Android nativo: queda planteado como un showcase template mas serio, no como un example funcional contra una app publica.\n\nEse showcase iOS pone el foco en:\n\n- pasos semanticos mediante `StepTracker`\n- uso reutilizable de `ActionsAppIOS` y `AssertionsAppIOS`\n- limites de carga de pagina explicitos\n- screenshots como evidencia\n- un flujo corto pero representativo de busqueda y bottom navigation, pensado para adaptarse a una app real\n\nAsi el ejemplo iOS queda alineado con Android y deja una historia mas coherente para la parte mobile del framework.\n\n## Ejecucion Desde el IDE\n\nEl flujo recomendado es:\n\n1. Mantener un test por target.\n2. Crear una run configuration del IDE por cada execution profile que te interese.\n3. Apuntar todas esas configuraciones a la misma clase de test.\n\nEjemplo para un mismo test Android nativo:\n\n- `Android Native - Local`\n- `Android Native - BrowserStack`\n- `Android Native - AWS`\n\nCada run configuration solo cambia `pepenium.profile`.\n\nAsi consigues ejecucion de un click sin editar el test.\n\n## Ejecucion Local\n\n### Android Nativo\n\nPerfil por defecto de `ANDROID_NATIVE`: `local-android`\n\nVariables utiles:\n\n```text\nAPPIUM_URL=http://localhost:4723\nANDROID_UDID=emulator-5554\nANDROID_DEVICE_NAME=Android Device\nAPP_PATH=C:\\ruta\\app.apk\nAPP_PACKAGE=com.example.app\nAPP_ACTIVITY=com.example.MainActivity\n```\n\nAppium dockerizado con emulador en host:\n\n```text\ndocker compose up -d appium\nAPPIUM_URL=http://localhost:4723\nANDROID_UDID=host.docker.internal:5555\nANDROID_DEVICE_NAME=Android Emulator\n```\n\nStack experimental totalmente dockerizado con emulador:\n\n```text\ndocker compose -f docker-compose.yaml -f docker-compose.emulator.yaml up -d\nAPPIUM_URL=http://localhost:4723\nANDROID_UDID=android-emulator:5555\nANDROID_DEVICE_NAME=Android Emulator\n```\n\nEsta modalidad de emulador queda como experimental y encaja mejor en Linux o en Windows 11 + WSL2 cuando `/dev/kvm` esta disponible.\n\n### Android Web\n\nPerfil por defecto de `ANDROID_WEB`: `local-android-web`\n\nVariables utiles:\n\n```text\nAPPIUM_URL=http://localhost:4723\nANDROID_UDID=emulator-5554\nANDROID_DEVICE_NAME=Android Device\nPEPENIUM_BASE_URL=https://example.com\n```\n\n### Web Desktop\n\nPerfil por defecto de `WEB_DESKTOP`: `local-web`\n\nVariables utiles:\n\n```text\nPEPENIUM_BASE_URL=https://the-internet.herokuapp.com/login\nPEPENIUM_WEB_USERNAME=tomsmith\nPEPENIUM_WEB_PASSWORD=SuperSecretPassword!\n```\n\n## BrowserStack y AWS\n\nLos perfiles de BrowserStack se apoyan en los YAML de ejemplo de:\n\r\n- `pepenium-core/src/main/resources/browserstackExamples/browserstackAndroid.yml.example`\n- `pepenium-core/src/main/resources/browserstackExamples/browserstackAndroidWEB.yml.example`\n- `pepenium-core/src/main/resources/browserstackExamples/browserstackIOS.yml.example`\n- `pepenium-core/src/main/resources/browserstackExamples/browserstackIOSWEB.yml.example`\n- `pepenium-core/src/main/resources/browserstackExamples/browserstack.yml.example`\n\nLas credenciales reales de BrowserStack no deben vivir en `src/main/resources`.\nUsa `.pepenium/browserstack/` para los YAML reales locales, o pasa una ruta externa explicita.\nLos ficheros de `browserstackExamples` son solo templates seguros y fallback de ejemplo.\n\nLos perfiles de AWS Device Farm siguen el mismo modelo de `TestTarget` que el resto del framework, mientras que los examples del repositorio se mantienen como material showcase local y no como artefacto de consumo empaquetado.\n\r\nEl catalogo de execution profiles ahora esta externalizado en `pepenium-core/src/main/resources/execution-profiles.yml`, asi que los ids y descripciones disponibles se pueden consultar sin entrar al codigo Java.\n\n## Screenshots, Logging y Diagnostico de Fallos\n\nPepenium incluye:\n\n- `takeScreenshot()` para capturas mas seguras\n- `takeScreenshotFast()` para checkpoints mas ligeros\n- fallback al directorio temporal cuando `DEVICEFARM_SCREENSHOT_PATH` no esta definido\n- un banner ASCII de Pepenium al arrancar una sesion\n- logs compactos con profile, target, driver y sesion corta\n- reporte automatico de fallo con screenshot y contexto de runtime\n- tracking de pasos recientes dentro del resumen de fallo\n\nEl contexto automatico de fallo incluye:\n\n- profile, target, driver y session id\n- URL y titulo en sesiones web\n- package, activity o contexto en sesiones mobile cuando estan disponibles\n- un resumen de capabilities en lugar de dumps crudos y ruidosos\n- los ultimos pasos del framework antes del fallo\n\nComportamiento del step tracking:\n\n- registra automaticamente operaciones comunes de `Actions*`\n- conserva solo los ultimos `10` pasos por defecto\n- se puede ajustar con `PEPENIUM_STEP_TRACKER_LIMIT` o `-Dpepenium.step.tracker.limit=...`\n- se puede enriquecer manualmente desde tests o flows con `step(\"Abrir buscador\")`\n\nSi necesitas mas detalle tecnico del framework, activa:\n\n```text\nPEPENIUM_DETAIL_LOGGING=true\n```\n\no:\n\n```text\n-Dpepenium.detail.logging=true\n```\n\n## Estado Actual\n\nPepenium ya es util para trabajo real de automatizacion. Se ha ejercitado contra flujos reales de apps Android, emuladores locales, caminos de configuracion remota y capas reutilizables de actions. La siguiente linea importante es seguir mejorando la preparacion como libreria reusable y los diagnosticos de mas alto nivel.\n\n## Documentacion\n\n- Quick start en ingles: [QUICK-START.md](docs/QUICK-START.md)\n- Quick start en espanol: [QUICK-START.es.md](docs/es/QUICK-START.es.md)\n- README en ingles: [README.md](README.md)\n- Referencia de entorno: [ENVIRONMENT.md](docs/ENVIRONMENT.md)\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froberto22palomar%2Fpepenium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froberto22palomar%2Fpepenium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froberto22palomar%2Fpepenium/lists"}