# 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 >> should create a booking for a private customer with move-in date today, monthly plan and card payment - Location: src/portal/tests/e2e/booking/booking-create.spec.ts:18:7 # Error details ``` Test timeout of 60000ms exceeded. ``` ``` Error: page.waitForURL: Test timeout of 60000ms exceeded. =========================== logs =========================== waiting for navigation to "**/checkout/success?*lang=en" until "load" navigated to "http://booking-spa-dev:8080/5000500050/checkout/step/create-booking?lang=en" ============================================================ ``` # Page snapshot ```yaml - generic [ref=e3]: - generic [ref=e9]: - banner [ref=e10]: - generic [ref=e12]: - img "Logo of Storeroom Innsbruck" [ref=e15] - complementary [ref=e16]: - button "English" [ref=e18] [cursor=pointer]: - text: English - img [ref=e19] - button "Help" [ref=e24] [cursor=pointer]: - figure [ref=e25]: - img [ref=e27] - main [ref=e31]: - heading "Creating booking" [level=1] [ref=e34] - generic [ref=e36]: - generic [ref=e41]: - generic [ref=e42]: - figure [ref=e45]: - img [ref=e47] - heading "We are finishing your booking. It just takes a few seconds." [level=3] [ref=e49] - main [ref=e50]: - paragraph [ref=e51]: Please do not close the window! - complementary [ref=e52]: - generic [ref=e53]: - generic [ref=e55]: - generic [ref=e56]: - heading "Storeroom Innsbruck" [level=2] [ref=e57] - generic [ref=e58]: Gewerbepark 2, 6010 Innsbruck - img "Image of the facility named \"Storeroom Innsbruck\"" [ref=e61] - generic [ref=e62]: - separator [ref=e63] - generic [ref=e65]: - generic [ref=e66]: - generic [ref=e68]: Move-in date - generic [ref=e70]: Apr 9, 2026 - separator [ref=e71] - generic [ref=e74]: - generic [ref=e75]: - generic [ref=e76]: VI 30 sqm Unit - generic [ref=e77]: every 3 months - generic [ref=e78]: - generic [ref=e79]: €2,394.00 - generic [ref=e80]: (incl. tax) - separator [ref=e81] - generic [ref=e82]: - generic [ref=e83]: - generic [ref=e84]: Total - generic [ref=e85]: first invoice - generic [ref=e86]: - generic [ref=e89]: €2,394.00 - generic [ref=e90]: (incl. tax) - generic [ref=e93]: - generic [ref=e94]: - generic [ref=e95]: Recurring payment - generic [ref=e96]: every 3 months - generic [ref=e97]: - generic [ref=e100]: €2,394.00 - generic [ref=e101]: (incl. tax) - contentinfo [ref=e102]: - separator [ref=e103] - generic [ref=e104]: - link "Imprint" [ref=e105] [cursor=pointer]: - /url: https://www.storeroom.com/imprint - generic [ref=e106]: "|" - link "Data privacy" [ref=e107] [cursor=pointer]: - /url: https://www.storeroom.com/privacy ``` # Test source ```ts 1 | import { BookingStripePaymentElement } from '@/portal/modules/booking/components/BookingStripePaymentElement'; 2 | import { BookingSuccessView } from '@/portal/modules/booking/views/BookingSuccessView'; 3 | import { BaseView } from '@/shared/base/BaseView'; 4 | import { IPaymentMethod } from '@/shared/modules/payment-method/types/payment-method-types'; 5 | 6 | export class BookingPaymentView extends BaseView { 7 | readonly stripeBody = this.host.getByTitle('Secure payment input frame').frameLocator(':scope').locator('body'); 8 | readonly stripePaymentElement = new BookingStripePaymentElement(this.stripeBody); 9 | readonly stripeFieldError = this.stripeBody.locator('.Error'); 10 | readonly stripeAlertError = this.host.getByTestId('stripe-error'); 11 | readonly payNowButton = this.host.getByTestId('pay-now-button'); 12 | 13 | async fill(paymentMethod: IPaymentMethod): Promise { 14 | switch (paymentMethod.kind) { 15 | case 'card': 16 | await this.stripePaymentElement.fillCardInfo(paymentMethod); 17 | break; 18 | case 'sepa': 19 | await this.stripePaymentElement.fillSepaInfo(paymentMethod); 20 | break; 21 | } 22 | } 23 | 24 | async confirm(): Promise { > 25 | await Promise.all([this.host.waitForURL('**/checkout/success?*lang=en'), this.payNowButton.click()]); | ^ Error: page.waitForURL: Test timeout of 60000ms exceeded. 26 | return new BookingSuccessView(this.host); 27 | } 28 | } 29 | ```