DeviceCloud captures various artifacts during test execution that can help debug and analyze your test runs.
Each test run generates:
- Logs
- Screenshots, including the diff image from a failed
assertScreenshotcomparison - Videos
- Test reports
There are two ways to download artifacts: inline during a dcd cloud run, or on-demand after the fact using dcd artifacts.
Pass --download-artifacts directly to the cloud command and artifacts are downloaded automatically when the run completes:
# Download artifacts for all tests
dcd cloud app.apk flows/ --download-artifacts ALL
# Download artifacts for failed tests only
dcd cloud app.apk flows/ --download-artifacts FAILED
# Save to a custom path
dcd cloud app.apk flows/ --download-artifacts FAILED --artifacts-path ./failed.zipUse the dcd artifacts command to download artifacts or reports for any completed run by its upload ID. This is useful when tests were submitted with --async, or when you need to pull reports after the fact:
# Download a zip of all artifacts
dcd artifacts --upload-id <uuid> --download-artifacts ALL
# Download a JUnit report
dcd artifacts --upload-id <uuid> --report junit
# Download the HTML report
dcd artifacts --upload-id <uuid> --report html --html-path ./report.zipSee the dcd artifacts reference for the full flag list.
Each test result in the DeviceCloud console has a download menu with the files for that result: commands.json, the Maestro log, Maestro stdout and stderr, the logcat (Android), the HTML, JUnit and Allure reports (when the run generated them; Allure is deprecated and will be removed on 7 December 2026), the app binary (APK or APP build) and the workspace. Videos and screenshots are shown on the result page; to download them in bulk, use --download-artifacts or dcd artifacts.
Artifacts are downloaded as a zip file with one folder per test result, named after the result ID:
artifacts.zip
├── 4501/
│ ├── logs/
│ │ ├── login-maestro.log
│ │ ├── login-commands.json
│ │ └── ...
│ ├── screenshots/
│ └── videos/
│ └── login-recording.mp4
├── 4502/
│ ├── logs/
│ ├── screenshots/
│ └── videos/
└── report.xml # merged JUnit report covering every test in the upload
Files are named after the flow file (without its extension), e.g. login-maestro.log for login.yaml. The logs/ folder also holds stdout/stderr, the device log (-logcat.zip on Android, -ios-device-log.zip on iOS) and any per-flow reports. With --download-artifacts FAILED, only failed tests get a folder, but report.xml is always included and still covers every test.
When --retry reruns a flow, every attempt gets its own result-ID folder, so the failed attempt's screenshots and video are in the zip even if a retry passed. report.xml covers only the final attempt of each flow.
App binaries and workspaces are deleted 1 month after they were last used. Test results, their artifacts (logs, screenshots and videos) and the environment variables passed with --env are kept for 6 months.