Selenium Load Testing: What One Browser User Costs
Selenium load testing, measured: 20 headless Chrome users took 12.1 GiB and ran slower than 5, while k6 simulated 1,000 users in 296 MiB. When browsers belong.
Test automation guides cover writing and debugging automated tests. You'll find Selenium WebDriver how-tos in Java, from locating elements and XPath to waits, dropdowns, proxies and screenshots, how to debug mobile HTML5 and native apps and their traffic, what HTTP requests look like on the wire, and how to write a test plan that a team will follow.
Selenium load testing, measured: 20 headless Chrome users took 12.1 GiB and ran slower than 5, while k6 simulated 1,000 users in 296 MiB. When browsers belong.
Explore a detailed comparison of cloud testing vs local testing for mobile performance testing. Learn which approach fits your needs in 2026.
Optimize mobile API performance: shrink payloads, paginate, cache, compress, cut chatty calls, refresh tokens safely and test on slow networks.
Load tests verify how your system behaves under expected traffic. Stress tests push past it to find the breaking point.
Cut JavaScript main-thread blocking: long tasks, INP, defer and async, code splitting, yielding and web workers, plus what a backend load test does not measure.
Smoke testing verifies that a build's critical paths work before deeper testing starts. How it differs from sanity and regression testing, with examples.
Unit tests check a piece in isolation; functional tests check behaviour a user would notice.
Batch testing groups related cases into one run, which cuts setup cost and shortens feedback.
Contract testing checks that a provider and consumer still agree, without running both together.
Synthetic monitoring runs a scripted journey on a schedule, so you find failures before users report them.
Chromium is the open-source base; Chrome adds proprietary codecs, auto-update and Google services.
Caching and image optimisation deliver most of the available gain on WordPress.
HTTP POST parameters travel in the request body, and the Content-Type header (form-urlencoded, multipart or JSON) tells the server how to parse them.
WebdriverIO drives both browsers and mobile apps through the WebDriver protocol. Choose it when you need one framework across web and mobile.
Puppeteer controls headless Chrome and suits scraping, PDFs and screenshots as much as testing.
It turns API documentation into something machine-checkable in tests. Start with required fields and types; add constraints once the basics hold.
Measure before optimising. Most slow pages have one dominant cause, not six small ones.
Dive into LoadFocus's enhanced user experience with contextual documentation. Streamline your onboarding and understand metrics with in-app guidance.
A flaky test is worse than no test, because it trains the team to ignore red builds.
Images are usually the largest thing on a page and the easiest to fix. Modern formats and correct dimensions cut weight without visible quality loss.
Scheduled checks turn Core Web Vitals from an occasional audit into a trend you can act on.
SEO monitoring catches silent breakage: a noindex shipped by accident, or a redirect chain.
Caching plus image optimisation covers the majority of the available gain. Audit plugins periodically. Each one adds queries and assets to every page.
Cypress runs in the browser alongside your app, which makes debugging far more direct.
Selenium IDE is the fastest way to capture a journey, and the worst way to maintain one. Use it to draft a test, then export and clean up the locators.
TestCafe runs without WebDriver, which removes most of the setup friction. End to end tests are expensive, so keep them to the journeys that matter.
Running Lighthouse from an extension gives you an audit without leaving the page you are testing.
FMP tried to capture when the main content appeared, rather than the first pixel. Use LCP for anything current; FMP appears mainly in older reports.
TestCafe needs no WebDriver, which is why a working suite is possible in half an hour.
E2E tests earn their cost only on the journeys that make money; everything else belongs lower in the pyramid.
OpenSTF gives you remote access to real Android devices, which emulators cannot fully replace.
How to design load testing scenarios: set pass/fail goals, build a workload model from real traffic, add think time and test data, then choose the load profile.
Puppeteer's page.click does not wait for the selector and throws if it is missing; wait with waitForSelector or use a locator that waits for a visible element.
WireMock lets you produce failures a real API will not give you on demand: timeouts, 500s, malformed bodies.
Categories let one suite be sliced by speed or area, so CI can run the fast set per commit.
Compare the same viewport and state, or the diff is dominated by noise. Review differences rather than gating on pixel equality, which fails constantly.
Image comparison catches visual breakage that assertions never check for. Run in a consistent environment; a different OS produces different pixels.
linkText matches the full visible text; partialLinkText matches a substring.
Puppeteer captures viewport, full-page or single-element screenshots.
Pixel comparison catches visual regressions that functional tests never assert on. Set a tolerance, or antialiasing and fonts will fail every run.
A screen recording captures the exact sequence that reproduces a bug, which a description rarely does.
Debugging transpiled code needs source maps, or breakpoints land on the wrong lines.
A proxy between the device and the network is the only reliable way to see native app traffic.
A DataProvider feeds many input sets into one test method, which keeps cases out of the code.
Open a new tab in Selenium WebDriver with Java: Selenium 4's switchTo().newWindow(WindowType.TAB), Ctrl+click on a link, and switching between tabs by handle.
Backgrounding and resuming is where state bugs surface, so it belongs in the test suite. Verify state after resume, not just that the app reopened.
Explicit waits target a condition; implicit waits apply a blanket timeout to every lookup.
Wrap the literal in double quotes instead, which is the simplest fix. Use concat() when the text contains both quote characters.
Find all links on a page with Selenium WebDriver in Java: findElements(By.tagName("a")), filtering hrefs, checking status codes and avoiding stale elements.
Hover needs the Actions class; a plain click will not trigger CSS or JS hover states.
Use the Select class for real select elements, and normal clicks for custom widgets.
Selenium 4.2+ scrolls natively with wheel actions (scrollToElement, scrollByAmount); the JavaScript executor scrollBy and scrollIntoView work in every version.
Chrome DevTools can copy an XPath, but the generated one is usually position-based and brittle.
The Select class exposes getOptions() for real select elements. Assert on the option text or value, not the count alone, which passes on the wrong list.
Clearing cookies does not clear local storage, so state survives between tests. Execute localStorage.clear() through the driver's JavaScript executor.
Screenshots on failure turn an unhelpful stack trace into something you can diagnose. Name files by test and timestamp or you cannot match them to runs.
A proxy lets you inspect, record or modify the traffic a browser test generates. HTTPS needs the proxy certificate trusted or every request fails.
HTML5 apps can be debugged with remote browser tooling; native apps need a proxy or device logs.
A test plan is about scope and risk: what you will not test matters as much as what you will.
Locate web elements in Selenium 4 with the Java By class: id, name, CSS, XPath and relative locators, with tested code and what selenium.dev recommends.
Don’t miss out on the latest testing tips and tricks, tools and news related to software testing.
Already +20,000 members in the list.
Load test websites and APIs from 25 cloud regions, monitor page speed and uptime, and get AI analysis that explains your results in plain English.