Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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

  1. Open your BrowserStack capability configuration.
  2. Set the debugging capability to enabled (for example, debug: true in a capability object).
  3. Run the test and open its session in the Automate dashboard.
  4. 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

  1. Confirm your subscription is an Automate plan that includes browsers. A Live-only plan does not provide this API workflow.
  2. Build the request with the target URL and the browser/OS combinations you need.
  3. Authenticate with your BrowserStack username and access key.
  4. Start generation and poll or retrieve results according to the API response.
  5. 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
// 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.

Capture several viewport sizes with Responsive Testing

  1. Open the page in BrowserStack and open Testing Toolkit.
  2. Select Responsive Testing.
  3. Add predefined device resolutions or create a custom configuration.
  4. Click a device’s camera control to capture that viewport, or use the top-bar camera control to capture all configured devices.
  5. 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot missing or unusable screenshots

No Visual Logs appear

  • Cause: Debugging is disabled. Fix: enable Selenium debug or Playwright browserstack.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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why 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.

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.