ScreenshotNeo

BlogComparisons

SmashTest Review: A Different Way to Write Selenium Tests

Smashtest uses indented, tree-shaped steps to generate test permutations. See how its model works, what setup it needs, and what to evaluate before adopting it.

By the ScreenshotNeo team4 October 20269 min read

Smashtest is an open-source testing tool and language that represents tests as indented, tree-shaped steps. You write shared setup once, then indent alternatives beneath it; Smashtest uses those branches to generate test paths. Its web UI path uses Selenium WebDriver. The central difference is how you author test permutations, not evidence that tests run faster or are more reliable.

This review explains the model and the documented setup and workflow. The available project documentation does not establish current maintenance status, a release-specific compatibility matrix, or independent performance comparisons. Treat version-sensitive setup details as project documentation and validate them in your environment before adopting the tool.

1. What Smashtest is

Smashtest describes itself as an open-source tool and language for generating tests in a tree-like format. Rather than writing every permutation as a separate sequence, you put common steps at the top and indent alternative actions or inputs beneath them. Each resulting path through the tree is a branch.

This authoring model can express combinations such as browsers, credentials, and other inputs. The documentation includes web UI and API examples. For web UI tests, Smashtest drives a browser through Selenium WebDriver; Selenium infrastructure remains part of the setup.

The project documentation describes the product and its workflow. The observations below about which teams may prefer the model are editorial deductions from that design, not findings from independent user research or hands-on testing.

2. How the branching model works

Start with steps every path shares, such as opening a browser and navigating to a page. Indent alternative actions beneath the shared steps. The alternatives form separate paths, and alternatives at multiple points can combine into a larger generated set.

Start browser
  Go to login page
    Enter valid credentials
      Submit login form
    Enter invalid credentials
      Submit login form

This illustrates the shape of a Smashtest tree; it is not a complete runnable test because browser commands and application selectors depend on your project. Use the command syntax and capabilities supported by the Smashtest documentation for your installed version.

Reason about the generated paths before running them

For example, if a suite has three browser choices and four input choices that combine independently, the conceptual cross-product has 12 paths. This is arithmetic, not a Smashtest benchmark or a claim that every tree is combined in exactly that way. Inspect how your actual tree expands and decide which combinations are meaningful.

  • Keep shared setup above branches so it is not duplicated in the source.
  • Indent only genuine alternatives beneath the step where they diverge.
  • Review the generated branch count as you add dimensions such as browser, user role, or input value.
  • Separate paths that do not share meaningful setup if a single tree becomes hard to understand or control.

3. Setup and dependencies

The official getting-started guide calls for Node.js, Smashtest installed through npm, and Selenium WebDriver infrastructure when you are writing web UI tests. Its documented global install command is:

npm install -g smashtest
  1. Install Node.js using the installation method your environment supports.
  2. Install Smashtest with the npm command above.
  3. For browser-based UI tests, choose and configure Selenium WebDriver infrastructure.
  4. Verify the installed browser, driver, and Selenium versions against the environment you intend to use.
  5. Write a small representative tree and run it locally before scaling out.

The docs describe several WebDriver setup approaches: WebDriver managers, manually installed drivers and server, or a Selenium Grid or cloud endpoint. The project documentation notes tradeoffs: a manager may require a separate process and attention when browser major versions change, while manual setup requires installing and maintaining the driver and server. The dossier does not provide a current compatibility matrix, so check versions and support for your own setup rather than assuming compatibility.

4. A practical authoring and execution workflow

  1. Map the scenario. Identify the shared steps and the points where behavior actually branches.
  2. Estimate the paths. Count the alternatives and combinations your tree represents. Remove combinations that do not answer a useful test question.
  3. Choose execution infrastructure. Use local WebDriver for a local workflow, or configure a Selenium Grid or cloud endpoint if that is how your team runs browsers.
  4. Run a small slice. Confirm that the syntax, browser setup, selectors, and environment behave as expected before expanding the suite.
  5. Inspect results and failures. The docs describe reports, screenshots, and rerunning failed branches. Use these to investigate a failure; retries can help with environmental or Selenium flakiness but do not remove its underlying cause.
  6. Review suite limits and upkeep. Track branch growth and keep browser, driver, Selenium, Node.js, and Smashtest versions visible to the team.

The documentation also describes a REPL for stepping through commands, CLI controls, and a skip-passed mode that can carry successful branch state across runs. Consult the official docs for the options supported by your installed version; the available source material does not establish a release-specific option list.

Exit codes and documented report limits

According to the project documentation, the process exits with code 1 if any branch fails and code 0 otherwise. The docs also state that reports are limited to 500 branches per result category (such as passed or failed) and that 20 branches can currently be running. These are documented product limits, not independent performance measurements. For a large generated suite, determine whether those ceilings fit your reporting and execution needs.

5. What to evaluate before adopting it

