SwiftBrowse v0.1.2 GitHub

Assertions

Assertions in SwiftBrowse wait: they check the page repeatedly until every condition holds, and fail only when the timeout runs out (5 s by default). You don't need sleeps or manual waits.

Where conditions are used

Where Form
Test files { "op": "expect", "condition": {…} } or "conditions": [{…}, {…}]
Any interface assert_page_state with conditions (recorded in the test report), wait_for with one condition
After an action click, hover and press_key take "expect": {…} to verify their outcome
TypeScript SDK await page.expect({…}) or page.expect([{…}, {…}], { timeoutMs: 10000 })
Python SDK page.expect({…}) or page.expect([...], timeout_ms=10000)

Conditions

type Fields Passes when
url_equals value The URL is exactly value.
url_contains value The URL contains value.
url_matches pattern The full URL matches the regular expression.
title_equals value The title is exactly value.
title_contains value The title contains value.
visible target At least one match is visible (or the nth match is).
hidden target No match is visible (including when nothing matches).
count target, count Exactly count elements match, visible or not.
text_visible text The text is visible somewhere on the page.
text_absent text The text is not visible anywhere.
text_equals target, text The element's whole visible text, whitespace-normalized, equals text.
text_contains target, text The element's visible text contains text.
value_equals target, value A form field's value equals value.
enabled target The element is enabled.
checked target, checked A checkbox, radio or aria-checked element is (true) or isn't (false) checked.
no_console_errors No console errors or uncaught exceptions so far in this session.
no_network_failures No failed requests or HTTP responses ≥ 400 so far in this session.
request_seen url_contains, optional method The page has sent a request whose URL contains this (with this method).

target takes the same strings and locators as actions: see Targets and locators.

Examples

{ "op": "expect", "condition": { "type": "url_matches", "pattern": "/orders/\\d+$" } }

{ "op": "expect", "conditions": [
  { "type": "text_equals", "target": { "by": "role", "role": "status" }, "text": "3 items" },
  { "type": "hidden", "target": { "by": "css", "selector": ".spinner" } },
  { "type": "no_console_errors" }
] }

{ "op": "click", "target": "Save",
  "expect": { "type": "request_seen", "url_contains": "/api/profile", "method": "PUT" } }

What a failure shows

When an assertion fails, the result lists every condition with passed and what was observed: the actual URL, the actual text, how many elements matched. You see why it failed, not just that it did. The test runner prints this and keeps a screenshot and a text snapshot of the page. With --trace you can also step through the run (see Traces, video and reports).

Timeouts

Setting Default Applies to
--expect-timeout-ms 5000 expect steps in test files
timeout_ms on a step That step only
timeoutMs / timeout_ms on SDK expect 5000 That assertion
--test-timeout-ms / timeout_ms on a test 30000 One attempt of a whole test, including hooks