Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesUse Playwright’s screenshot-time style option to hide a chat widget only in the saved image. It injects CSS during capture, reaches Shadow DOM and inner frames, and leaves normal page behavior unchanged outside the screenshot. If you only need to cover pixels, use mask. With Cypress, hide the widget in test setup or through the vendor API; Cypress UI Coverage filters affect coverage reports, not screenshot pixels.
Choose the outcome before choosing a technique
“Hide the widget” can mean three different things. Decide which result your test requires:
| Goal | Best fit | What changes |
|---|---|---|
| Keep the application unchanged and omit the widget from one image | Playwright screenshot style |
CSS is injected only while the screenshot is taken |
| Cover a known rectangle in the artifact | Playwright mask |
A colored overlay hides matched locator boxes; the widget still exists |
| Prevent the widget from appearing to users or on selected pages | The vendor’s settings or JavaScript API | Actual widget visibility changes, potentially across other surfaces |
| Remove third-party controls from a coverage report | Cypress UI Coverage elementFilters |
Coverage accounting changes; screenshot pixels do not |
Do not make network blocking your default solution. Blocking a chat script can alter unrelated page behavior and produce a state users never see. Use it only when your test explicitly requires that dependency to be absent.
Playwright: hide the widget during capture
Screenshot-time CSS with style
Playwright’s Page API accepts a stylesheet in the screenshot call. The documented style option was added in Playwright v1.41. It pierces Shadow DOM and applies to inner frames, making it more reliable than editing only the top-level document.
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 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minute#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
- Inspect the page and identify a stable selector, frame title, or host element for the widget.
- Wait for the page state your test actually wants to capture.
- Pass CSS that hides the launcher and any already-open panel.
- Save the screenshot and keep the stylesheet local to that call.
import { test } from '@playwright/test';
test('capture without support chat', async ({ page }) => {
await page.goto('https://example.com', { waitUntil: 'networkidle' });
await page.screenshot({
path: 'page-without-chat.png',
fullPage: true,
style: `
#intercom-container,
iframe[title*="chat" i],
.support-chat-launcher,
[data-testid="chat-widget"] {
display: none !important;
visibility: hidden !important;
}
`
});
});
The selectors above are examples, not universal vendor selectors. Generated class names, iframes, and shadow roots can change between releases. Prefer a documented vendor hook or a stable data attribute owned by your application. If the widget loads after your initial navigation, wait for a known page condition before taking the image; otherwise the screenshot may race the launcher’s insertion.
Masking when covering pixels is acceptable
mask receives locators and paints an overlay over each match. It does not remove the element, stop its scripts, or change layout. Invisible elements are also masked unless your locator’s visibility matching is adjusted. Set a deliberate mask color if a default colored rectangle would make the artifact confusing.
await page.screenshot({
path: 'masked.png',
mask: [page.locator('#intercom-container')],
maskColor: '#ffffff'
});
Use masking for redaction or a fixed visual treatment. Use style when downstream image comparison must not include a chat-shaped box at all.
Full-page, element, and responsive captures
Apply the same screenshot options to full-page and viewport captures. For an element image, call the locator’s screenshot method and supply the stylesheet there. Set the viewport or device preset before navigation, because responsive breakpoints can change whether the launcher is present. If lazy content is part of the page, wait for the content your test considers complete before capture.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Cypress: separate screenshots from coverage reporting
Hide it in test setup
Cypress’s cy.screenshot() records the rendered page. To remove a widget from those pixels, use the vendor’s supported hide command, inject narrowly scoped CSS in setup, or remove the test fixture’s widget code. The screenshotOnRunFailure setting only controls whether failure screenshots are taken; it cannot hide one widget while preserving the rest of the image.
cy.visit('https://example.com', {
onBeforeLoad(win) {
const css = win.document.createElement('style');
css.textContent = `
#intercom-container,
iframe[title*="chat" i],
.support-chat-launcher { display: none !important; }
`;
win.document.documentElement.appendChild(css);
}
});
cy.screenshot('without-chat');
For an iframe or shadow-DOM widget, top-level CSS may not reach the embedded document. In that case, use the vendor API or a test fixture that renders the widget outside the capture.
UI Coverage filters are not screenshot filters
Cypress UI Coverage supports elementFilters for excluding third-party controls, including chat UI, from coverage calculations. The selector must match the interactive elements. For embeds inside an iframe or shadow DOM, the documented approach pairs a wildcard selector with documentScope. This cleans reporting noise; it does not alter screenshot composition.
Vendor APIs: change the real widget state
Zendesk Web Widget (Classic)
The Classic Web Widget Core API uses zE('webWidget', 'hide') to conceal all widget parts. Call show to restore the previous display state.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
zE('webWidget', 'hide');
// capture here
zE('webWidget', 'show');
This namespace is for Web Widget (Classic). Do not substitute it for the newer Messaging Web Widget API.
Zendesk Messaging Web Widget
Messaging uses zE('messenger', 'hide') and show. Hiding conceals both the messaging UI and launcher. close is different: it closes the messaging iframe but leaves the launcher visible, and open reverses that state.
zE('messenger', 'hide');
// capture here
zE('messenger', 'show');
Mixing the webWidget and messenger command pairs can produce no effect or an unexpected launcher.
Intercom Messenger
Intercom provides a Messenger setting to turn off launcher visibility and a programmatic hide_default_launcher key in the intercomSettings snippet. Launcher settings can also affect Messenger on the Help Center. If visibility should remain there, use a page display condition. Hiding the launcher does not necessarily close a panel that is already open, so test both states.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Complete removal versus suppression
If the widget must not exist at all, Zendesk’s guidance is to remove its source code. For screenshots on selected pages while retaining chat elsewhere, use page-level suppression or the appropriate hide API instead. Scope vendor changes carefully: unlike screenshot-time CSS, they can affect real visitors and multiple routes.
Reliable selectors and timing
- Prefer stable IDs, data attributes, documented APIs, or a vendor host element over generated classes.
- Inspect whether the control is rendered in an iframe, a shadow root, or both.
- Hide both the launcher and an open panel if either can appear in the capture.
- Wait for the application state that matters: a selector, a controlled delay, or network idle. Network idle alone does not guarantee a third-party widget has finished inserting itself.
- Keep screenshot-only CSS in the screenshot call or test hook so production behavior is unchanged.
- After hiding, assert that the expected locator is not visible when the test’s purpose is pixel cleanliness.
await expect(page.locator('.support-chat-launcher')).toBeHidden();
await page.screenshot({ path: 'clean.png', style: '.support-chat-launcher { display:none!important }' });
Common failures and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| The launcher remains | Selector is stale or matches a wrapper that is not visible | Inspect the live DOM, target a stable host, and hide the panel and launcher separately |
| CSS works in the page but not in the screenshot | Style was injected into the wrong document or the Playwright version predates v1.41 | Upgrade Playwright; use screenshot style, which reaches Shadow DOM and inner frames, or use the vendor API |
| A colored rectangle appears | mask overlays pixels rather than removing the element |
Use style for true visual omission, or set an intentional maskColor |
| Zendesk command has no effect | Classic and Messaging namespaces were mixed | Use webWidget for Classic and messenger for Messaging; pair hide/show or close/open correctly |
| Cypress coverage is clean but image is not | elementFilters changes reporting only |
Hide the widget in setup or through its API before calling cy.screenshot() |
| Widget flashes into the image | Capture raced asynchronous insertion | Wait for a deterministic application condition, then verify hidden state immediately before capture |
| Help Center chat disappeared unexpectedly | Intercom launcher setting applies to Help Center too | Add a page display condition or limit suppression to the routes used for screenshots |
Or skip the browser setup
ScreenshotNeo is a screenshot API and MCP server. One request returns a PNG, JPEG, WebP, or PDF, and its clean-shot pipeline accepts consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing result.
Use the API directly (see the ScreenshotNeo documentation):
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}`);
ScreenshotNeo also offers an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The Free plan includes 1,000 screenshots per month without a card; paid plans start at $5 for 3,000 shots. Every feature is available on every plan. Create a free ScreenshotNeo account.
Performance, reliability, and cost considerations
- Screenshot-time CSS adds negligible page work compared with loading a third-party widget, while vendor APIs avoid selector maintenance but require the correct SDK state.
- Masking is predictable for a known locator, but its overlay becomes part of visual-regression output.
- Full-page screenshots can trigger additional lazy loading and therefore take longer than viewport captures. Wait for the content your test needs instead of relying on an arbitrary delay.
- Keep retries and timeouts explicit. A longer timeout can distinguish a slow page from a missing widget, but it cannot repair an incorrect selector.
- With ScreenshotNeo, cache hits and failed or unusable page states are identified in response headers and are not billed; choose a cache TTL when repeated captures do not need a fresh render.
FAQ
Does hiding a widget test the same page users see?
Screenshot-time CSS changes only the capture artifact. Vendor APIs and settings change the rendered experience, so use them when that behavior itself is under test.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Can I use Playwright masking to remove a widget from layout?
No. Masking paints over the matched box. It does not remove the element, stop its scripts, or reclaim its layout space.
Which Zendesk command should a new Messaging integration use?
Use the messenger namespace and keep its hide/show and close/open pairs distinct. The webWidget namespace belongs to Web Widget (Classic).
Will Cypress UI Coverage filters hide chat from my screenshot?
No. They exclude elements from coverage accounting. Hide the widget in setup or call its vendor API before cy.screenshot().
Frequently Asked Questions
Does hiding a widget test the same page users see?
Screenshot-time CSS changes only the capture artifact. Vendor APIs and settings change the rendered experience, so use them when that behavior itself is under test.
Can I use Playwright masking to remove a widget from layout?
No. Masking paints over the matched box. It does not remove the element, stop its scripts, or reclaim its layout space.
Which Zendesk command should a new Messaging integration use?
Use the messenger namespace and keep its hide/show and close/open pairs distinct. The webWidget namespace belongs to Web Widget (Classic).
Will Cypress UI Coverage filters hide chat from my screenshot?
No. They exclude elements from coverage accounting. Hide the widget in setup or call its vendor API before cy.screenshot().
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.

