# 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/portal/tests/e2e/booking/booking-create.spec.ts >> creates an active booking for a business customer with a monthly plan and card payment - Location: src/portal/tests/e2e/booking/booking-create.spec.ts:131:7 # Error details ``` Test timeout of 120000ms exceeded. ``` ``` Error: locator.click: Test timeout of 120000ms exceeded. Call log: - waiting for locator('div[id=reka-combobox-content-v-42]').locator('div[role=option]:has(span:has-text("Bahamas"))') ``` # Page snapshot ```yaml - generic [ref=f1e3]: - generic [ref=f1e8]: - banner [ref=f1e9]: - generic [ref=f1e11]: - img "Logo of Storeroom Innsbruck" [ref=f1e14] - complementary [ref=f1e15]: - button "English" [ref=f1e17] [cursor=pointer] - button "Help" [ref=f1e23] [cursor=pointer]: - figure [ref=f1e24] - main [ref=f1e30]: - generic [ref=f1e31]: - link "Back" [ref=f1e33] [cursor=pointer]: - /url: /5000500053/unit-type/836900462/options/basket - figure [ref=f1e34] - heading "Your details" [level=1] [ref=f1e39] - generic [ref=f1e41]: - generic [ref=f1e46]: - generic [ref=f1e47]: - generic [ref=f1e48]: Customer type * - combobox "Customer type *" [ref=f1e50]: - option "Private" - option "Business" [selected] - generic [ref=f1e51]: - generic [ref=f1e52]: Company name * - textbox "Company name *" [ref=f1e56]: Frami - Rolfson - generic [ref=f1e57]: - generic [ref=f1e58]: - generic [ref=f1e59]: VAT type - combobox "Show popup" [ref=f1e64] - generic [ref=f1e65]: - generic [ref=f1e66]: VAT number - textbox "VAT number" [ref=f1e70]: BS15714155 - generic [ref=f1e71]: - generic [ref=f1e72]: - generic [ref=f1e73]: First name * - textbox "First name *" [ref=f1e77]: Erik - generic [ref=f1e78]: - generic [ref=f1e79]: Last name * - textbox "Last name *" [ref=f1e83]: Greenfelder - generic [ref=f1e84]: - generic [ref=f1e85]: - generic [ref=f1e86]: Email address * - textbox "Email address *" [ref=f1e90]: erik_greenfelder24@hotmail.com - generic [ref=f1e91]: - generic [ref=f1e92]: Mobile phone number * - generic [ref=f1e96]: - generic [ref=f1e97]: - button "Show popup" [ref=f1e100] [cursor=pointer]: - img "United States of America" [ref=f1e101] - generic [ref=f1e104]: "+1" - textbox "Mobile phone number * +1" [active] [ref=f1e105]: "8242151612" - generic [ref=f1e106]: - generic [ref=f1e107]: Street and house number * - textbox "Street and house number *" [ref=f1e111]: 3752 S Broadway - generic [ref=f1e112]: - generic [ref=f1e113]: - generic [ref=f1e114]: Postcode * - textbox "Postcode *" [ref=f1e118]: 44563-7125 - generic [ref=f1e119]: - generic [ref=f1e120]: City * - textbox "City *" [ref=f1e124]: Farrellville - generic [ref=f1e125]: - generic [ref=f1e126]: Country * - combobox "Show popup" [ref=f1e131] - list [ref=f1e134]: - listitem [ref=f1e135]: This field is required - generic [ref=f1e136]: - generic [ref=f1e139]: - checkbox "I have read and understood the terms and conditions *" - generic [ref=f1e145] [cursor=pointer]: - generic [ref=f1e146]: - text: I have read and understood the - link "terms and conditions" [ref=f1e147]: - /url: https://www.storeroom.com/gtc - text: "*" - generic [ref=f1e150]: - checkbox "I agree to the privacy policy guidelines *" - generic [ref=f1e156] [cursor=pointer]: - generic [ref=f1e157]: - text: I agree to the - link "privacy policy guidelines" [ref=f1e158]: - /url: https://www.storeroom.com/privacy - text: "*" - generic [ref=f1e161]: - checkbox "I have read and understood the forbidden items policy *" - generic [ref=f1e167] [cursor=pointer]: - generic [ref=f1e168]: - text: I have read and understood the - link "forbidden items policy" [ref=f1e169]: - /url: https://www.storeroom.com/forbidden-items/gtc - text: "*" - generic [ref=f1e172]: - checkbox "I have read and understood the cancellation policy *" - generic [ref=f1e178] [cursor=pointer]: - generic [ref=f1e179]: - text: I have read and understood the - link "cancellation policy" [ref=f1e180]: - /url: https://www.storeroom.com/cancellation-policy - text: "*" - button "Book and pay now" [ref=f1e182] [cursor=pointer] - complementary [ref=f1e184]: - generic [ref=f1e185]: - generic [ref=f1e187]: - generic [ref=f1e188]: - heading "Storeroom Innsbruck" [level=2] [ref=f1e189] - generic [ref=f1e190]: Gewerbepark 2, 6010 Innsbruck - img "Image of the facility named \"Storeroom Innsbruck\"" [ref=f1e193] - separator [ref=f1e194] - generic [ref=f1e195]: - generic [ref=f1e196]: Move-in date - generic [ref=f1e198]: Oct 5, 2026 - separator [ref=f1e200] - generic [ref=f1e201]: - generic [ref=f1e202]: - generic [ref=f1e203]: - generic [ref=f1e204]: VI 30 sqm Unit - generic [ref=f1e205]: every 12 months - generic [ref=f1e206]: €6,300.00 - generic [ref=f1e210]: - generic [ref=f1e211]: - generic [ref=f1e212]: VI - Insurance monthly - 10 - generic [ref=f1e213]: every 12 months - generic [ref=f1e214]: €90.00 - generic [ref=f1e216]: - separator [ref=f1e217] - generic [ref=f1e221]: - generic [ref=f1e222]: - generic [ref=f1e223]: Discount code - generic [ref=f1e224]: €20.00 off forever - button "Remove" [ref=f1e225] [cursor=pointer] - separator [ref=f1e227] - generic [ref=f1e228]: - generic [ref=f1e229]: - generic [ref=f1e230]: Total - generic [ref=f1e231]: first invoice - generic [ref=f1e234]: - generic [ref=f1e235]: €6,390.00 - generic [ref=f1e236]: €6,370.00 - generic [ref=f1e237]: - generic [ref=f1e238]: - generic [ref=f1e239]: Recurring payment - generic [ref=f1e240]: every 12 months - generic [ref=f1e243]: - generic [ref=f1e244]: €6,390.00 - generic [ref=f1e245]: €6,370.00 - contentinfo [ref=f1e246]: - separator [ref=f1e247] - generic [ref=f1e248]: - link "Imprint" [ref=f1e249] [cursor=pointer]: - /url: https://www.storeroom.com/imprint - generic [ref=f1e250]: • - link "Data privacy" [ref=f1e251] [cursor=pointer]: - /url: https://www.storeroom.com/privacy - generic [ref=f1e252]: • - button "Privacy settings" [ref=f1e253] [cursor=pointer] ``` # Test source ```ts 1 | import { BaseComponent } from '@/shared/base/BaseComponent'; 2 | import { getAttribute } from '@/shared/utils/locator-utils'; 3 | import { Locator } from '@playwright/test'; 4 | 5 | export class SingleAutocomplete extends BaseComponent { 6 | private readonly input = this.host.locator('input'); 7 | private readonly clearButton = this.host.getByRole('button'); 8 | 9 | async fill(value: string): Promise { 10 | if (await this.clearButton.isVisible()) { 11 | await this.clearButton.click(); 12 | } 13 | 14 | await this.input.fill(value); > 15 | await (await this.getMenuOption(value)).click({ force: true }); // TODO: force option used until FE reka ui combobox bug is resolved | ^ Error: locator.click: Test timeout of 120000ms exceeded. 16 | } 17 | 18 | private async getMenuOption(name: string): Promise { 19 | return (await this.getMenu()).locator(`div[role=option]:has(span:has-text("${name}"))`); 20 | } 21 | 22 | private async getMenu(): Promise { 23 | const id = await getAttribute(this.input, 'aria-controls'); 24 | return this.host.page().locator(`div[id=${id}]`); 25 | } 26 | } 27 | ```