Evaluation area Questions to answer in your environment
Readability and learning curve Can the team follow an indented scenario more easily than its current test code? How quickly can new contributors understand the syntax?
Permutation control Can you see and constrain the generated paths? Does the resulting branch count stay useful as inputs and browsers multiply?
Setup and upkeep Can the team install and maintain Node.js, Smashtest, Selenium, browsers, and drivers across its supported environments?
Execution fit Does the local, Grid, or cloud workflow fit the team’s parallel execution and infrastructure needs?
Debugging Do the reports, screenshots, REPL, and failed-branch reruns give enough information to diagnose representative failures?
Maturity and ecosystem What do the repository, release history, compatibility information, and community activity show now? The cited documentation alone does not answer this.

A useful evaluation compares one representative suite in Smashtest with the team’s existing approach. Record the versions and environment, the number of generated branches, execution behavior, report usefulness, debugging effort, and the comparison baseline. No independent comparative results or benchmark data are established by the research for this article.

6. Strengths and tradeoffs

Where the model may help

  • Shared steps can be written once while alternatives are expressed as branches.
  • The tree makes scenario alternatives visible in the test source.
  • The model directly represents permutations when a team needs to exercise combinations of browsers or inputs.
  • The documented workflow includes reports, screenshots, a REPL, and a way to rerun failed branches.

What to weigh

  • A team that prefers conventional imperative test code may find a separate test language less natural.
  • Generated combinations can grow quickly, so authors need to manage branch count and relevance.
  • Web UI use depends on Selenium and browser-driver setup choices that teams must validate and maintain.
  • Project documentation does not, by itself, establish current maintenance state, ecosystem support, or comparative reliability.

These are consequences to investigate from the documented model, not claims about measured outcomes or user sentiment.

7. Troubleshooting

Symptom Likely cause What to check
The Smashtest command is not found The global npm install may not have completed, or the npm global executable directory may not be on the shell path. Confirm the install completed and that the global npm binary directory is available to the shell running the command.
The browser does not start WebDriver infrastructure, browser, or driver setup may be missing or mismatched. Check that the selected manager, manual driver/server, Grid, or cloud endpoint is configured, then verify browser and driver compatibility for the installed versions.
A test fails after a browser update A browser major-version change can require corresponding driver or manager updates. Check the versions of the browser, driver, Selenium components, and manager. Reproduce the failure with the same environment before changing test logic.
A headless run behaves differently The project docs note that headless behavior differs by browser. Compare the browser’s headed and headless behavior and confirm the relevant browser-specific setup. Do not assume headless behavior is identical across browsers.
Many branches fail intermittently Environmental or Selenium flakiness may be involved. Use available reports and screenshots to find the failure point, check the execution environment, and use failed-branch reruns as a diagnostic aid. Retries do not fix the root cause.
Expected alternatives are absent or excessive Indentation and the location of alternatives determine the tree structure and paths. Review the indentation and branch points, then inspect the generated paths with a small example before expanding the suite.
Results are incomplete for a large run The docs state a report limit of 500 branches per result category and a limit of 20 currently running. Check whether the generated suite exceeds those documented limits and whether the report covers the cases your team needs.

8. Performance, reliability, and cost considerations

The research does not provide independent benchmarks, execution-time measurements, or comparative reliability data for Smashtest. Do not infer that tree-based authoring makes browser tests faster or more reliable. Generated paths can increase the amount of work a suite asks the browser infrastructure to perform; measure a representative suite in the environment where it will run.

For reliability, distinguish a test assertion failure from a browser, driver, Grid, or network problem. The documented ability to rerun failed branches may help investigate intermittent failures, but retries can also obscure instability if teams treat a later pass as proof that the underlying issue is resolved.

The sources used here do not establish Smashtest pricing or a current maintenance status. For a real adoption decision, check the project repository and release history, confirm the applicable dependency versions, and estimate the cost of the Selenium infrastructure your team chooses. No physical product recommendation is supported by the research.

9. Or skip the browser setup

Smashtest is for authoring and generating test paths; ScreenshotNeo is a separate option when the task is capturing a website screenshot through an API. ScreenshotNeo is a website screenshot API and MCP server for developers, made by Yorker Media. It can return PNG, JPEG, or WebP screenshots and PDFs. See ScreenshotNeo and the API documentation.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
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)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

Cookie and consent banners are accepted like a visitor would accept them, and 60+ known consent platforms, newsletter popups, and chat widgets can be removed before capture; each step 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 gives AI agents tools for screenshots, page information, and PDF capture. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Every feature is on every plan.

Sign up for ScreenshotNeo: get 1,000 screenshots a month free, with no card.

10. FAQ

Does Smashtest replace Selenium?

No. For web UI testing, its documented setup uses Selenium WebDriver infrastructure. Smashtest provides a different way to author and generate test paths.

Is Smashtest a JavaScript test file format?

The project describes it as a testing tool and language. Its documented installation uses npm and its web UI workflow uses Selenium; do not assume its test syntax is ordinary JavaScript.

Does branching prove that a suite covers every useful case?

No. Branches represent the alternatives encoded in the tree. The team still needs to decide which combinations matter and verify the generated paths.

Is it faster or more reliable than conventional Selenium tests?

The cited research establishes no independent comparison or benchmark. Evaluate those outcomes with a representative suite and a documented baseline.

Where can I verify current compatibility and maintenance?

Check the official project repository, release history, and compatibility information before adoption. The cited documentation does not establish current release or maintenance status.

Sources