All skills
browserbase avatar

/ui-test

@b2ae728 official
by browserbasebrowserbase/skills3.7k stars
240

AI-powered adversarial UI testing via the browse CLI. Analyzes git diffs to test only what changed, or explores the full app to find bugs. Tests functional correctness, accessibility, responsive layout, and UX heuristics. Use when the user asks to test UI changes, QA a pull request, audit accessibility, or run exploratory testing. Supports local browser (localhost) and remote Browserbase (deployed sites).

Use this Skill: https://skilld.dev/gh/browserbase/skills/ui-test

This session only. Nothing lands on disk.

referencesux-heuristics.md

≈4.6k tokens on demand. Your agent reads this file only when SKILL.md points to it.

UX Heuristics for AI-Powered UI Testing

These heuristics guide the LLM when evaluating screenshots and page interactions. Five evaluation frameworks targeting SaaS applications, dashboards, and internal tools.


1. Laws of UX (Behavioral & Cognitive)

Fitts's Law

Principle: The time to reach a target is a function of distance and size. What to check:

  • Primary CTAs should be the largest clickable elements in their section
  • Destructive actions (delete, cancel) should NOT be larger than constructive ones
  • Mobile tap targets must be at least 44x44px (Apple HIG) / 48x48px (Material)
  • Navigation items should have generous padding, not just text-sized hit areas
  • Form submit buttons should be full-width on mobile
  • Frequently used actions should be closer to the user's current focus area

Hick's Law

Principle: Decision time increases with the number and complexity of choices. What to check:

  • Navigation menus with more than 7±2 items should be grouped/categorized
  • Settings pages with many options should use sections/tabs, not a flat list
  • Modals should present one clear action, not multiple competing choices
  • Dropdown menus with 15+ items should have search/filter
  • Onboarding flows should not present all options at once
  • Action menus (right-click, "more" menus) should be organized by frequency of use

Miller's Law

Principle: Working memory holds approximately 7±2 items at once. What to check:

  • Long lists should be chunked into groups of 5-9 items
  • Phone numbers, credit cards, and codes should be visually grouped
  • Dashboards should prioritize 3-5 key metrics, not show everything
  • Sidebar navigation should group related items under headings
  • Multi-step wizards should show no more than 5-7 steps

Jakob's Law

Principle: Users spend most of their time on OTHER sites and expect yours to work the same way. What to check:

  • Login forms should have email/username on top, password below, submit at bottom
  • Logo should link to homepage/dashboard
  • External links should be visually distinguished or open in new tab
  • Back buttons should be top-left
  • Search should be in the header area
  • Settings gear icon should lead to settings
  • User avatar/menu should be top-right
  • Sidebar navigation on the left, content on the right

Aesthetic-Usability Effect

Principle: Users perceive aesthetically pleasing designs as more usable. What to check:

  • Consistent border radius across all components
  • Unified color palette (not more than 3-4 primary colors + neutrals)
  • Consistent spacing rhythm (multiples of 4px or 8px)
  • Typography hierarchy is clear (headings > subheadings > body > captions)
  • Alignment is consistent (left-aligned text, centered headings, etc.)
  • No orphaned elements floating without visual grouping

Doherty Threshold

Principle: Productivity soars when system response is <400ms. What to check:

  • System response time < 400ms for user actions
  • Loading indicators appear for operations > 1 second
  • Optimistic UI updates for common actions (toggle, like, save)
  • Skeleton screens for content loading, not just spinners
  • No full-page reloads for in-page actions

Von Restorff Effect (Isolation Effect)

Principle: Items that stand out from their peers are more memorable. What to check:

  • The most important element on each page is visually distinct
  • Pricing page highlights the recommended plan
  • Error messages stand out from surrounding content
  • New/updated features have visual indicators (badges, highlights)
  • Primary action is visually differentiated from secondary actions

Zeigarnik Effect

Principle: People remember incomplete tasks better than completed ones. What to check:

  • Multi-step forms show progress indicators
  • Onboarding flows show completion percentage
  • Profile/settings completion is shown if relevant
  • Incomplete tasks are visually distinct from complete ones

2. Nielsen's 10 Usability Heuristics

H1: Visibility of System Status

Principle: The system should always keep users informed about what's going on. What to check:

  • Current page/section is highlighted in navigation
  • Breadcrumbs show where the user is in the hierarchy
  • Form submissions show success/failure feedback
  • File uploads show progress bars with percentage
  • Background operations show status (syncing, saving, processing)
  • Active filters/sorts are visually indicated
  • "You are here" indicators exist in multi-step flows
  • Timestamps show when data was last updated ("Updated 2 min ago")

