Skip to content

Greenhouse real-tenant validation

Companion to the Workday validation. Validated the Greenhouse engine against a live public Greenhouse application form — PerfectServe's "Senior Software Engineer, .NET – US Remote" (job-boards.greenhouse.io/perfectserve/jobs/5826519004). Greenhouse apply forms are public (no account/login), so this was pure read-only inspection — nothing filled, nothing submitted.

What matched (no bug — contrast with Workday)

Modern Greenhouse (job-boards.greenhouse.io) renders core fields with clean, stable ids, and our GreenhouseSelectors.CoreCssChain("#{id}") targets exactly those:

Field Real form Our primary selector Match
First name input#first_name (autocomplete=given-name) #first_name
Last name input#last_name #last_name
Email input#email (type=text, not email) #email (id-based, type-agnostic)
Phone input#phone (type=tel) #phone
Resume input#resume (type=file) input#resume

Because our anchors are id-based (not type='email' etc.), the email field being type=text is a non-issue. The old job_application[first_name] name fallbacks stay for legacy Greenhouse tenants.

Findings

  1. GAP — Location (City) + Country are newer REQUIRED fields the engine doesn't fill. The real form has #candidate-location (label "Location (City)*") and #country, both role=combobox / aria-autocomplete=list / aria-required=true. GreenhouseApplyEngine fills first/last/email/phone only, so these two required fields are left for the user — the app can't complete a modern Greenhouse application without them. Filling them needs the type-then-pick-from-list combobox mechanic (the app has an equivalent for Workday dropdowns and the phone country widget). Deliberately NOT auto-implemented here: it's a new capability, and it can't be validated autonomously without typing into / submitting a real application (which the build never does). Tracked as a follow-up with the exact field ids above.

  2. Minor — the #submit_app primary submit selector is stale on modern Greenhouse. The real submit is <button>Submit application</button> with no id; the button[type='submit'] fallback in SubmitCssChain catches it, and the engine never auto-clicks submit anyway, so this is cosmetic (the primary just never hits on new tenants).

Verdict

Greenhouse core-field selectors are correct against a real modern tenant — no fix needed (unlike Workday, whose contact selectors were genuinely broken). The one substantive gap is the unfilled required Location/Country comboboxes, filed as a follow-up.