What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

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

To test touch input with Puppeteer, first emulate a mobile device or configure a mobile viewport, then use page.touchscreen to tap or perform a touch sequence. Set up emulation before navigating whenever possible. Use a locator instead when the test is about an element’s outcome rather than coordinate-based touch input.

Set up a mobile page before navigating

Mobile display configuration and touch input are separate steps: device emulation configures page metrics (and, for a device profile, the user agent); touchscreen methods send touch input. Puppeteer provides KnownDevices for named device profiles. Check that the profile name is available in your installed Puppeteer version, since the list can change. See the Page.emulate() reference and KnownDevices reference.

Use a known device profile

This example follows Puppeteer’s documented device-emulation pattern. Replace the URL or target device as needed:

import puppeteer, {KnownDevices} from 'puppeteer';

const browser = await puppeteer.launch();
try {
  const page = await browser.newPage();
  await page.emulate(KnownDevices['iPhone 17 Pro']);
  await page.goto('https://example.com');
  await page.touchscreen.tap(120, 240);
} finally {
  await browser.close();
}

page.emulate() applies the device’s viewport and user agent. Puppeteer advises emulating before navigation because some websites do not expect a phone’s size to change after they load. Refer to the official API documentation for the profile behavior.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Yojaro 4Pack Silicone Suction Phone Case Mount, Silicon Adhesive Smartphones Stand Sticky, Hands-Free Phone Accessories Holder for Selfies and Videos (Black & White & Translucent & Light Pink)
  • 【Strong Adsorption】The inspiration of the silicone phone suction case comes from the adhesive force of the octopus. Each suction cup phone mount is 3.15 inches long and 2.17 inches wide, with 24 independent suction cups providing a stronger and more stable suction force, so you don't have to worry about your phone falling during use.
  • 【Back of Phone Suction Grip】Remove the adhesive film on the phone suction cup and stick it on the phone case. You can then fix the phone on any smooth surface, which is very convenient. (The phone suction cup cannot be removed and reused after being attached to the phone case. It is recommended to attach it to a regular phone case, not a valuable one.)
  • 【Widely Used】Our non-slip silicone phone sticky grip mount attaches to almost any flat phone case and make it compatible with common mobile phones such as iPhone and Android.You can shoot, watch videos or video calls in the kitchen, gym, dance studio, bathroom and other places.
  • 【Capture the Wonderful Picture】Whether you are a TikTok creator or just like to share videos and photos, this phone suction cup can help you hands-free capture wonderful videos and photos for sharing with friends.
  • 【Note】You can fix the phone suction cup on a smooth surface such as a mirror or glass. If necessary, wipe the suction cup with a damp cloth to obtain stronger suction. Before releasing your hand, make sure the phone is firmly fixed. (Not applicable to rough walls, wooden surfaces, and other uneven surfaces)

Set a custom mobile viewport

When you need specific dimensions rather than a named profile, configure the viewport before loading the page:

const page = await browser.newPage();
await page.setViewport({
  width: 390,
  height: 844,
  deviceScaleFactor: 3,
  isMobile: true,
  hasTouch: true,
});
await page.goto('https://example.com');
await page.touchscreen.tap(120, 240);

The numbers illustrate the documented fields; they do not identify a required phone model. Width and height are CSS pixels. Puppeteer documents deviceScaleFactor, isMobile, isLandscape, and hasTouch in its Viewport interface. The defaults for device scale factor, mobile mode, and touch support are respectively 1, false, and false. Changing isMobile or hasTouch with setViewport() may reload the page, another reason to set them before navigation.

Rank #2
Apple EarPods Headphones with USB-C Plug, Wired Ear Buds with Built-in Remote to Control Music, Phone Calls, and Volume
  • SUPERIOR COMFORT — Unlike traditional circular ear buds, the design of EarPods is defined by the geometry of the ear. Which makes them more comfortable for more people than any other ear bud–style headphones.
  • HIGH-QUALITY AUDIO — The speakers inside EarPods have been engineered to maximize sound output and minimize sound loss, which means you get high-quality audio.
  • BUILT-IN REMOTE — EarPods with USB-C plug also include a built-in remote that lets you adjust the volume, control the playback of music and video, and answer or end calls with a pinch of the cord.
  • COMPATIBILITY — Works with all devices that have a USB-C port.
  • INTEGRATED MICROPHONE — A built-in microphone precisely captures your voice while you’re on the phone, taking a FaceTime call, or summoning Siri — so you’re always heard loud and clear.

Choose locator actions or touchscreen coordinates

Use a locator when the test asks whether a particular button or other element can be interacted with. Puppeteer’s locator interactions check readiness conditions such as viewport presence, visibility, enabled state, and bounding-box stability before acting. This is usually clearer than hard-coding coordinates for an element. See the page interactions guide.

Use page.touchscreen when the test needs to deliver touch input at a particular coordinate or exercise a low-level touch sequence. Coordinates are relative to the page’s viewport, so the viewport and target layout must match the test’s setup.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
PopSockets Adhesive Phone Grip, Holder- Black
  • Secure Hold: Our PopSockets adhesive phone grip gives your cell phone a secure, comfortable hold in hand to help prevent drops while texting, taking photos, or scrolling on the go. Designed to stick firmly to most phone cases and devices.
  • Hands-Free Made Easy: Easily turn your PopSocket into a phone stand to prop up your phone anywhere, perfect for watching videos, video calls, or following recipes. A must-have phone holder that keeps your device secure and ready for anything.
  • Compatibility: Works with all phones, tablets, and Kindles. Sticks best to smooth, hard plastic cases and may not adhere to silicone or textured cases. Easily swap your PopTop to change up your style.
  • Black PopSockets: Simple, refined, and endlessly versatile. A timeless essential for any phone.
  • Travel Must-Have for People On the Go: A must-have travel accessory for flights, flying, airports, air travel, airplanes, planes, international trips, cruises, and long travel days. Key gadget for your airport haul, travel accessories and must-haves.