H2: Match Between System and Real World

Principle: Use language and concepts familiar to the user, not system-oriented terms. What to check:

  • Error messages use plain language, not error codes or stack traces
  • Labels use domain terminology the user understands
  • Icons match real-world metaphors (trash can for delete, etc.)
  • Dates use the user's locale format, not ISO/Unix timestamps
  • Numbers use appropriate formatting (commas, currency symbols, abbreviations)
  • Status labels are meaningful ("Processing payment" not "State: 3")

H3: User Control and Freedom

Principle: Users need a clearly marked "emergency exit" from unwanted states. What to check:

  • Undo is available for destructive actions
  • Cancel buttons exist on all forms and modals
  • Back navigation works and preserves state
  • Multi-step flows allow going back to previous steps
  • Bulk selections can be cleared with one click
  • Filters can be reset to defaults
  • Modal/dialog can be closed via Escape key AND clicking outside

H4: Consistency and Standards

Principle: Users should not have to wonder whether different words, situations, or actions mean the same thing. What to check:

  • Same action uses same button style everywhere (primary, secondary, destructive)
  • Terminology is consistent (don't mix "delete" and "remove" for the same action)
  • Icons mean the same thing across the app
  • Date/time formatting is consistent throughout
  • Table column behaviors are consistent (all sortable or none)
  • Empty states follow the same pattern across different sections
  • Error message style is consistent (toast, inline, banner)

H5: Error Prevention

Principle: Even better than good error messages is preventing errors in the first place. What to check:

  • Destructive actions require confirmation ("Are you sure you want to delete?")
  • Form inputs have appropriate constraints (type=email, maxlength, pattern)
  • Disabled states prevent impossible actions (can't submit empty form)
  • Dangerous buttons are visually distinct (red) and not adjacent to safe ones
  • Unsaved changes trigger a "Leave page?" confirmation
  • Auto-save is indicated when available
  • Input fields show format hints before the user types (placeholder, helper text)

H6: Recognition Rather Than Recall

Principle: Minimize memory load by making objects, actions, and options visible. What to check:

  • Recently used items are shown (recent searches, recent files)
  • Form fields show current values, not empty fields requiring user to remember
  • Navigation labels are visible, not hidden behind icons only
  • Search has autocomplete/suggestions
  • Contextual help is available where needed (tooltips, info icons)
  • Dashboard widgets show labels, not just numbers

H7: Flexibility and Efficiency of Use

Principle: Accelerators for expert users should not encumber novice users. What to check:

  • Keyboard shortcuts exist for power users (and are discoverable)
  • Bulk actions are available for repetitive tasks
  • Search/filter is available on long lists
  • Copy-to-clipboard exists for IDs, keys, URLs
  • Quick actions exist (inline edit, single-click actions)
  • Default values are sensible and save time

H8: Aesthetic and Minimalist Design

Principle: Every extra unit of information competes with relevant information. What to check:

  • No redundant information on the page
  • Above-the-fold content is the most important content
  • Visual noise is minimized (unnecessary borders, dividers, decorations)
  • White space is used to create focus
  • Secondary information is accessible but not prominent (expandable sections, tooltips)
  • Forms only ask for what's truly needed

H9: Help Users Recognize, Diagnose, and Recover from Errors

Principle: Error messages should be expressed in plain language, indicate the problem, and suggest a solution. What to check:

  • Error messages explain WHAT went wrong in plain language
  • Error messages suggest HOW to fix it
  • Form validation errors appear next to the relevant field, not just at the top
  • Error states don't lose the user's input (form data preserved after error)
  • Network errors offer a retry option
  • 404 pages suggest alternatives (search, navigation, homepage link)
  • API errors don't leak technical details to the user (no stack traces, no raw JSON)

H10: Help and Documentation

Principle: Help should be easy to search, focused on the user's task, and concise. What to check:

  • Contextual help exists for complex features (tooltips, "?" icons, inline hints)
  • Onboarding/tour exists for new users
  • Empty states include guidance on what to do next
  • Documentation links are accessible from within the app
  • Error states link to relevant help articles when appropriate

3. Error States & Edge Cases

SaaS applications spend 80% of development time on the happy path and 20% on everything else. These checks catch the 80% of user frustration that comes from the "everything else."

Empty States

What to check:

  • Every list/table has a designed empty state (not just blank space)
  • Empty states explain what this section is for
  • Empty states include a CTA to create the first item
  • Empty states have an illustration or icon (not just text)
  • Search with no results offers suggestions or "try different terms"
  • Filtered views with no matches say "No results match your filters" with a clear filter button

Error Boundaries

What to check:

  • JavaScript errors don't crash the entire page (error boundary catches them)
  • Failed API calls show a meaningful error, not a blank section
  • Network disconnection shows an offline indicator
  • Timeout errors offer retry
  • Authentication expiry redirects to login with a message, doesn't show a broken page
  • Partial data load doesn't leave the UI in a half-rendered state

Form Edge Cases

What to check:

  • Extremely long text input doesn't break layout (truncation or scroll)
  • Special characters in input don't cause errors (quotes, unicode, emoji)
  • Pasting content into fields works correctly
  • Double-clicking submit doesn't create duplicate entries
  • Required field indicators are visible before submission, not just after
  • Tab order through form fields follows visual order
  • Date pickers handle timezone edge cases
  • Number inputs handle negative numbers, decimals, and zero

Loading States

What to check:

  • Initial page load has skeleton screens or loading indicators
  • Data refresh shows subtle loading indicator (not full-page spinner)
  • Long-running operations show progress (not just a spinner)
  • Stale data is indicated ("Last updated 5 min ago" or visual dimming)
  • Optimistic updates revert gracefully if the server rejects them
  • Infinite scroll has a loading indicator at the bottom
  • Image loading uses blur-up, skeleton, or placeholder

Permission & Auth Edge Cases

What to check:

  • Unauthorized access shows a meaningful message, not a 403 page
  • Expired session redirects to login and returns user to where they were
  • Role-based UI hides actions the user can't perform (not just disables them)
  • Shared links work for users with appropriate permissions
  • "Access denied" messages suggest who to contact for access

4. Data Display Heuristics

SaaS apps are data-heavy. Tables, charts, dashboards, and lists are where users spend most of their time. These are the most common sources of visual bugs and usability issues.

Tables

What to check:

  • Column headers are clear and concise
  • Columns are appropriately sized (not all equal width)
  • Long cell content is truncated with tooltip/expand, not overflowing
  • Numeric columns are right-aligned
  • Text columns are left-aligned
  • Row hover state exists for visual tracking
  • Sortable columns are indicated (sort icon)
  • Active sort direction is shown (ascending/descending)
  • Empty table has a designed empty state
  • Pagination shows total count and current range ("Showing 1-25 of 142")
  • Table is keyboard navigable
  • On mobile: table scrolls horizontally OR transforms to card layout

Charts & Graphs

What to check:

  • Charts have clear titles and axis labels
  • Legend is visible and matches chart colors
  • Tooltips show exact values on hover
  • Zero-data state shows a message, not an empty chart
  • Color palette is accessible (not relying solely on color to distinguish series)
  • Y-axis starts at zero for bar charts (unless there's a clear reason not to)
  • Time-series x-axis has appropriate intervals
  • Charts are responsive (don't overflow on small screens)

Dashboard Metrics

What to check:

  • Key metrics have labels, values, AND context (trend, comparison period)
  • Large numbers use appropriate formatting (1.2K not 1200, $1.5M not $1500000)
  • Percentage changes show direction (up/down arrow or color)
  • Metrics refresh is indicated (timestamp or refresh button)
  • Metric cards have consistent sizing and alignment
  • Too many metrics create cognitive overload — prioritize 3-5 key ones

Filters & Search

What to check:

  • Active filters are visible and individually removable
  • "Clear all filters" button exists when any filter is active
  • Filter state persists across page navigation
  • Search is responsive (results appear as you type, or after Enter)
  • Search handles empty query gracefully
  • Filter combinations that yield no results show a helpful message
  • Date range filters validate that start < end

Pagination & Infinite Scroll

What to check:

  • Total item count is shown
  • Current page/position is indicated
  • Page size selector exists for tables
  • URL updates with page state (shareable/bookmarkable)
  • Navigating back preserves scroll position and page
  • Infinite scroll has a clear "end of list" indicator
  • Loading more items doesn't jump the scroll position

Numbers, Dates & Formatting

What to check:

  • Dates use consistent format throughout the app
  • Relative dates where appropriate ("3 hours ago" vs "2026-03-24T16:30:00Z")
  • Currency values show appropriate symbol and decimal places
  • Large numbers are abbreviated consistently (K, M, B)
  • Percentages show appropriate precision (don't show 33.333333%)
  • Duration formatting is human-readable ("2h 15m" not "135 minutes" or "8100000ms")
  • Null/undefined values show a dash or "N/A", not "null" or "undefined" or blank

5. Visual Design Checks

Typography

  • Body text: 16px minimum on desktop, 14px minimum on mobile
  • Line height: 1.4-1.6 for body text
  • Heading scale: clear size difference between h1 → h2 → h3
  • Maximum line length: 60-80 characters for readability
  • No more than 2-3 font families on a page
  • Font weight variation is intentional and consistent
  • Monospace font used for code, IDs, and technical values

Color & Contrast

  • WCAG AA: 4.5:1 contrast ratio for normal text
  • WCAG AA: 3:1 contrast ratio for large text (18px+ or 14px+ bold)
  • Interactive elements have distinct hover/active/focus states
  • Error states use red (or culturally appropriate warning color)
  • Success states use green
  • Warning states use yellow/amber
  • Info states use blue
  • Disabled states are visually muted but still readable
  • Status colors are consistent throughout the app (same green = same meaning)

Spacing & Layout

  • Consistent gutters between grid columns
  • Section spacing follows a predictable rhythm
  • Related items are closer together than unrelated items (proximity principle)
  • Whitespace is intentional, not accidental
  • No content touches the edge of the viewport without padding
  • Cards/containers have consistent internal padding
  • Sidebar width is appropriate (not too narrow to read, not too wide eating content)

Interactive Elements

  • All buttons have visible hover states
  • All links are distinguishable from regular text
  • Form inputs have clear focus states (not just browser default outline)
  • Disabled elements look disabled (muted, no pointer cursor)
  • Loading buttons show a spinner and prevent double-click
  • Toggle/switch states are clearly on vs off
  • Dropdown indicators (chevron) point in the correct direction (down when closed, up when open)
  • Destructive buttons are visually distinct (red or outlined, not primary style)

6. Accessibility Checks

Keyboard Navigation

  • All interactive elements reachable via Tab
  • Tab order follows visual order (top-to-bottom, left-to-right)
  • Focus is visible on all elements (not just browser default — custom focus ring)
  • Escape closes modals/dropdowns
  • Enter/Space activates buttons
  • Arrow keys navigate within component groups (tabs, menus, radio groups)
  • Skip-to-content link exists for screen reader users
  • Focus is trapped inside open modals (can't Tab to elements behind the modal)
  • Focus returns to trigger element when modal closes

Screen Reader

  • All images have alt text (or aria-hidden if decorative)
  • Form inputs have associated labels (not just placeholder text)
  • Headings are hierarchical (no skipping from h1 to h4)
  • Landmark regions exist (nav, main, aside, footer)
  • Live regions announce dynamic content updates (toast notifications, loading states)
  • Modals trap focus and announce their title
  • Tables have proper th/td structure and scope attributes
  • Custom components (tabs, accordions, dropdowns) have correct ARIA roles

Motion & Reduced Motion

  • Respects prefers-reduced-motion media query
  • No auto-playing animations that can't be paused
  • No flashing content (3 flashes per second max)
  • Parallax/scroll-triggered animations have alternatives
  • Loading spinners are simple (no complex animations)

Color Independence

  • Information is never conveyed by color alone
  • Error states have icons AND color (not just red text)
  • Charts use patterns/shapes in addition to color
  • Status indicators have text labels alongside color dots
  • Form validation shows icons (checkmark, X) not just green/red borders

Source: SKILL.md on GitHub

1 warning16d4 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides automated user interface testing scripts and recipes using the `browse` CLI tool. The dependencies and remote script sources specified are well-known and reputable technology entities, and the operations described strictly relate to its core purpose of visual and functional interface verification.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: MEDIUM · 2 issues

  • ZeroLeaks5mo

    2 findings · Score: 80/100

Signed by skilld at b2ae728. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub last month.

Activeupdated 5 months ago
metadata
{
  "author": "browserbase",
  "version": "0.4.0"
}
All 1 allowed tools
Bash Read Glob Grep Agent
Other metadata
compatibility
Requires the browse CLI (`npm install -g browse`). For remote testing: BROWSERBASE_API_KEY and cookie-sync skill.

README badge

README badge for browserbase/skills/ui-test