upvote
There are a couple ways to handle JS components rendered at runtime:

- Libretto prefers network requests over DOM interaction when possible, so this will circumvent a lot of complex JS rendering issues

- When you do need the DOM, playwright can handle a lot of the complexity out of the box: playwright will re-query the live DOM at action time and automatically wait for elements to populate. Libretto is also set up to pick selectors like data-testid, aria-label, role, id over class names or positional stuff that's likely to be dynamic.

- At the end of the day the files still live as code so you could always just throw a browser agent at it to handle a part of a workflow if nothing else works

reply