Tap or send a touch sequence

Tap once

page.touchscreen.tap(x, y) dispatches a touchstart followed by a touchend at the supplied position. For example:

await page.touchscreen.tap(120, 240);

See Puppeteer’s Touchscreen API.

Control the start, movement, and end

For a lower-level interaction, start a touch, move it, and end it:

Rank #4
360° Rotating Stainless Steel Phone Tether Tab (Silvery 3-Pack) - Universal for iPhone & Other Phones (Fits Wristbands/Necklaces/Crossbody Straps)
  • [360 ° Flexible Rotation Design] Comes with a rotatable lanyard ring that supports 360 ° free rotation, effectively solving the problem of twisted and tangled lanyards
  • [Wide compatibility] The ultra-thin 0.02-inch design does not block the charging port at all, and both wired and wireless charging can be used directly without removing the pad. Compatible with most smartphones such as iPhone, compatible with various wristbands, lanyards, crossbody straps, and keychains
  • [Durable and Portable Material] Premium rust-resistant stainless steel material with good flexibility, which not only avoids scratching the phone case, but also has excellent anti rust and anti fading performance
  • [Multi scenario Practical] Paired with a lanyard or wristband, hands-free use can be achieved. The phone is within reach and not easily dropped, ideal for daily commuting and outdoor activities. Suitable for full coverage phone cases, does not support half coverage phone cases
  • [Quality Service] If you find any damage or other issues with the product upon receipt, please contact us immediately. We will handle it quickly
const touch = await page.touchscreen.touchStart(120, 240);
await page.touchscreen.touchMove(180, 240);
await page.touchscreen.touchEnd();

touchStart() returns a TouchHandle; touchMove() and touchEnd() operate on an active touch. A move call does not guarantee a corresponding DOM touchmove event: Chrome may throttle these events as an optimization. Do not assert that every API call produces exactly one event. Consult the Touchscreen API documentation when building event-level assertions.

Common problems and fixes

  • The page looks like desktop after navigation: configure the device profile or mobile viewport before page.goto(). A later change to mobile or touch flags may reload the page.
  • A coordinate tap misses the target: confirm the viewport dimensions and target position, then use an element locator if the test is about interacting with that element rather than testing coordinates.
  • A touch-move assertion fails intermittently: do not assume one touchmove DOM event per touchMove() call; browser optimization can throttle event dispatch.
  • A named profile is unavailable: check the KnownDevices list in the Puppeteer version installed by the project. The available names can change between versions.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

What browser emulation does—and does not—establish

Puppeteer documents browser device emulation and touch APIs, but those behaviors alone do not establish that emulation is equivalent to testing on a physical phone. Use emulation for repeatable browser checks; if a result depends on real-device hardware or operating-system behavior, verify it on the relevant physical device as well. The cited API pages span Puppeteer documentation versions 25.2.1 through 25.12.0, so check the documentation matching your installed version before relying on version-sensitive details.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Anteel 2 Pack Silicone Suction Cup Phone Case Mount Double Sided, Hands-Free Silicon Phone Grip with Higher Suction Power for Selfies and Videos, Non Slip Phone Accessories (LightPink&White)
  • 【PKYAA Double Sided Silicone Suction Phone Case Mount】PKYAA With Double Sided 40 Strong and Reliable individual suction cups, PKYAA provides a thicken and upgraded universal silicon suction mount for your phone.
  • 【Friendly to Content Creators】If you are a content creator or an online influencer, you can create videos anywhere with this suction mount completely hands free with this silicone cell phone mount for cases.
  • 【HANDS-FREE & Adhere to Mirrors】This Double Sided silicone suction phone case mount allows you to stick your phone to the mirror easily. No longer holding your phone in one hand to watch video tutorials while making up.
  • 【Strong Grip on the Smooth Surface】You can easily hang your phone anywhere with a smooth surface. All you do is you clean off your phone and smooth surface. It is STURDY and it not only sticks to mirrors, it also sticks to windows, it sticks to refrigerators, tiles and other clean, flat surfaces.
  • 【Press Down Firmly Every 30 Minutes】Use your palm or fingers to press the phone down firmly and check it's secure before letting go. Apply even pressure for a few seconds to allow the suction cup to adhere properly. To maintain the grip and prevent accidental falls, it's a good practice to periodically reapply pressure to the suction cup.

Or skip the browser setup

If the task is capturing a page rather than testing touch interactions, ScreenshotNeo can return a screenshot or PDF from one request. Its API accepts URLs and offers PNG, JPEG, or WebP screenshots and PDF output. It removes cookie and consent banners, newsletter popups, and chat widgets before capture; those cleanup steps can be turned off individually. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and the response identifies the page verdict and billing status in headers. ScreenshotNeo also has an MCP server with take_screenshot, get_page_info, and capture_pdf tools for AI agents.

For example, save a WebP capture of a page with cURL:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp

See the ScreenshotNeo API documentation for authentication and request options. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month—no card required.

Frequently Asked Questions

Does Puppeteer touchscreen tap require a touch-enabled viewport?

For mobile testing, configure touch support with a device profile or set hasTouch: true in the viewport before navigating.

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

Can I test a swipe with Puppeteer?

Use touchStart(), touchMove(), and touchEnd() for a low-level sequence; browser throttling means not every move call emits a DOM touchmove.

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.