# 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/invoice/invoice-issue-credit-note.spec.ts >> issues a partial credit note for an open invoice with multiple items by unselecting items
- Location: src/manager/tests/e2e/invoice/invoice-issue-credit-note.spec.ts:29:7
# Error details
```
Error: locator.setChecked: Clicking the checkbox did not change its state
Call log:
- waiting for locator('.v-dialog:has([data-test-id="invoice-issue-credit-note-dialog"]):has(.v-overlay__content:not(.dialog-bottom-transition-enter-active))').locator('fieldset:has(legend:has-text("Items to credit"))').getByTestId('credit-note-line-item').filter({ hasText: 'Elegant Product MYYqDs' }).getByTestId('column-description').locator('input[type=checkbox]:not(.disabled)')
- locator resolved to
- attempting click action
- waiting for element to be visible, enabled and stable
- element is visible, enabled and stable
- scrolling into view if needed
- done scrolling
- performing click action
- click action done
- waiting for scheduled navigations to finish
- navigations have finished
```
# Page snapshot
```yaml
- generic [ref=f1e1]:
- generic [ref=f1e6]:
- navigation [ref=f1e7]:
- generic [ref=f1e9]:
- link [ref=f1e10] [cursor=pointer]:
- /url: /
- generic [ref=f1e11]:
- generic [ref=f1e12]: KINNOVIS
- generic [ref=f1e13]: Manager
- button [ref=f1e15] [cursor=pointer]
- list [ref=f1e19]:
- generic [ref=f1e21]: Dashboard
- link "Tasks" [ref=f1e23] [cursor=pointer]:
- /url: /tasks
- link "Facility maps" [ref=f1e30] [cursor=pointer]:
- /url: /facility-map
- generic [ref=f1e31]:
- link "Analytics" [ref=f1e35] [cursor=pointer]:
- /url: /dashboard
- generic [ref=f1e36]:
- generic [ref=f1e40]: Sales
- link "Bookings" [ref=f1e42] [cursor=pointer]:
- /url: /bookings
- generic [ref=f1e43]:
- link "Customers" [ref=f1e47] [cursor=pointer]:
- /url: /customers
- generic [ref=f1e48]:
- link "Invoices" [ref=f1e52] [cursor=pointer]:
- /url: /invoices
- generic [ref=f1e53]:
- link "Credit notes" [ref=f1e57] [cursor=pointer]:
- /url: /credit-notes
- link "Units" [ref=f1e64] [cursor=pointer]:
- /url: /units
- generic [ref=f1e65]:
- generic [ref=f1e69]: Site management
- link "Locations" [ref=f1e71] [cursor=pointer]:
- /url: /locations
- generic [ref=f1e72]:
- link "Unit types" [ref=f1e76] [cursor=pointer]:
- /url: /unit-types
- generic [ref=f1e77]:
- link "Protection Plans" [ref=f1e81] [cursor=pointer]:
- /url: /insurances
- generic [ref=f1e82]:
- link "Deposits" [ref=f1e86] [cursor=pointer]:
- /url: /deposits
- generic [ref=f1e87]:
- link "Products" [ref=f1e91] [cursor=pointer]:
- /url: /products
- generic [ref=f1e92]:
- link "Discounts" [ref=f1e96] [cursor=pointer]:
- /url: /discounts
- generic [ref=f1e97]:
- generic [ref=f1e101]:
- option "Emails" [ref=f1e102] [cursor=pointer]:
- generic [ref=f1e103]:
- generic [ref=f1e107]:
- text:
- link "Document templates" [ref=f1e111] [cursor=pointer]:
- /url: /document-templates
- generic [ref=f1e112]:
- generic [ref=f1e116]: Admin
- link "Integrations" [ref=f1e118] [cursor=pointer]:
- /url: /connected-apps
- generic [ref=f1e119]:
- link "User & Roles" [ref=f1e123] [cursor=pointer]:
- /url: /users
- generic [ref=f1e124]:
- generic [ref=f1e128]:
- option "Booking Portal" [ref=f1e129] [cursor=pointer]:
- generic [ref=f1e130]:
- generic [ref=f1e134]:
- text:
- generic [ref=f1e138]:
- option "JaneAI" [ref=f1e139] [cursor=pointer]:
- generic [ref=f1e140]:
- generic [ref=f1e144]:
- text:
- generic [ref=f1e148]: Feedback
- link "Voting Portal" [ref=f1e150] [cursor=pointer]:
- /url: /voting-portal
- generic [ref=f1e151]:
- generic [ref=f1e157]:
- button "AS Andreas Stadler andreas.stadler@storeroom.at" [ref=f1e160] [cursor=pointer]:
- generic [ref=f1e161]: AS
- generic [ref=f1e164]:
- generic [ref=f1e165]: Andreas Stadler
- generic "andreas.stadler@storeroom.at" [ref=f1e166]
- generic [ref=f1e167]:
- generic:
- button [ref=f1e168] [cursor=pointer]:
- generic [ref=f1e169]:
- main [ref=f1e171]:
- generic [ref=f1e173]:
- generic [ref=f1e175]:
- generic [ref=f1e176]:
- link "Invoices" [ref=f1e177] [cursor=pointer]:
- /url: /invoices
- generic [ref=f1e179]:
- generic [ref=f1e180]: INV-2103883
- generic [ref=f1e181]: Open
- button [ref=f1e187] [cursor=pointer]:
- generic [ref=f1e188]:
- text: Actions
- generic [ref=f1e189]:
- generic:
- generic [ref=f1e191]:
- generic [ref=f1e193]:
- heading "General" [level=3] [ref=f1e197]
- table [ref=f1e200]:
- rowgroup [ref=f1e201]:
- row [ref=f1e202]:
- rowheader "Location" [ref=f1e203]
- cell "Vienna South" [ref=f1e204]
- row [ref=f1e207]:
- rowheader "Issue date" [ref=f1e208]
- cell "18 Aug 2026" [ref=f1e209]
- row [ref=f1e212]:
- rowheader "Due date" [ref=f1e213]
- cell "20 Aug 2026" [ref=f1e214]
- row [ref=f1e217]:
- rowheader "Total" [ref=f1e218]
- cell "€840.00" [ref=f1e219]
- row [ref=f1e222]:
- rowheader "Amount due" [ref=f1e223]
- cell "€840.00" [ref=f1e224]
- row [ref=f1e227]:
- rowheader "Period" [ref=f1e228]
- cell "-" [ref=f1e229]
- row [ref=f1e232]:
- rowheader "Payment option" [ref=f1e233]
- cell "Manual" [ref=f1e234]
- row [ref=f1e237]:
- rowheader "Payment link" [ref=f1e238]
- cell "https://invoice.stripe.com/i/acct_1MeJfDB0vsavZFES/test_YWNjdF8xTWVKZkRCMHZzYXZaRkVTLF9WNW1QUnBkOWROVUdHRzJsVEY5cEllVUszbWRWZ3ZvLDE3NzU1MzU1Nw0200lpZqzMxC?s=ap" [ref=f1e239]:
- generic [ref=f1e240]:
- generic [ref=f1e241]: https://invoice.stripe.com/i/acct_1MeJfDB0vsavZFES/test_YWNjdF8xTWVKZkRCMHZzYXZaRkVTLF9WNW1QUnBkOWROVUdHRzJsVEY5cEllVUszbWRWZ3ZvLDE3NzU1MzU1Nw0200lpZqzMxC?s=ap
- button [ref=f1e245] [cursor=pointer]:
- generic [ref=f1e246]:
- generic [ref=f1e249]:
- heading "Customer details" [level=3] [ref=f1e253]
- table [ref=f1e256]:
- rowgroup [ref=f1e257]:
- row [ref=f1e258]:
- rowheader "Name" [ref=f1e259]
- cell [ref=f1e260]:
- link "Leona Sporer" [ref=f1e263] [cursor=pointer]:
- /url: /customers/1590050088
- row [ref=f1e266]:
- rowheader "Customer type" [ref=f1e267]
- cell "Private" [ref=f1e268]
- row [ref=f1e271]:
- rowheader "Email" [ref=f1e272]
- cell [ref=f1e273]:
- link "claudie_kassulke54@hotmail.com" [ref=f1e276] [cursor=pointer]:
- /url: mailto:claudie_kassulke54@hotmail.com
- row [ref=f1e277]:
- rowheader "Phone number" [ref=f1e278]
- cell "+43 2514 044369" [ref=f1e279]
- row [ref=f1e282]:
- rowheader "Billing address" [ref=f1e283]
- cell "Haley Mall 33537-9201 North Kiel Austria" [ref=f1e284]
- generic [ref=f1e288]:
- heading "Payments" [level=3] [ref=f1e292]
- generic [ref=f1e296]:
- table [ref=f1e300]:
- rowgroup [ref=f1e301]:
- row [ref=f1e302]:
- columnheader [ref=f1e303]:
- button "Total" [ref=f1e304] [cursor=pointer]:
- generic [ref=f1e307]:
- columnheader [ref=f1e310]:
- button "Status" [ref=f1e311] [cursor=pointer]:
- generic [ref=f1e314]:
- columnheader [ref=f1e317]:
- button "Invoice no." [ref=f1e318] [cursor=pointer]:
- generic [ref=f1e321]:
- columnheader [ref=f1e324]:
- button "Date" [ref=f1e325] [cursor=pointer]:
- generic [ref=f1e328]:
- columnheader [ref=f1e331]:
- button "Payment method" [ref=f1e332] [cursor=pointer]:
- generic [ref=f1e335]:
- row [ref=f1e338]:
- columnheader [ref=f1e339]
- rowgroup [ref=f1e340]:
- row [ref=f1e341]:
- cell "€840.00" [ref=f1e342]
- cell "Not paid yet" [ref=f1e344]
- cell "INV-2103883" [ref=f1e349]
- cell "18 Aug 2026" [ref=f1e351]
- cell [ref=f1e353]
- generic [ref=f1e356]:
- generic [ref=f1e357]:
- generic [ref=f1e358]: "Items per page:"
- combobox [ref=f1e361]:
- generic [ref=f1e363] [cursor=pointer]:
- generic [ref=f1e364]: "10"
- combobox "Items per page:": "10"
- generic [ref=f1e366]:
- generic [ref=f1e368]: 1-1 of 1
- generic [ref=f1e369]:
- button [disabled]:
- generic:
- button [disabled]:
- generic:
- button [disabled]:
- generic:
- button [disabled]:
- generic:
- generic [ref=f1e372]:
- heading "Late Fees" [level=3] [ref=f1e377]
- generic [ref=f1e381]:
- table [ref=f1e385]:
- rowgroup [ref=f1e386]:
- row [ref=f1e387]:
- columnheader "Invoice no." [ref=f1e388]
- columnheader "Invoice note" [ref=f1e392]
- columnheader "Created by" [ref=f1e396]
- columnheader "Total" [ref=f1e400]
- columnheader "Status" [ref=f1e404]
- columnheader "Issue date" [ref=f1e408]
- columnheader "Due date" [ref=f1e412]
- row [ref=f1e416]:
- columnheader [ref=f1e417]
- rowgroup [ref=f1e418]:
- row [ref=f1e419]:
- cell "No data yet" [ref=f1e420]
- generic [ref=f1e424]:
- generic [ref=f1e425]:
- generic [ref=f1e426]: "Items per page:"
- combobox [ref=f1e429]:
- generic [ref=f1e431] [cursor=pointer]:
- generic [ref=f1e432]: "10"
- combobox "Items per page:": "10"
- generic [ref=f1e434]:
- generic [ref=f1e436]: 0-0 of 0
- generic [ref=f1e437]:
- button [disabled]:
- generic:
- button [disabled]:
- generic:
- button [disabled]:
- generic:
- button [disabled]:
- generic:
- generic:
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- tooltip
- dialog:
- generic [ref=f1e440]:
- generic [ref=f1e441]:
- generic [ref=f1e443]:
- generic [ref=f1e444]:
- button [ref=f1e445] [cursor=pointer]:
- generic [ref=f1e446]:
- heading "Issue Credit Note" [level=2] [ref=f1e449]
- button "Save" [ref=f1e451] [cursor=pointer]
- separator [ref=f1e453]
- generic [ref=f1e455]:
- group [ref=f1e456]:
- heading "Invoice INV-2103883 Open" [level=3] [ref=f1e458]:
- generic [ref=f1e460]:
- text: Invoice INV-2103883
- generic [ref=f1e461]: Open
- generic [ref=f1e465]:
- generic [ref=f1e467]:
- textbox "Reason *" [ref=f1e469]: Example reason!
- generic: Reason *
- alert [ref=f1e470]
- group [ref=f1e472]:
- heading "Items to credit" [level=3] [ref=f1e474]
- generic [ref=f1e477]:
- generic [ref=f1e478]:
- table [ref=f1e480]:
- rowgroup [ref=f1e481]:
- row [ref=f1e482]:
- columnheader "Description" [ref=f1e483]
- columnheader "Credit QTY" [ref=f1e484]
- columnheader "Price" [ref=f1e485]
- columnheader "VAT" [ref=f1e486]
- columnheader "Net credit amount" [ref=f1e487]
- rowgroup [ref=f1e488]:
- row [ref=f1e489]:
- cell "Electronic Product 4myHO1 Electronic Product 4myHO1" [ref=f1e490]:
- generic [ref=f1e493]:
- generic [ref=f1e495]:
- generic [ref=f1e496]:
- checkbox "Electronic Product 4myHO1" [checked] [ref=f1e497] [cursor=pointer]
- generic [ref=f1e498] [cursor=pointer]: Electronic Product 4myHO1
- cell [ref=f1e499]:
- generic [ref=f1e500]:
- combobox [ref=f1e502]:
- generic [ref=f1e504]:
- generic [ref=f1e505]: "1"
- combobox [ref=f1e507]
- button [ref=f1e509] [cursor=pointer]:
- alert [ref=f1e510]
- cell "€100.00" [ref=f1e512]
- cell "20%" [ref=f1e513]
- cell "100 €" [ref=f1e514]:
- generic [ref=f1e515]:
- generic [ref=f1e518]:
- spinbutton [ref=f1e519]: "100"
- generic [ref=f1e520]: €
- alert [ref=f1e522]
- row [ref=f1e524]:
- cell "Elegant Product MYYqDs Elegant Product MYYqDs" [ref=f1e525]:
- generic [ref=f1e528]:
- generic [ref=f1e530]:
- generic [ref=f1e531]:
- checkbox "Elegant Product MYYqDs" [checked] [active] [ref=f1e532] [cursor=pointer]
- generic [ref=f1e533] [cursor=pointer]: Elegant Product MYYqDs
- cell [ref=f1e534]:
- generic [ref=f1e535]:
- combobox [ref=f1e537]:
- generic [ref=f1e539]:
- generic [ref=f1e540]: "3"
- combobox [ref=f1e542]
- button [ref=f1e544] [cursor=pointer]:
- alert [ref=f1e545]
- cell "€200.00" [ref=f1e547]
- cell "20%" [ref=f1e548]
- cell "600 €" [ref=f1e549]:
- generic [ref=f1e550]:
- generic [ref=f1e553]:
- spinbutton [ref=f1e554]: "600"
- generic [ref=f1e555]: €
- alert [ref=f1e557]
- alert [ref=f1e559]
- generic [ref=f1e563]:
- generic [ref=f1e564]:
- generic [ref=f1e565]: Total excl.VAT
- generic [ref=f1e566]: €700.00
- generic [ref=f1e567]:
- generic [ref=f1e568]: VAT
- generic [ref=f1e569]: €140.00
- generic [ref=f1e570]:
- generic [ref=f1e571]: Total incl.VAT
- generic [ref=f1e572]: €840.00
- generic [ref=f1e574]:
- generic [ref=f1e575]:
- generic [ref=f1e577]: The customer will receive an email with the credit note + an adjusted invoice attached. The invoice will be adjusted with the credited amount. The payment link will be updated for the correct amount as well.
- tooltip
```
# Test source
```ts
1 | import { BaseComponent } from '@/shared/base/BaseComponent';
2 |
3 | export class Checkbox extends BaseComponent {
4 | private readonly input = this.host.locator('input[type=checkbox]:not(.disabled)');
5 |
6 | set(state: boolean): Promise {
> 7 | return this.input.setChecked(state);
| ^ Error: locator.setChecked: Clicking the checkbox did not change its state
8 | }
9 | }
10 |
```