The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Playwright Test uses worker processes to run UI tests concurrently. By default, separate test files can run in parallel, while tests in a file run in order in the same worker. Set a worker limit to control local or CI load, then make tests independent of shared server-side data: each test gets its own browser context, but that does not isolate accounts, records, or other backend state.
What a Playwright worker does
A worker is an operating-system process managed by Playwright Test. Each worker has its own browser, and workers do not communicate with one another. Playwright creates a separate BrowserContext for each test, which isolates browser-side state such as cookies and local storage. It does not isolate anything your tests mutate on a shared server, database, filesystem, or external service. See the Playwright parallelism documentation.
By default, Playwright runs test files in parallel and runs the tests within a file in order in one worker. If a worker fails, Playwright may restart it; tests that run afterward can therefore execute in a different process. Treat each test as independently runnable rather than relying on a particular worker or execution order.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsSet a worker limit
Use workers in the Playwright Test configuration to set a project-wide cap, or pass --workers on the command line. The API reference documents a default of half the logical CPU cores. That is a default, not a speed guarantee or a universally ideal setting; memory, application capacity, and shared test resources can limit useful concurrency. See configuration options and the TestConfig API.
#1 Best Overall
- BUILD, CODE & DRIVE YOUR OWN ROBOT CAR: Turn coding, electronics and engineering into a working programmable robot car you can assemble, program and drive; ideal for weekend family projects, STEM classrooms, coding clubs, robotics lessons and maker challenges
- EXPLORE FPV, LINE TRACKING & OBSTACLE AVOIDANCE: Control the robot with the ELEGOO app or IR remote, view live FPV video through the onboard camera, follow black lines, avoid obstacles with the ultrasonic sensor and explore multiple interactive driving modes
- BEGINNER-FRIENDLY BUILD WITH GUIDED WIRING: Keyed XH2.54 connectors help reduce wiring mistakes, while the illustrated tutorial and example programs guide beginners step by step from chassis assembly and module connection to programming and the first successful run
- GO BEYOND ASSEMBLY WITH CREATIVE CODING: Program with Arduino IDE to explore movement, sensors and control logic, then modify example code to create custom routes, reactions and robotics experiments that develop coding, problem-solving and engineering skills
- COMPLETE RECHARGEABLE STEM ROBOTICS KIT: Includes an ELEGOO UNO R3 controller board, ESP32-WROVER-based camera and Wi-Fi module, line-tracking and ultrasonic sensors, motors, IR remote and a 2000 mAh rechargeable lithium-ion battery; recommended for ages 8+ with adult guidance for first-time builders
Configure the cap in playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
workers: process.env.CI ? 2 : undefined,
// Other test settings go here.
});
This example explicitly caps CI at two workers and leaves the local setting to Playwright’s default. Choose a CI cap based on the runner and the constraints of the system under test, then measure your own suite. If you need a machine-relative limit, Playwright also accepts a percentage of logical CPU cores, such as workers: '50%'.
Override it for one run
npx playwright test --workers=4
npx playwright test --workers=50%
CLI settings are useful for comparing worker caps without editing configuration. Keep the same test selection and environment when comparing runs; a larger worker count can increase contention rather than reduce elapsed time.
Choose the right parallelism granularity
Worker count is only one control. Playwright also lets you choose which tests may run concurrently. The ordinary scheduling unit is the file: files can run in parallel, while tests inside each file remain ordered unless you opt into parallel execution. Parallel tests must not depend on shared in-memory setup or on another test having already run.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated 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 matchRun a describe group in parallel
import { test, expect } from '@playwright/test';
test.describe('independent account views', () => {
test.describe.configure({ mode: 'parallel' });
test('shows the account overview', async ({ page }) => {
await page.goto('/account');
await expect(page.getByRole('heading', { name: 'Account' })).toBeVisible();
});
test('shows notification settings', async ({ page }) => {
await page.goto('/account/notifications');
await expect(page.getByRole('heading', { name: 'Notifications' })).toBeVisible();
});
});
In parallel mode, tests in the group run independently and their hooks execute for each test; do not use a preceding test to prepare state for a later one. The tests above are only safe to run together if their account data and any writes they perform do not conflict.
Use fullyParallel when the whole suite is independent
export default defineConfig({
fullyParallel: true,
});
fullyParallel makes individual tests eligible for parallel scheduling across files, rather than keeping the file as the scheduling unit. Enable it only when tests can safely run in any order and at the same time. It also affects how work is balanced when the suite is sharded across machines.
Rank #2
- 35+ Guided Electronics Projects: Progress from LEDs and buttons to RFID access, real-time clocks, motion and distance sensing, environmental monitoring, motor control and interactive displays for STEM learning, coding clubs and maker projects
- More I/O and Memory for Larger Builds: The MEGA 2560 R3 provides 54 digital I/O pins, including 15 PWM outputs, 16 analog inputs, 4 hardware serial ports and 256 KB flash for projects that combine more sensors, controls and displays
- 200+ Components for Prototyping: Includes LCD1602, RC522 RFID, RTC, DHT11, HC-SR501 PIR, ultrasonic and water-level sensors, GY-521, MAX7219, keypad, joystick, rotary encoder, relay, SG90 servo, stepper motor, DC motor, breadboard and more
- Learn, Modify and Create: Follow 35+ guided lessons with example code, then adjust sensor thresholds, timing, display text, motor behavior and control logic to turn structured exercises into access systems, monitors, alarms and interactive projects
- Organized for Repeatable Learning: Pre-soldered modules, a solderless breadboard, storage case and small-parts box reduce setup time and keep sensors, LEDs, ICs, wires and other components easy to find between projects
Prevent state collisions
Browser-context isolation is not backend isolation. Two tests can have separate pages and cookies yet overwrite the same user profile, delete the same record, or compete for one inbox. Make the data each test changes unique, or deliberately serialize access to resources that cannot be made unique.
- Use unique backend records. Give each test its own user, order, or other mutable record. Include a run identifier and test identifier in generated names when useful, and remove test data in teardown where appropriate.
- Use unique output paths. Screenshots, downloads, traces, and generated files should have test-scoped names or directories so parallel tests cannot overwrite one another.
- Initialize test data through fixtures. Create the data a test needs as part of its setup instead of relying on another test or a particular test order.
- Limit concurrency around truly shared resources. If a third-party sandbox, a single test account, or a constrained database cannot safely serve concurrent mutations, use a lower worker cap or a lock. Serialization is safer than pretending separate browser contexts isolate the shared resource.
For authenticated tests that mutate server-side state, Playwright’s authentication guidance recommends a separate account per parallel worker. A shared account can be used when tests do not mutate shared state. See authentication in Playwright.
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 →Use worker-scoped fixtures for worker-lifetime resources
A worker-scoped fixture is set up once for a worker and reused by tests assigned to that worker. It suits resources whose creation is expensive and whose lifetime genuinely matches the worker—for example, a worker-specific account or a seeded dataset that tests can safely share. It is not a substitute for test independence: tests that mutate the shared resource still need their own records or a safe coordination strategy. See fixtures.
import { test as base, expect } from '@playwright/test';
type WorkerFixtures = {
workerAccount: { username: string; password: string };
};
export const test = base.extend<{}, WorkerFixtures>({
workerAccount: [async ({}, use, workerInfo) => {
const username = `e2e-${workerInfo.parallelIndex}`;
const password = process.env.E2E_PASSWORD!;
// Provision this worker's account using your application's test setup API.
await provisionAccount(username, password);
await use({ username, password });
await removeAccount(username);
}, { scope: 'worker' }],
});
export { expect };
// In a test file:
test('opens the dashboard', async ({ page, workerAccount }) => {
await signIn(page, workerAccount);
await page.goto('/dashboard');
await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
});
provisionAccount, removeAccount, and signIn are application-specific helpers that you must implement; the fixture structure is Playwright Test code. In this example, parallelIndex associates the account with a concurrent slot. If tests running in the same worker would conflict while using that account, give those tests separate accounts or otherwise isolate their mutations.
Choose workerIndex or parallelIndex deliberately
workerInfo.workerIndex identifies a worker process. workerInfo.parallelIndex identifies its concurrent slot and remains stable if Playwright restarts the worker for that slot. Use parallelIndex when you need a stable resource assignment across a worker restart; use workerIndex when you specifically need a unique process identity. The WorkerInfo API documents both values.
Rank #3
- 🎁Ideal Gift for Kids & Teens: Celebrate child’s growing skills and important milestones with this 5-in-1 Programmable robot set. Whether for birthdays, holidays, or achievements, it’s the perfect gift that encourages learning and hands-on fun—a gift that grows with them
- ✨STEM Educational Toys: The robot set for kids ages 8+ combines the fun of STEM learning. It encourages hands-on learning and early programming as they build, which can spark creativity and imagination and provide hours of screen-free play
- 📱Flexible Dual Control Modes: Control the Robotic kit with the intuitive app (Bluetooth) or remote. Enjoy fun features like basic programming, path, and precise movement, exploring endless interactive play
- 🔄 5-in-1 Buildable with Varying Difficulty: The Robot Kit with Progressive Difficulty! From simple robots to complex models, kids can build a robot, dinosaur, car, tank, and more. Adjustable head, arms, and tail allow for fun, playful poses. Perfect for kids 8-12 to develop skills step by step and ignite creativity
- 🛠️Clear & Detailed Build Instructions: This robot kit includes 488 pieces, with clear, colorful step-by-step instructions to make assembly easy. Kids can build their own robots independently or with family, enjoying quality time together and a confidence-boosting building experience
Use projects for coverage, not as a synonym for workers
Projects represent configurations you want to run, such as browser engines, device profiles, authentication states, or environments. They select and configure test runs; workers control process concurrency. You can run selected projects and apply a project-specific worker limit when one configuration has a tighter shared-resource constraint than the rest. See Playwright projects.
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox-limited',
use: { ...devices['Desktop Firefox'] },
workers: 1,
},
],
});
Run one project by name with npx playwright test --project=chromium. Project choice, global worker limits, project-level limits, and fullyParallel answer different questions: what configuration to test, how many workers may run, and how finely tests can be scheduled.
Shard a suite across machines
Sharding divides a test run into parts so separate machines or CI jobs can run those parts. Workers are processes on one machine; shards distribute suite work across machines. A shard still has its own worker limit and machine resources. The sharding guide explains the command-line syntax.
npx playwright test --shard=1/3
npx playwright test --shard=2/3
npx playwright test --shard=3/3
These commands define three shard assignments; run each in a separate CI job or machine to distribute execution. Without fullyParallel, balancing is based on test files, so files of very different runtimes can leave shards uneven. With fullyParallel, individual tests provide finer scheduling granularity. Neither setting guarantees a particular speedup: the outcome depends on suite balance, machine capacity, and any shared services the tests use.
Or skip the browser setup
If the task is capturing a site rather than automating its UI, a screenshot API can avoid setting up a Playwright browser worker. ScreenshotNeo is a website screenshot API and MCP server; one GET request returns an image or PDF. The API accepts common screenshot-API parameter names to make switching easier. See the ScreenshotNeo documentation.
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #4
- 🎁 Ideal Gift for Kids & Teens: This STEM solar robot kit celebrates child’s growing skills and important milestones. Whether for birthdays, holidays, it’s the perfect gift that grows with them and offers screen-free fun
- 📚 STEM Educational Toy: This solar educational toy brings science to life! The fun DIY building experience sparks children's curiosity in engineering and renewable energy, while nurturing their problem-solving skills
- ☀️ Powered by the Sun: Enjoy outdoor play with solar power or switch to a strong artificial light source indoors, such as a flashlight, ensuring uninterrupted play for children. This solar build bot toy encourages kids to have fun while exploring renewable energy
- ⚡ Upgraded Larger Solar Panel: Features a large sun-catching surface to harvest more sunlight and deliver stronger power output. Kids discover renewable energy principles through play - a fun educational toy for ages 8+
- 🤖 12-in-1 Buildable with Increasing Challenge: With 190 parts, kids can build 12 models like robots, cars, and more. From simple beginners to advanced builds, the varying difficulty levels allow it to grow with your child’s skills. Each robot sparks children’s creativity
curl -G "https://api.screenshotneo.com/v1/shot"
-d access_key=YOUR_API_KEY
--data-urlencode url=https://stripe.com
-o shot.webp
ScreenshotNeo accepts cookie banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers report the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Sign up for 1,000 free screenshots a month, with no card required.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshooting worker problems
Tests pass alone but fail in parallel
Look for shared external state: reused accounts, records with fixed names, one inbox, or common output paths. Give each test or worker unique resources; if the resource cannot be isolated, serialize the affected tests or reduce workers.
Increasing workers does not make the run faster
More workers can add CPU, memory, browser, and backend load. Try a lower explicit cap and compare runs under the same conditions. The documented default is a starting setting, not a measured optimum for your project.
A worker restart changes test behavior
Do not assume a test will continue in the same process or that process-local state will persist. Initialize required state in fixtures and use parallelIndex rather than workerIndex when assigning resources that should remain tied to a concurrent slot after restart.
One project overloads a shared service
Set a lower workers value on that project or reduce the global cap. Project selection determines which configuration runs; project-specific and global worker limits govern concurrency.
Best Value
- Build your own awesome, wearable mechanical hand that you operate with your own fingers.
- No motors, no batteries — just the power of air pressure, water, and your own hands!
- Hydraulic pistons enable the mechanical fingers to open and close and grip objects with enough force to lift them. Every finger joint can be adjusted to different angles for precision movement.
- Three configurations: right hand, left hand, and claw-like; adjustable to fit virtually any human hand.
- Learn how pneumatic and hydraulic systems are used in industrial robots such as automobile components..2021 The Toy Association's STEAM Toy Of The Year Winner
CI shards finish at very different times
Unequal test-file runtimes can make file-based shard assignments imbalanced. Enable fullyParallel only if tests are independent and the finer test-level balancing is appropriate for your suite.
Plan reliability, capacity, and cost together
Worker count is a reliability and resource decision as much as a scheduling choice. More parallel processes can increase pressure on the CI machine and on the application, database, email service, or test environment. Sharding can use multiple machines, but requires CI jobs or infrastructure to run those shards and coordinate results. The Playwright documentation describes the controls, not a numerical performance gain or a universal cost break-even point; measure with your own suite and runner.
Recommended Free Tools
Before raising concurrency, verify that tests are isolated, the environment can support the extra simultaneous sessions, and failures are not caused by rate limits or shared fixtures. Keep an explicit worker cap in CI when the runner or backend has a known capacity ceiling, and adjust it as that capacity changes.
Frequently Asked Questions
Can Playwright workers share variables or browser state?
No. Workers are independent processes and cannot communicate; each test also gets its own BrowserContext. Use fixtures or external coordination for deliberate shared resources.
Should I always enable fullyParallel?
No. Enable it when individual tests are independent and test-level scheduling is useful, including for finer shard balancing. It is unsafe for tests that depend on order or shared mutable state.
What is the difference between a worker and a shard?
A worker is a test process on one machine. A shard is a portion of the suite assigned to a separate run, commonly on another machine.
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.

