# Instructions - Following Playwright test failed. - Explain why, be concise, respect Playwright best practices. - Provide a snippet of code with the fix, if possible. # Test info - Name: src/manager/tests/e2e/booking/booking-create.spec.ts >> should create a booking for a customer with sepa payment - Location: src/manager/tests/e2e/booking/booking-create.spec.ts:16:7 # Error details ``` Test timeout of 60000ms exceeded. ``` ``` Error: locator.waitFor: Test timeout of 60000ms exceeded. Call log: - waiting for locator('.v-dialog:has([data-test-id="booking-create-dialog"]):has(.v-overlay__content:not(.dialog-bottom-transition-enter-active))').locator('fieldset:has(legend:has-text("Payment"))').locator('.ui-radio-group').getByTestId('automatic-payment-option').getByTestId('segmented-card').filter({ hasText: 'sepa •••• 3201' }) to be visible ``` # Page snapshot ```yaml - generic [active] [ref=e1]: - generic [ref=e6]: - banner [ref=e7]: - generic [ref=e8]: - button [ref=e9] [cursor=pointer]: - generic [ref=e11]: 󰍜 - link [ref=e12] [cursor=pointer]: - /url: / - button "AS" [ref=e14] [cursor=pointer]: - generic [ref=e18]: AS - generic: - text: 󰗊 󰅀 - text: 󰷖 󰍃 - navigation [ref=e19]: - list [ref=e21]: - generic [ref=e23]: Dashboard - link "Tasks" [ref=e24] [cursor=pointer]: - /url: /tasks - img [ref=e27] - generic [ref=e30]: Tasks - link "Facility maps" [ref=e31] [cursor=pointer]: - /url: /facility-map - generic [ref=e33]: 󰧾 - generic [ref=e35]: Facility maps - link "Analytics" [ref=e36] [cursor=pointer]: - /url: /dashboard - generic [ref=e38]: 󱖶 - generic [ref=e40]: Analytics - generic [ref=e42]: Sales - link "Bookings" [ref=e43] [cursor=pointer]: - /url: /bookings - generic [ref=e45]: 󰇡 - generic [ref=e47]: Bookings - link "Customers" [ref=e48] [cursor=pointer]: - /url: /customers - generic [ref=e50]: 󰀏 - generic [ref=e52]: Customers - link "Invoices" [ref=e53] [cursor=pointer]: - /url: /invoices - generic [ref=e55]: 󰷉 - generic [ref=e57]: Invoices - link "Credit notes" [ref=e58] [cursor=pointer]: - /url: /credit-notes - img [ref=e61] - generic [ref=e64]: Credit notes - link "Units" [ref=e65] [cursor=pointer]: - /url: /units - generic [ref=e67]: 󰍀 - generic [ref=e69]: Units - generic [ref=e71]: Site Management - link "Locations" [ref=e72] [cursor=pointer]: - /url: /locations - generic [ref=e74]: 󰟙 - generic [ref=e76]: Locations - link "Unit types" [ref=e77] [cursor=pointer]: - /url: /unit-types - generic [ref=e79]: 󰆧 - generic [ref=e81]: Unit types - link "Protection Plans" [ref=e82] [cursor=pointer]: - /url: /insurances - generic [ref=e84]: 󰳌 - generic [ref=e86]: Protection Plans - link "Deposits" [ref=e87] [cursor=pointer]: - /url: /deposits - generic [ref=e89]: 󱙆 - generic [ref=e91]: Deposits - link "Products" [ref=e92] [cursor=pointer]: - /url: /products - generic [ref=e94]: 󰄑 - generic [ref=e96]: Products - link "Discounts" [ref=e97] [cursor=pointer]: - /url: /discounts - generic [ref=e99]: 󰓼 - generic [ref=e101]: Discounts - generic [ref=e102]: - option "Emails" [ref=e103] [cursor=pointer]: - generic [ref=e105]: 󰻨 - generic [ref=e107]: Emails - generic [ref=e109]: 󰅀 - text: 󱡰 󰁥 - generic [ref=e111]: Admin - link "Integrations" [ref=e112] [cursor=pointer]: - /url: /connected-apps - generic [ref=e114]: 󱘖 - generic [ref=e116]: Integrations - link "User & Roles" [ref=e117] [cursor=pointer]: - /url: /users - generic [ref=e119]: 󰭘 - generic [ref=e121]: User & Roles - generic [ref=e122]: - option "Booking Portal" [ref=e123] [cursor=pointer]: - generic [ref=e125]: 󱃁 - generic [ref=e127]: Booking Portal - generic [ref=e129]: 󰅀 - text: 󰖟 󰟙 - generic [ref=e130]: - option "JaneAI" [ref=e131] [cursor=pointer]: - generic [ref=e133]: 󱙺 - generic [ref=e135]: JaneAI - generic [ref=e137]: 󰅀 - text: 󱜹 - generic [ref=e139]: Feedback - link "Voting Portal" [ref=e140] [cursor=pointer]: - /url: /voting-portal - generic [ref=e142]: 󰔔 - generic [ref=e144]: Voting Portal - main [ref=e145]: - generic [ref=e146]: - generic [ref=e148]: - generic [ref=e152]: - generic [ref=e153]: Bookings - heading "Overview" [level=1] [ref=e155]: - generic [ref=e156]: Overview - button "Actions" [ref=e158] [cursor=pointer]: - generic [ref=e159]: - text: Actions - generic [ref=e160]: 󱨉 - generic: 󰐕 - generic [ref=e162]: - generic [ref=e164]: - generic [ref=e166]: - heading "Filters" [level=3] [ref=e168] - button "Reset filters" [ref=e170] [cursor=pointer]: - generic [ref=e171]: Reset filters - generic [ref=e175]: - generic [ref=e180]: - generic [ref=e181]: - generic: Search - textbox "Search" [ref=e182] - text: 󰅙 - generic [ref=e184]: 󰍉 - combobox [ref=e188]: - generic [ref=e189]: - generic: Location - combobox "Location" [ref=e191] - button [ref=e193] [cursor=pointer]: 󰍝 - combobox [ref=e197]: - generic [ref=e198]: - generic: Status - combobox "Status" [ref=e200] - button [ref=e202] [cursor=pointer]: 󰍝 - combobox [ref=e206]: - generic [ref=e207]: - generic: ID verification status - combobox "ID verification status" [ref=e209] - button [ref=e211] [cursor=pointer]: 󰍝 - combobox [ref=e215]: - generic [ref=e216]: - generic: Access status - combobox "Access status" [ref=e218] - button [ref=e220] [cursor=pointer]: 󰍝 - combobox [ref=e224]: - generic [ref=e225]: - generic: Unit type - combobox "Unit type" [ref=e227] - button [ref=e229] [cursor=pointer]: 󰍝 - generic [ref=e234]: - generic [ref=e235]: - generic: Created at - textbox "Created at" [ref=e236] - text: 󰅙 - button "Created at appended action" [ref=e238] [cursor=pointer]: 󰸗 - generic [ref=e240]: - generic [ref=e242]: - generic [ref=e244]: - button "Select all" [ref=e252] [cursor=pointer]: - generic [ref=e254]: 󰄬 - generic [ref=e255]: Select all - generic [ref=e256]: - button "Price adjustment" [disabled] [ref=e260]: - img [ref=e262] - generic [ref=e268]: Price adjustment - button "Remove price adjustment" [disabled] [ref=e272]: - generic [ref=e274]: 󰩺 - generic [ref=e275]: Remove price adjustment - generic [ref=e278]: - button [ref=e279] [cursor=pointer]: - generic [ref=e281]: 󱒇 - generic: 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄲 󰄱 - table [ref=e283]: - rowgroup [ref=e284]: - row "Booking number Location Status Customer Unit type Unit Booking plan Next invoice Created at Move-in Move-out" [ref=e285]: - columnheader [ref=e286]: - generic [ref=e287]: - checkbox [ref=e288] - generic [ref=e290] [cursor=pointer]: 󰄱 - columnheader "Booking number" [ref=e291]: - button "Booking number" [ref=e292] [cursor=pointer]: - generic [ref=e294]: Booking number - generic [ref=e297]: 󰁝 - columnheader "Location" [ref=e298]: - button "Location" [ref=e299] [cursor=pointer]: - generic [ref=e301]: Location - generic [ref=e304]: 󰁝 - columnheader "Status" [ref=e305]: - button "Status" [ref=e306] [cursor=pointer]: - generic [ref=e308]: Status - generic [ref=e311]: 󰁝 - columnheader "Customer" [ref=e312]: - button "Customer" [ref=e313] [cursor=pointer]: - generic [ref=e315]: Customer - generic [ref=e318]: 󰁝 - columnheader "Unit type" [ref=e319]: - generic [ref=e322]: Unit type - columnheader "Unit" [ref=e323]: - button "Unit" [ref=e324] [cursor=pointer]: - generic [ref=e326]: Unit - generic [ref=e329]: 󰁝 - columnheader "Booking plan" [ref=e330]: - button "Booking plan" [ref=e331] [cursor=pointer]: - generic [ref=e333]: Booking plan - generic [ref=e336]: 󰁝 - columnheader "Next invoice" [ref=e337]: - button "Next invoice" [ref=e338] [cursor=pointer]: - generic [ref=e340]: Next invoice - generic [ref=e343]: 󰁝 - columnheader "Created at" [ref=e344]: - button "Created at" [ref=e345] [cursor=pointer]: - generic [ref=e347]: Created at - generic [ref=e350]: 󰁝 - columnheader "Move-in" [ref=e351]: - button "Move-in" [ref=e352] [cursor=pointer]: - generic [ref=e354]: Move-in - generic [ref=e357]: 󰁝 - columnheader "Move-out" [ref=e358]: - button "Move-out" [ref=e359] [cursor=pointer]: - generic [ref=e361]: Move-out - generic [ref=e364]: 󰁝 - row [ref=e365]: - columnheader [ref=e366] - rowgroup [ref=e367]: - 'row "6960-9902 Vienna South Active Kevinio Privato VS 1 sqm Unit Unit 48 #48 Super flex (1 week) 15 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e368]': - cell [ref=e369]: - generic [ref=e370]: - checkbox [ref=e371] - generic [ref=e373] [cursor=pointer]: 󰄱 - cell "6960-9902" [ref=e374]: - link [ref=e375] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e376]: 6960-9902 - cell "Vienna South" [ref=e377]: - link [ref=e378] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e379]: Vienna South - cell "Active" [ref=e380]: - link [ref=e381] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e385]: Active - cell "Kevinio Privato" [ref=e386]: - link [ref=e387] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e390]: Kevinio Privato - cell "VS 1 sqm Unit" [ref=e391]: - link [ref=e392] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e393]: VS 1 sqm Unit - 'cell "Unit 48 #48" [ref=e394]': - link [ref=e395] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e396]: "Unit 48 #48" - cell "Super flex (1 week)" [ref=e397]: - link [ref=e398] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e399]: Super flex (1 week) - cell "15 Apr 2026" [ref=e400]: - link [ref=e401] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e402]: 15 Apr 2026 - cell "8 Apr 2026" [ref=e403]: - link [ref=e404] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e405]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e406]: - link [ref=e407] [cursor=pointer]: - /url: /bookings/69609902 - generic [ref=e408]: 8 Apr 2026 - cell [ref=e409]: - link [ref=e410] [cursor=pointer]: - /url: /bookings/69609902 - 'row "4575-0589 Vienna South Active Kevinio Privato VS 1 sqm Unit Unit 47 #47 Super flex (1 week) 15 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e411]': - cell [ref=e412]: - generic [ref=e413]: - checkbox [ref=e414] - generic [ref=e416] [cursor=pointer]: 󰄱 - cell "4575-0589" [ref=e417]: - link [ref=e418] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e419]: 4575-0589 - cell "Vienna South" [ref=e420]: - link [ref=e421] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e422]: Vienna South - cell "Active" [ref=e423]: - link [ref=e424] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e428]: Active - cell "Kevinio Privato" [ref=e429]: - link [ref=e430] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e433]: Kevinio Privato - cell "VS 1 sqm Unit" [ref=e434]: - link [ref=e435] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e436]: VS 1 sqm Unit - 'cell "Unit 47 #47" [ref=e437]': - link [ref=e438] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e439]: "Unit 47 #47" - cell "Super flex (1 week)" [ref=e440]: - link [ref=e441] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e442]: Super flex (1 week) - cell "15 Apr 2026" [ref=e443]: - link [ref=e444] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e445]: 15 Apr 2026 - cell "8 Apr 2026" [ref=e446]: - link [ref=e447] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e448]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e449]: - link [ref=e450] [cursor=pointer]: - /url: /bookings/45750589 - generic [ref=e451]: 8 Apr 2026 - cell [ref=e452]: - link [ref=e453] [cursor=pointer]: - /url: /bookings/45750589 - 'row "1152-2565-20 Vienna South Active Kevinio Privato VS 1 sqm Unit Unit 46 #46 Super flex (1 week) 15 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e454]': - cell [ref=e455]: - generic [ref=e456]: - checkbox [ref=e457] - generic [ref=e459] [cursor=pointer]: 󰄱 - cell "1152-2565-20" [ref=e460]: - link [ref=e461] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e462]: 1152-2565-20 - cell "Vienna South" [ref=e463]: - link [ref=e464] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e465]: Vienna South - cell "Active" [ref=e466]: - link [ref=e467] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e471]: Active - cell "Kevinio Privato" [ref=e472]: - link [ref=e473] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e476]: Kevinio Privato - cell "VS 1 sqm Unit" [ref=e477]: - link [ref=e478] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e479]: VS 1 sqm Unit - 'cell "Unit 46 #46" [ref=e480]': - link [ref=e481] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e482]: "Unit 46 #46" - cell "Super flex (1 week)" [ref=e483]: - link [ref=e484] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e485]: Super flex (1 week) - cell "15 Apr 2026" [ref=e486]: - link [ref=e487] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e488]: 15 Apr 2026 - cell "8 Apr 2026" [ref=e489]: - link [ref=e490] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e491]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e492]: - link [ref=e493] [cursor=pointer]: - /url: /bookings/1152256520 - generic [ref=e494]: 8 Apr 2026 - cell [ref=e495]: - link [ref=e496] [cursor=pointer]: - /url: /bookings/1152256520 - 'row "3464-5493-9 Vienna South Active Kevinio Privato VS 1 sqm Unit Unit 45 #45 Super flex (1 week) 15 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e497]': - cell [ref=e498]: - generic [ref=e499]: - checkbox [ref=e500] - generic [ref=e502] [cursor=pointer]: 󰄱 - cell "3464-5493-9" [ref=e503]: - link [ref=e504] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e505]: 3464-5493-9 - cell "Vienna South" [ref=e506]: - link [ref=e507] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e508]: Vienna South - cell "Active" [ref=e509]: - link [ref=e510] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e514]: Active - cell "Kevinio Privato" [ref=e515]: - link [ref=e516] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e519]: Kevinio Privato - cell "VS 1 sqm Unit" [ref=e520]: - link [ref=e521] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e522]: VS 1 sqm Unit - 'cell "Unit 45 #45" [ref=e523]': - link [ref=e524] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e525]: "Unit 45 #45" - cell "Super flex (1 week)" [ref=e526]: - link [ref=e527] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e528]: Super flex (1 week) - cell "15 Apr 2026" [ref=e529]: - link [ref=e530] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e531]: 15 Apr 2026 - cell "8 Apr 2026" [ref=e532]: - link [ref=e533] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e534]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e535]: - link [ref=e536] [cursor=pointer]: - /url: /bookings/346454939 - generic [ref=e537]: 8 Apr 2026 - cell [ref=e538]: - link [ref=e539] [cursor=pointer]: - /url: /bookings/346454939 - 'row "2725-9166-6 Vienna South Active Kevinio Privato VS 1 sqm Unit Unit 44 #44 Super flex (1 week) 15 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e540]': - cell [ref=e541]: - generic [ref=e542]: - checkbox [ref=e543] - generic [ref=e545] [cursor=pointer]: 󰄱 - cell "2725-9166-6" [ref=e546]: - link [ref=e547] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e548]: 2725-9166-6 - cell "Vienna South" [ref=e549]: - link [ref=e550] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e551]: Vienna South - cell "Active" [ref=e552]: - link [ref=e553] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e557]: Active - cell "Kevinio Privato" [ref=e558]: - link [ref=e559] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e562]: Kevinio Privato - cell "VS 1 sqm Unit" [ref=e563]: - link [ref=e564] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e565]: VS 1 sqm Unit - 'cell "Unit 44 #44" [ref=e566]': - link [ref=e567] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e568]: "Unit 44 #44" - cell "Super flex (1 week)" [ref=e569]: - link [ref=e570] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e571]: Super flex (1 week) - cell "15 Apr 2026" [ref=e572]: - link [ref=e573] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e574]: 15 Apr 2026 - cell "8 Apr 2026" [ref=e575]: - link [ref=e576] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e577]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e578]: - link [ref=e579] [cursor=pointer]: - /url: /bookings/272591666 - generic [ref=e580]: 8 Apr 2026 - cell [ref=e581]: - link [ref=e582] [cursor=pointer]: - /url: /bookings/272591666 - 'row "1747-8686-73 Vienna South Cancelled Jonni Snowi VS 7 sqm Unit Unit 60 #370 Short term (26 weeks) 8 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e583]': - cell [ref=e584]: - generic [ref=e585]: - checkbox [ref=e586] - generic [ref=e588] [cursor=pointer]: 󰄱 - cell "1747-8686-73" [ref=e589]: - link [ref=e590] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e591]: 1747-8686-73 - cell "Vienna South" [ref=e592]: - link [ref=e593] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e594]: Vienna South - cell "Cancelled" [ref=e595]: - link [ref=e596] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e600]: Cancelled - cell "Jonni Snowi" [ref=e601]: - link [ref=e602] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e605]: Jonni Snowi - cell "VS 7 sqm Unit" [ref=e606]: - link [ref=e607] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e608]: VS 7 sqm Unit - 'cell "Unit 60 #370" [ref=e609]': - link [ref=e610] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e611]: "Unit 60 #370" - cell "Short term (26 weeks)" [ref=e612]: - link [ref=e613] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e614]: Short term (26 weeks) - cell [ref=e615]: - link [ref=e616] [cursor=pointer]: - /url: /bookings/1747868673 - cell "8 Apr 2026" [ref=e617]: - link [ref=e618] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e619]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e620]: - link [ref=e621] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e622]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e623]: - link [ref=e624] [cursor=pointer]: - /url: /bookings/1747868673 - generic [ref=e625]: 8 Apr 2026 - 'row "1363-6274-15 Vienna South Active Kevinio Privato VS 1 sqm Unit Unit 43 #43 Super flex (1 week) 15 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e626]': - cell [ref=e627]: - generic [ref=e628]: - checkbox [ref=e629] - generic [ref=e631] [cursor=pointer]: 󰄱 - cell "1363-6274-15" [ref=e632]: - link [ref=e633] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e634]: 1363-6274-15 - cell "Vienna South" [ref=e635]: - link [ref=e636] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e637]: Vienna South - cell "Active" [ref=e638]: - link [ref=e639] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e643]: Active - cell "Kevinio Privato" [ref=e644]: - link [ref=e645] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e648]: Kevinio Privato - cell "VS 1 sqm Unit" [ref=e649]: - link [ref=e650] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e651]: VS 1 sqm Unit - 'cell "Unit 43 #43" [ref=e652]': - link [ref=e653] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e654]: "Unit 43 #43" - cell "Super flex (1 week)" [ref=e655]: - link [ref=e656] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e657]: Super flex (1 week) - cell "15 Apr 2026" [ref=e658]: - link [ref=e659] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e660]: 15 Apr 2026 - cell "8 Apr 2026" [ref=e661]: - link [ref=e662] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e663]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e664]: - link [ref=e665] [cursor=pointer]: - /url: /bookings/1363627415 - generic [ref=e666]: 8 Apr 2026 - cell [ref=e667]: - link [ref=e668] [cursor=pointer]: - /url: /bookings/1363627415 - 'row "1590-0500-88 Vienna South Active Kevinio Privato VS 3 sqm Unit Unit 16 #122 Short term (6 months) 8 Oct 2026 8 Apr 2026 8 Apr 2026" [ref=e669]': - cell [ref=e670]: - generic [ref=e671]: - checkbox [ref=e672] - generic [ref=e674] [cursor=pointer]: 󰄱 - cell "1590-0500-88" [ref=e675]: - link [ref=e676] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e677]: 1590-0500-88 - cell "Vienna South" [ref=e678]: - link [ref=e679] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e680]: Vienna South - cell "Active" [ref=e681]: - link [ref=e682] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e686]: Active - cell "Kevinio Privato" [ref=e687]: - link [ref=e688] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e691]: Kevinio Privato - cell "VS 3 sqm Unit" [ref=e692]: - link [ref=e693] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e694]: VS 3 sqm Unit - 'cell "Unit 16 #122" [ref=e695]': - link [ref=e696] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e697]: "Unit 16 #122" - cell "Short term (6 months)" [ref=e698]: - link [ref=e699] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e700]: Short term (6 months) - cell "8 Oct 2026" [ref=e701]: - link [ref=e702] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e703]: 8 Oct 2026 - cell "8 Apr 2026" [ref=e704]: - link [ref=e705] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e706]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e707]: - link [ref=e708] [cursor=pointer]: - /url: /bookings/1590050088 - generic [ref=e709]: 8 Apr 2026 - cell [ref=e710]: - link [ref=e711] [cursor=pointer]: - /url: /bookings/1590050088 - 'row "1197-9445-16 Vienna South Active Kevinio Privato VS 1 sqm Unit Unit 42 #42 Super flex (1 week) 15 Apr 2026 8 Apr 2026 8 Apr 2026" [ref=e712]': - cell [ref=e713]: - generic [ref=e714]: - checkbox [ref=e715] - generic [ref=e717] [cursor=pointer]: 󰄱 - cell "1197-9445-16" [ref=e718]: - link [ref=e719] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e720]: 1197-9445-16 - cell "Vienna South" [ref=e721]: - link [ref=e722] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e723]: Vienna South - cell "Active" [ref=e724]: - link [ref=e725] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e729]: Active - cell "Kevinio Privato" [ref=e730]: - link [ref=e731] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e734]: Kevinio Privato - cell "VS 1 sqm Unit" [ref=e735]: - link [ref=e736] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e737]: VS 1 sqm Unit - 'cell "Unit 42 #42" [ref=e738]': - link [ref=e739] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e740]: "Unit 42 #42" - cell "Super flex (1 week)" [ref=e741]: - link [ref=e742] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e743]: Super flex (1 week) - cell "15 Apr 2026" [ref=e744]: - link [ref=e745] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e746]: 15 Apr 2026 - cell "8 Apr 2026" [ref=e747]: - link [ref=e748] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e749]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e750]: - link [ref=e751] [cursor=pointer]: - /url: /bookings/1197944516 - generic [ref=e752]: 8 Apr 2026 - cell [ref=e753]: - link [ref=e754] [cursor=pointer]: - /url: /bookings/1197944516 - 'row "6074-6136-2 Vienna South Active Jonni Snowi VS 7 sqm Unit Unit 59 #369 Short term (26 weeks) 8 Apr 2026 8 Apr 2026 11 Apr 2026" [ref=e755]': - cell [ref=e756]: - generic [ref=e757]: - checkbox [ref=e758] - generic [ref=e760] [cursor=pointer]: 󰄱 - cell "6074-6136-2" [ref=e761]: - link [ref=e762] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e763]: 6074-6136-2 - cell "Vienna South" [ref=e764]: - link [ref=e765] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e766]: Vienna South - cell "Active" [ref=e767]: - link [ref=e768] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e770]: - generic [ref=e772]: Active - img [ref=e776] - cell "Jonni Snowi" [ref=e780]: - link [ref=e781] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e784]: Jonni Snowi - cell "VS 7 sqm Unit" [ref=e785]: - link [ref=e786] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e787]: VS 7 sqm Unit - 'cell "Unit 59 #369" [ref=e788]': - link [ref=e789] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e790]: "Unit 59 #369" - cell "Short term (26 weeks)" [ref=e791]: - link [ref=e792] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e793]: Short term (26 weeks) - cell [ref=e794]: - link [ref=e795] [cursor=pointer]: - /url: /bookings/607461362 - cell "8 Apr 2026" [ref=e796]: - link [ref=e797] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e798]: 8 Apr 2026 - cell "8 Apr 2026" [ref=e799]: - link [ref=e800] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e801]: 8 Apr 2026 - cell "11 Apr 2026" [ref=e802]: - link [ref=e803] [cursor=pointer]: - /url: /bookings/607461362 - generic [ref=e804]: 11 Apr 2026 - generic [ref=e807]: - generic [ref=e808]: - generic [ref=e809]: "Items per page:" - combobox [ref=e812] [cursor=pointer]: - generic [ref=e814]: - generic [ref=e816]: "10" - combobox "Items per page:": "10" - generic [ref=e818]: 󰍝 - generic [ref=e819]: 1-10 of 201 - generic [ref=e820]: - button [disabled]: - generic: - generic: 󰘀 - button [disabled]: - generic: - generic: 󰅁 - button [ref=e821] [cursor=pointer]: - generic [ref=e823]: 󰅂 - button [ref=e824] [cursor=pointer]: - generic [ref=e826]: 󰘁 - contentinfo [ref=e827]: - generic [ref=e828]: - generic [ref=e829]: - text: Kinnovis GmbH - generic [ref=e830]: 󰗦 - text: "2026" - generic [ref=e831]: v2026.04.08 - generic: - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip - dialog: - generic [ref=e834]: - generic [ref=e835]: - generic [ref=e836]: - generic [ref=e837]: - button [ref=e838] [cursor=pointer]: - generic [ref=e840]: 󰅖 - heading "Create booking" [level=2] [ref=e842] - button "Save" [ref=e844] [cursor=pointer]: - generic [ref=e845]: Save - separator [ref=e846] - generic [ref=e848]: - group "General" [ref=e849]: - heading "General" [level=3] [ref=e851]: - generic [ref=e853]: General - generic [ref=e854]: - generic [ref=e857]: - combobox [ref=e859]: - generic [ref=e861]: - generic [ref=e863]: Kevinio Privato (kevinio.privato@gmail.com) - combobox "Customer *" [ref=e864] - button [ref=e866] [cursor=pointer]: 󰍝 - generic: - generic: Customer * - alert [ref=e867] - generic [ref=e870]: - combobox [ref=e872]: - generic [ref=e874]: - generic [ref=e876]: Vienna South - combobox "Location *" [ref=e877] - button [ref=e879] [cursor=pointer]: 󰍝 - generic: - generic: Location * - alert [ref=e880] - generic [ref=e883]: - generic [ref=e885]: - textbox "Move-in date *" [ref=e887]: 8 Apr 2026 - button "Move-in date * appended action" [ref=e889] [cursor=pointer]: 󰸗 - generic: - generic: Move-in date * - alert [ref=e890] - generic [ref=e893]: - generic [ref=e896]: - generic: Note - textbox "Note" [ref=e897] - alert [ref=e898] - group "Products" [ref=e900]: - heading "Products" [level=3] [ref=e902]: - generic [ref=e904]: Products - table [ref=e907]: - rowgroup [ref=e908]: - row "Recurring Booking Period Quantity Price VAT Amount" [ref=e909]: - columnheader "Recurring" [ref=e910]: - text: Recurring - generic [ref=e911]: 󰑓 - columnheader "Booking Period" [ref=e912] - columnheader "Quantity" [ref=e913] - columnheader "Price" [ref=e914] - columnheader "VAT" [ref=e915] - columnheader "Amount" [ref=e916] - rowgroup [ref=e917]: - row "€40.00 20% €40.00" [ref=e918]: - cell [ref=e919]: - generic [ref=e920]: - combobox [ref=e922]: - generic [ref=e924]: - generic [ref=e926]: VS 1 sqm Unit - combobox "Unit type *" [ref=e927] - button [ref=e929] [cursor=pointer]: 󰍝 - generic: - generic: Unit type * - alert [ref=e930] - generic [ref=e932]: - combobox [ref=e934]: - generic [ref=e936]: - generic [ref=e938]: "Unit 49 #49" - combobox "Unit *" [ref=e939] - button [ref=e941] [cursor=pointer]: 󰍝 - generic: - generic: Unit * - alert [ref=e942] - cell [ref=e944]: - generic [ref=e945]: - combobox [ref=e947]: - generic [ref=e949]: - generic [ref=e951]: Super flex (1 week) - combobox "Booking plan *" [ref=e952] - button [ref=e954] [cursor=pointer]: 󰍝 - generic: - generic: Booking plan * - alert [ref=e955] - cell [ref=e957] - cell "€40.00" [ref=e958]: - generic [ref=e959]: €40.00 - cell "20%" [ref=e960]: - generic [ref=e961]: 20% - cell "€40.00" [ref=e962]: - generic [ref=e963]: €40.00 - table [ref=e966]: - rowgroup [ref=e967]: - row "1 week €10.00 20% €10.00" [ref=e968]: - cell [ref=e969]: - generic [ref=e970]: - combobox [ref=e972]: - generic [ref=e974]: - generic [ref=e976]: VS - Insurance weekly - 10 - combobox "Protection plan" [ref=e977] - button "Clear Protection plan" [ref=e979] [cursor=pointer]: 󰅙 - button [ref=e981] [cursor=pointer]: 󰍝 - generic: - generic: Protection plan - alert [ref=e982] - cell "1 week" [ref=e984]: - generic [ref=e985]: 1 week - cell [ref=e986] - cell "€10.00" [ref=e987]: - generic [ref=e988]: €10.00 - cell "20%" [ref=e989]: - generic [ref=e990]: 20% - cell "€10.00" [ref=e991]: - generic [ref=e992]: €10.00 - generic [ref=e993]: - generic: - table - button "Add recurring product" [disabled] [ref=e996] - generic [ref=e997]: - table [ref=e999]: - rowgroup [ref=e1000]: - row "One time Quantity Price VAT Amount" [ref=e1001]: - columnheader "One time" [ref=e1002] - columnheader [ref=e1003] - columnheader "Quantity" [ref=e1004] - columnheader "Price" [ref=e1005] - columnheader "VAT" [ref=e1006] - columnheader "Amount" [ref=e1007] - button "Add one-time product" [ref=e1010] [cursor=pointer] - table [ref=e1013]: - rowgroup [ref=e1014]: - row "Deposit Quantity Price VAT Amount" [ref=e1015]: - columnheader "Deposit" [ref=e1016] - columnheader [ref=e1017] - columnheader "Quantity" [ref=e1018] - columnheader "Price" [ref=e1019] - columnheader "VAT" [ref=e1020] - columnheader "Amount" [ref=e1021] - rowgroup [ref=e1022]: - row [ref=e1023]: - cell [ref=e1024]: - generic [ref=e1025]: - combobox [ref=e1027]: - generic [ref=e1028]: - generic: Deposit - combobox "Deposit" [ref=e1030] - text: 󰅙 - button [ref=e1032] [cursor=pointer]: 󰍝 - alert [ref=e1033] - cell [ref=e1035] - cell [ref=e1036] - cell [ref=e1037] - cell [ref=e1038] - cell [ref=e1039] - table [ref=e1042]: - rowgroup [ref=e1043]: - row "Discount Terms Price Amount" [ref=e1044]: - columnheader "Discount" [ref=e1045] - columnheader "Terms" [ref=e1046] - columnheader [ref=e1047] - columnheader "Price" [ref=e1048] - columnheader [ref=e1049] - columnheader "Amount" [ref=e1050] - button "Add discount" [ref=e1051] [cursor=pointer] - generic [ref=e1057]: - generic [ref=e1058]: - generic [ref=e1059]: Total excl.VAT - generic [ref=e1060]: €50.00 - generic [ref=e1061]: - generic [ref=e1062]: VAT - generic [ref=e1063]: €10.00 - generic [ref=e1064]: - generic [ref=e1065]: Total incl.VAT - generic [ref=e1066]: €60.00 - group "Payment" [ref=e1067]: - heading "Payment" [level=3] [ref=e1069]: - generic [ref=e1071]: Payment - generic [ref=e1074]: - generic [ref=e1076]: - generic [ref=e1078]: - radio "Customer will be charged automatically (after 1st invoice) CARD ONLY" [ref=e1079] - generic [ref=e1082] [cursor=pointer]: - text: Customer will be charged automatically (after 1st invoice) - generic [ref=e1084]: CARD ONLY - generic [ref=e1086]: 󰋽 - generic [ref=e1087]: - generic [ref=e1088]: - radio "Automatically charge with existing payment method" [checked] [ref=e1089] - generic [ref=e1090] [cursor=pointer]: Automatically charge with existing payment method - generic [ref=e1093]: 󰋽 - generic [ref=e1098]: - generic [ref=e1102]: - generic [ref=e1104]: - button "Card Card •••• 4242" [ref=e1105] [cursor=pointer]: - generic [ref=e1106]: - generic [ref=e1108]: 󰄱 - generic [ref=e1110]: - img "Card" [ref=e1111] - generic [ref=e1112]: - generic [ref=e1113]: Card - generic [ref=e1114]: •••• 4242 - button "SEPA via Stripe IBAN •••• 3201" [ref=e1115] [cursor=pointer]: - generic [ref=e1116]: - generic [ref=e1118]: 󰄲 - generic [ref=e1119]: - generic [ref=e1120]: - img "SEPA via Stripe" [ref=e1121] - generic [ref=e1122]: - generic [ref=e1123]: IBAN - generic [ref=e1124]: •••• 3201 - button [ref=e1125]: - generic [ref=e1127]: 󰩺 - alert [ref=e1128] - button "Add payment method" [ref=e1130] [cursor=pointer]: - generic [ref=e1131]: Add payment method - generic [ref=e1133]: - radio "Customer pays each invoice manually via payment-link" [ref=e1134] - generic [ref=e1135] [cursor=pointer]: - text: Customer pays each invoice manually via payment-link - generic [ref=e1138]: 󰋽 - alert [ref=e1139] - tooltip - tooltip - tooltip - tooltip - tooltip - tooltip ``` # Test source ```ts 1 | import { IBookingCreatePayment, IBookingCreatePaymentOption } from '@/manager/modules/booking/types/booking-types'; 2 | import { AddManualPaymentMethodForm } from '@/manager/modules/ui/payment-method/components/AddManualPaymentMethodForm'; 3 | import { AddPaymentMethodDialog } from '@/manager/modules/ui/payment-method/views/AddPaymentMethodDialog'; 4 | import { RadioButton } from '@/manager/shared/components/RadioButton'; 5 | import { getRadioGroupHost, getSegmentedCardHost } from '@/manager/shared/utils/host-utils'; 6 | import { BaseComponent } from '@/shared/base/BaseComponent'; 7 | import { formatPaymentMethod } from '@/shared/utils/format-utils'; 8 | 9 | export class BookingCreatePaymentRadioGroup extends BaseComponent { 10 | readonly main = getRadioGroupHost(this.host); 11 | readonly afterFirstInvoicePaymentSection = this.main.getByTestId('after-first-invoice-payment-option'); 12 | readonly afterFirstInvoiceRadioButton = new RadioButton(this.afterFirstInvoicePaymentSection); 13 | readonly automaticPaymentSection = this.main.getByTestId('automatic-payment-option'); 14 | readonly automaticRadioButton = new RadioButton(this.automaticPaymentSection); 15 | readonly paymentMethodsLoading = this.automaticPaymentSection.getByTestId('payment-methods-dropdown-loading'); 16 | readonly addPaymentMethodButton = this.automaticPaymentSection.getByTestId('add-payment-method-button'); 17 | readonly manualPaymentSection = this.main.getByTestId('manual-payment-option'); 18 | readonly manualPaymentRadioButton = new RadioButton(this.manualPaymentSection); 19 | readonly addManualPaymentMethodForm = new AddManualPaymentMethodForm(this.manualPaymentSection); 20 | 21 | async fill(data: IBookingCreatePayment): Promise { 22 | await this.check(data.option); 23 | 24 | if (data.option === 'charge_automatically' && data.method) { 25 | const paymentMethod = formatPaymentMethod(data.method); 26 | const segmentedCard = getSegmentedCardHost(this.automaticPaymentSection, paymentMethod); 27 | 28 | await this.paymentMethodsLoading.waitFor({ state: 'hidden' }); 29 | 30 | if (await segmentedCard.isHidden()) { 31 | const dialog = await this.openAddPaymentMethodDialog(); > 32 | await Promise.all([segmentedCard.waitFor(), dialog.add(data.method)]); | ^ Error: locator.waitFor: Test timeout of 60000ms exceeded. 33 | } 34 | 35 | await segmentedCard.click(); 36 | } else if (data.option === 'pay_manually' && data.manual) { 37 | await this.addManualPaymentMethodForm.fill(data.manual); 38 | } 39 | } 40 | 41 | private check(option: IBookingCreatePaymentOption): Promise { 42 | switch (option) { 43 | case 'charge_automatically_after_first_invoice': 44 | return this.afterFirstInvoiceRadioButton.check(); 45 | case 'charge_automatically': 46 | return this.automaticRadioButton.check(); 47 | case 'pay_manually': 48 | return this.manualPaymentRadioButton.check(); 49 | } 50 | } 51 | 52 | private async openAddPaymentMethodDialog(): Promise { 53 | await this.addPaymentMethodButton.click(); 54 | return new AddPaymentMethodDialog(this.host.page()); 55 | } 56 | } 57 | ```