Domain skill
alaska
Markdown synced from browser-harness domain skills.
- Host
- alaska
- Files
- 1
Agent prompt
Use this skill
Copy this prompt into your coding agent to make it enable browser-harness domain skills and read this exact domain folder before automating.
Set up https://github.com/browser-use/browser-harness for me if it is not already installed. If setup is needed, read `install.md` first to install and connect it to my real browser. Then read `SKILL.md` for normal usage and always read `helpers.py` because that is where the browser-harness functions are. Enable domain skills if they are not already enabled by setting `BH_DOMAIN_SKILLS=1` for browser-harness. Use the `alaska` domain skill from `agent-workspace/domain-skills/alaska/`. Read every markdown file for this domain before inventing an approach: - agent-workspace/domain-skills/alaska/checkout.md Use those domain-skill notes to complete my task for `alaska` in my real browser. When you open a setup, verification, or task tab, activate it so I can see the active browser tab.
Skill contents
What the agent will read
guest checkout to card-entry
checkout.md
- Drives www.alaskaair.com from search through the credit-card entry form as a guest. No login needed. Reaches a filled payment form; stop before Book now.
- Results deep link (cash mode once toggled): https://www.alaskaair.com/search/results?O={orig}&D={dest}&OD={YYYY-MM-DD}&A=1&C=0&L=0&RT=false. The site sometimes lands in award/points mode. Flip via the Money/Points...
- Cart: https://www.alaskaair.com/search/cart?... — arrived via Add to cart from results.
- Guest info: https://www.alaskaair.com/book/guest-info — arrived via Continue as guest from cart.
Show full markdown
Drives www.alaskaair.com from search through the credit-card entry form as a guest. No login needed. Reaches a filled payment form; stop before Book now.
URL patterns
- Results deep link (cash mode once toggled):
https://www.alaskaair.com/search/results?O={orig}&D={dest}&OD={YYYY-MM-DD}&A=1&C=0&L=0&RT=false. The site sometimes lands in award/points mode. Flip via theMoney/Pointstoggle (see selectors). - Cart:
https://www.alaskaair.com/search/cart?...— arrived viaAdd to cartfrom results. - Guest info:
https://www.alaskaair.com/book/guest-info— arrived viaContinue as guestfrom cart. - Seat selection:
https://www.alaskaair.com/book/seat-selection. - Review & pay:
https://www.alaskaair.com/book/checkout— the payment page, card fields live here.
Framework — Auro design system (Alaska's web components)
The site is built on Alaska's Auro components. Every form control is a custom element whose real state lives on the wrapper, not the shadow-DOM internals. Setting .value programmatically does not satisfy the form validator. Validators trigger "Invalid X" errors unless the value was set by a real keystroke or a click-driven auro-menuoption selection.
Reliable patterns:
- Text fields (
AURO-INPUT): click the wrapper, thentype_text(...). Do not set.valueand hope it sticks. - Selects (
AURO-SELECT): click the wrapper to open the dropdown, then click the matchingauro-menuoption(has avalue=attribute). A sibling native<select id="native-select-{id}">exists but is not the validator source of truth. - Buttons: the visible CTAs are
FS-AURO-BUTTONorAURO-BUTTON. Coordinate-click them; their center is a stable target.
Card fields — CyberSource Flex Microform
PAN and Security Code are served from two separate cross-origin iframes from flex.cybersource.com/microform/bundle/v2.9.0/iframe.html. A coordinate click on the visible iframe box does not reliably focus the inner input (observed: click + type_text landed nowhere).
The approach that works:
- Find the iframe
targetIds viacdp("Target.getTargets")filtered on"cybersource" in url— there are exactly two. - Focus the input inside the iframe with
js("document.getElementById('number').focus()", target_id=pan_frame_id)(CVV input id issecurityCode). - Call
type_text(...)—Input.insertTextis routed to whatever element currently has focus, including cross-origin iframes, so the value lands in the Microform without touching frame coordinates.
PAN field id inside iframe: number. CVV id: securityCode. Both at the frame document root.
Stable selectors (guest-info + checkout)
#firstName,#lastName— AURO-INPUT text fields (traveler 1).#gender,#dateOfBirthMonth— AURO-SELECT; pick option viaauro-menuoption[value=...]after opening.#dateOfBirthDay,#dateOfBirthYear— AURO-INPUT digits.#email,#phone,#zipCode— AURO-INPUT under contact info.#saver-upsell-dialog—FS-AURO-DIALOGthat appears after picking a Saver fare with aContinue with SaverFS-AURO-BUTTONinside. Find by walking into light-DOM descendants; click by rect, not selector.#expiration-month,#expiration-year— card exp AURO-SELECT; options are plain two-digit values like12,2029.#name,#addressLineOne,#billingInfoCity,#billingInfoZipCode— AURO-INPUT billing fields.#billingInfoState— AURO-SELECT; option values are 2-letter state codes (NY).- Insurance:
#TripInsurance_AWP0(yes) /#TripInsurance_AWP1(no). These radios render off-screen visually (e.g.x ≈ -15000)..click()via JS works; coordinate click does not. - "Credit/debit card" payment-method radio: not an
<input>— a plainBUTTONnext to aSPANwith textCredit/debit card. Click the span/button by rect.
What doesn't work
el.value = "..."on any Auro form element: display may update, but Auro's validator emits "Invalid X" on submit anyway. Always type or click-select.- Coordinate clicks on CyberSource iframe boxes +
type_text: focus doesn't land in the inner input. Use the iframe-target-focus pattern above. - Deep-search
document.querySelectorAll('button')for dialog CTAs: Auro buttons areFS-AURO-BUTTONcustom elements, notBUTTON. Filter ontagName.includes('AURO-BUTTON')and walkshadowRootchains.
Waits
- After clicking
Continue with Saver: 3-5s for Svelte/Sapper transition to the trip-summary view. - After
Continue as guest: 5-6s to load/book/guest-info. - After
Continueon guest-info: 5-6s; re-check URL (/book/seat-selection) because validation errors keep you on the same URL with no thrown exception. - After
Skip seats: 5-6s to/book/checkout.
Traps
- Homepage (
alaskaair.com) pops a credit-card promo modal on load; deep-linking straight to/search/results?...avoids it entirely. - The results deep link lands in points/award mode by default. There is a single
button[role=switch]withinnerText="Money\nPoints\nPoints"—.click()toggles it. - The "Protect your trip" insurance section is required and blocks advancing with no error until you select No. Use
document.getElementById('TripInsurance_AWP1').click()— the radio is visually hidden atx ≈ -15000, so coordinate clicks won't find it. - reCAPTCHA Enterprise badge appears on
/book/checkout. It did not challenge in this run; behavior under heavy scripted sessions is unknown.
Known-working fake data shape
Cash fare SEA→PDX one-way, $249 Saver, April 29 2026 — smallest reachable price path. Swap O=/D= in the deep link for other Alaska hubs (LAX, SFO, PDX, SAN).