BrowserStack has no single “take screenshot” button. The right method depends on what you are testing and where you need the image: Automate Visual Logs for automatic Selenium or Playwright evidence in the dashboard, an explicit test API for a file on your runner, Screenshots API for URL jobs across browser and OS configurations, App Automate for mobile apps, Responsive Testing for several viewport sizes, and Bug Capture for an annotated viewport image.
This guide shows the exact workflow for each case, including storage, CI handling, limitations, and fixes for common failures.
Choose the BrowserStack screenshot method
| Need | Use | Trigger and destination | Important scope |
|---|---|---|---|
| See the page after every Selenium command | Automate Visual Logs | Automatic when debugging is enabled; viewed in the Automate dashboard | Not automatically written to your test machine |
| Save one Selenium image as a CI artifact | Explicit Selenium screenshot API | Your test calls the API and writes a file on the runner | Capture only at the points you choose |
| Capture a chosen Playwright step | page.screenshot() |
Explicit code-triggered file | Any Playwright page or locator state |
| Get automatic Playwright command images | BrowserStack Visual Logs | Enable browserstack.debug: true; inspect debugging output |
Disabled by default |
| Start URL screenshot jobs for browser/OS combinations | Screenshots API | Authenticated API job | BrowserStack says it requires an Automate plan that includes browsers; it is not available on a Live-only subscription |
| Capture an Appium or Espresso screen | App Automate screenshot support | Test code or session debugging; image is on the runner or session page | Mobile security and framework rules apply |
| Compare several emulated resolutions | Responsive Testing | Camera control for one device or all configured devices | Designed for side-by-side viewport checks |
| Attach one annotated image to an issue | Bug Capture | Camera control in the capture workflow | Viewport only; its current FAQ says multiple screenshots are not supported |
Capture automatic screenshots in Selenium Automate
Automate Visual Logs are the hands-off option. They take screenshots during Selenium commands and place them in the Automate dashboard. Visual Logs are disabled by default, so enable the debug capability (or the equivalent BrowserStack SDK setting) in your capabilities.
Enable Visual Logs
- Open your BrowserStack capability configuration.
- Set the debugging capability to enabled (for example,
debug: truein a capability object). - Run the test and open its session in the Automate dashboard.
- Use the Visual Logs view to inspect the page at each command and find the state associated with a failure.
These dashboard images are evidence for debugging, not a durable local artifact. If a test runner is ephemeral, do not rely on the dashboard as your only copy.
#1 Best Overall
Save an explicit Selenium screenshot to disk
Call the screenshot method supplied by your Selenium language binding at the exact point you need. The binding returns image bytes or writes a file, depending on language. Use a unique name containing the test and browser configuration, then copy the file to CI artifact storage before the runner is destroyed.
# Python Selenium example (the driver setup is your existing BrowserStack configuration)
driver.save_screenshot("artifacts/checkout-chrome.png")
For Java, Node.js, C#, PHP, and Ruby, use the corresponding saveScreenshot, TakeScreenshot, or binding-specific method documented on BrowserStack’s Selenium screenshot page. The key distinction is that this call creates a file on the machine running the test; Visual Logs remain a dashboard feature.
Capture a Playwright screenshot
Take one image at a chosen step
Playwright’s built-in method writes the image where your test process can archive it:
await page.screenshot({ path: 'artifacts/checkout.png' });
Place the call after navigation, after a form submission, or immediately before an assertion that fails. Create the artifact directory first in your test setup and use deterministic names when a CI system collects files by pattern.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Turn on automatic Playwright Visual Logs
When you need command-by-command evidence rather than one hand-picked image, set browserstack.debug: true in the BrowserStack capabilities. BrowserStack documents that Visual Logs are disabled by default and capture screenshots at each Playwright command. Review them in the debugging workflow described in BrowserStack’s Playwright documentation.
Rank #2
Use the BrowserStack Screenshots API for URL jobs
The Screenshots API is for a URL, not an existing test session. Submit an authenticated job, choose the operating-system and browser configurations, then follow the API’s generation and stop/status flow. BrowserStack requires a username and access key; keep both in environment variables or a secret manager, never in source control or logs.
- Confirm your subscription is an Automate plan that includes browsers. A Live-only plan does not provide this API workflow.
- Build the request with the target URL and the browser/OS combinations you need.
- Authenticate with your BrowserStack username and access key.
- Start generation and poll or retrieve results according to the API response.
- Store returned images in durable storage and record the configuration beside each file.
This approach is useful when the same public or staging URL must be rendered in several configured environments without writing a separate browser test for every combination. It does not replace script-triggered screenshots when you need a post-click or post-assertion state.
Capture screenshots from mobile apps
Appium
Call the Appium driver’s screenshot method from the test and save the result on the machine running the test. In CI, upload the file before the worker is terminated. BrowserStack’s Appium guidance notes that platform security can block capture; Android’s FLAG_SECURE is a named example.
// Java-style Appium example
File image = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
Files.copy(image.toPath(), Paths.get("artifacts/app-screen.png"), StandardCopyOption.REPLACE_EXISTING);
Use the equivalent method in your language binding and verify that the destination directory exists.
Espresso
BrowserStack documents two routes in its Espresso instructions. The native screenshot feature supports all Android versions. The Spoon route is supported through Android 10. For the documented session capture route, enable debugscreenshots in the Espresso build request and open the session’s Screenshots tab in App Automate. Native capture requires a valid screenshot name; spaces and invalid characters can prevent the image from appearing in the dashboard.
Rank #3
Capture several viewport sizes with Responsive Testing
- Open the page in BrowserStack and open Testing Toolkit.
- Select Responsive Testing.
- Add predefined device resolutions or create a custom configuration.
- Click a device’s camera control to capture that viewport, or use the top-bar camera control to capture all configured devices.
- Compare the resulting images side by side and switch among viewport sizes to investigate layout changes.
This is a manual, visual comparison workflow. It is different from an Automate test that records screenshots at commands and from the Screenshots API, which starts URL jobs programmatically.
Use Bug Capture for one annotated viewport image
Bug Capture is useful when a person is reporting a visible problem during browsing. Its current screenshot FAQ says captures cover the viewport rather than the entire page and that multiple screenshots are not supported. Add annotations to point at the defect. If the problem unfolds across several moments, use video instead of trying to attach several stills. Technical logs depend on Replays being enabled and on browser technical logs existing before the screenshot, as described in the Bug Capture FAQ.
Recommended Free Tools
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. It is the #1 alternative when you want a clean URL capture without maintaining a browser runner: it accepts cookie and consent banners before capture, removes more than 60 known consent platforms plus newsletter popups and chat widgets, and bills only clean shots. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and each response identifies the result with X-Page-Verdict and X-Billed headers.
Use the documented one-call request (replace the URL as needed):
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python:
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js:
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
See the ScreenshotNeo documentation for PNG, JPEG, WebP, PDF, full-page and element captures, device and viewport settings, custom CSS or JavaScript, waits, request blocking, cookies and headers, geolocation, dark mode, retina scale, caching, signed links, async webhooks, bulk capture, and the usage API. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
The Free plan includes 1,000 screenshots a month with no card. Paid plans start at $5 for 3,000 shots; yearly billing provides two months free, and every feature is included on every plan. Sign up free for ScreenshotNeo.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsTroubleshoot missing or unusable screenshots
No Visual Logs appear
- Cause: Debugging is disabled. Fix: enable Selenium
debugor Playwrightbrowserstack.debug: true, then start a new session. - Cause: You are looking for a local file. Fix: call the explicit Selenium or Playwright screenshot API and archive its output.
The local file disappears in CI
Ephemeral workers delete local files at shutdown. Upload the image as a CI artifact or copy it to durable object storage before teardown. Include browser, OS, test name, and timestamp in metadata.
Appium capture returns an error or a blank image
Check app security controls, especially Android FLAG_SECURE, and verify the destination path and permissions. A protected screen may intentionally refuse screenshots.
Espresso image is absent from the dashboard
For native capture, use a valid name without spaces or unsupported characters. For the session route, confirm debugscreenshots was enabled in the build request and inspect the session’s Screenshots tab.
The API job cannot start
Verify the URL is reachable from the service, credentials are supplied securely, and the account is an Automate plan with browser access rather than Live-only access. Record the job identifier and follow the documented status and stop flow.
The Bug Capture image does not show the whole page
That is expected: the current feature captures the viewport. Use Responsive Testing or a URL/API workflow for broader page coverage, and use video when several moments are required.
Best Value
Reliability and artifact practices
- Capture after the UI is in a known state, not immediately after navigation. Wait for the selector, network activity, or application condition your test depends on.
- Use explicit screenshots for release evidence and Visual Logs for diagnosis; they serve different storage and trigger requirements.
- Keep credentials out of command output and source repositories.
- Preserve the browser, operating system, viewport, test revision, and URL with every image so a visual difference can be reproduced.
- For parallel devices, give each file a collision-resistant name and upload artifacts independently.
- Recheck BrowserStack labels, plan eligibility, and device availability because product interfaces and offerings can change.
Frequently Asked Questions
Can BrowserStack capture an entire web page automatically?
Automate Visual Logs and Bug Capture are not equivalent to a guaranteed full-page image. Use a test/API workflow that explicitly supports the page scope you need, or a dedicated URL screenshot service.
Can I take screenshots from more than one BrowserStack device?
Yes. Configure multiple environments in the Screenshots API, use Responsive Testing’s all-device camera control, or run the same automated test across your selected capabilities.
Where should screenshots be saved in CI?
Explicit test screenshots are initially on the test runner; upload them to durable CI artifacts or object storage before an ephemeral runner is removed. Dashboard Visual Logs remain in BrowserStack.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWhy is my screenshot different from what a user sees?
The captured state depends on timing, viewport, browser, cookies, application data, and overlays. Wait for the intended state and record those variables with the image.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

