Skip to content

domain-skills/united: full checkout flow #152

Open
bilaldaqqah wants to merge 2 commits into
browser-use:mainfrom
bilaldaqqah:skill/united-checkout
Open

domain-skills/united: full checkout flow #152
bilaldaqqah wants to merge 2 commits into
browser-use:mainfrom
bilaldaqqah:skill/united-checkout

Conversation

@bilaldaqqah
Copy link
Copy Markdown
Contributor

@bilaldaqqah bilaldaqqah commented Apr 22, 2026

End-to-end booking on united.com: search → fare → traveler → seatmap → checkout, all in one session.

Highlights

  • Akamai is present but NOT blocking when driving from the user's real persistent Chrome via CDP. _abck cookie stays ~0~ (unflagged) through every step. No sensor_data
    challenge, no 403/429, no PerimeterX. This contradicts what stock Playwright typically sees on this site.
  • Coordinate-click trap: click(x, y) on the homepage Find-flights submit and fare-drawer Select buttons is pixel-correct but React's synthetic-event handler never fires. Switch
    to element.click() via js() — works everywhere.
  • Basic Economy ack checkbox: Select button is silently disabled="" until an unlabeled ack checkbox inside .basicFooter--* is clicked.
  • Name-based selectors: IDs are UUIDs, but input[name="rtiTraveler.travelers[0].firstName|...]" and input[name="commonpayment.cardInfo.cardNumber|expiryDate|..."] are stable.
  • No tokenization iframe for PAN/CVV — direct <input type=tel> elements.
  • #stateFilter is an autocomplete text input, not a select.

Summary by cubic

Adds a united.com flight checkout skill doc focused on reliable automation from real Chrome (CDP). Covers the full flow with stable selectors, JS click guidance, and Akamai notes (no _abck flagging), plus small fixes to selectors and waits.

  • New Features

    • URL map for home → search → fare → travelers → seats → checkout with cartId.
    • Stable selectors for search widget, fare drawer, traveler form, and payment fields.
    • Interaction guidance: prefer element.click(); use coordinate clicks only to focus text inputs.
    • Notes on Basic Economy acknowledgment checkbox and #stateFilter autocomplete.
    • Wait tips for React hydration and animations to avoid flaky probes.
    • Anti-bot: Akamai cookies (_abck, bm_*) present but not flagged; no login required to reach card entry.
  • Bug Fixes

    • Corrected regex grouping for fare price button selector.
    • Tuned sleep ranges after transitions and autocompletes to reduce flakiness.

Written for commit 931ed87. Summary will update on new commits.

@browser-harness-review
Copy link
Copy Markdown

browser-harness-review Bot commented Apr 22, 2026

✅ Skill review passed

Reviewed 1 file(s) — no findings.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 1 file

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="domain-skills/united/checkout.md">

<violation number="1" location="domain-skills/united/checkout.md:48">
P2: Ungrouped regex alternation broadens fare-button matching and can select unintended elements.</violation>

<violation number="2" location="domain-skills/united/checkout.md:128">
P2: The documented Python wait example uses `time.sleep(3-5)`, which evaluates to a negative duration and will raise at runtime if copied.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

Comment thread domain-skills/united/checkout.md Outdated
Comment thread domain-skills/united/checkout.md Outdated
@bilaldaqqah bilaldaqqah changed the title domain-skills/united: checkout — Akamai-friendly from real Chrome, na… domain-skills/united: full checkout flow Apr 22, 2026
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="domain-skills/united/checkout.md">

<violation number="1" location="domain-skills/united/checkout.md:48">
P2: Stable selector regex uses `.*`, which is not newline-safe and can fail to match multiline fare-card `innerText`.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

- `#DepartDate_start` (input with value like `Apr 29`)

Results / fare drawer:
- Price card buttons: `button` whose innerText matches `/From\s*\$\d+.*(Economy|First)/` (no stable id — the id attribute is empty).
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Stable selector regex uses .*, which is not newline-safe and can fail to match multiline fare-card innerText.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At domain-skills/united/checkout.md, line 48:

<comment>Stable selector regex uses `.*`, which is not newline-safe and can fail to match multiline fare-card `innerText`.</comment>

<file context>
@@ -45,7 +45,7 @@ Home search widget:
 
 Results / fare drawer:
-- Price card buttons: `button` whose innerText matches `/From\s*\$\d+.*Economy|First/` (no stable id — the id attribute is empty).
+- Price card buttons: `button` whose innerText matches `/From\s*\$\d+.*(Economy|First)/` (no stable id — the id attribute is empty).
 - Basic Economy ack checkbox: `input[type=checkbox]` inside `.app-pod-shopping-nestedFSR-NestedPriceCards-styles__basicFooter--*` (UUID id).
 - Fare Select buttons: `button[aria-label^="Select United Economy Basic"]`, `"Select United Economy Standard"`, `"Select United Economy Flexible"`. Each has `aria-describedby="nested-atc-btn-ECO-BASIC|ECO-STANDARD|ECO-FLEX"` — stable across rows.
</file context>
Suggested change
- Price card buttons: `button` whose innerText matches `/From\s*\$\d+.*(Economy|First)/` (no stable id — the id attribute is empty).
- Price card buttons: `button` whose innerText matches `/From\s*\$\d+[\s\S]*(Economy|First)/` (no stable id — the id attribute is empty).
Fix with Cubic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants