I was also surprised there is no way to prevent bringing it to front and loosing focus.
My workaround is to have "reusable pages" (1 if your program is simple, or X if you have a X as concurrency). You wait for a created page instance to be marked as available (with a mutex or so) to reuse it.
_Make sure to clear all listeners if you added some, or the storage if you don't want it to be shared. It's a bit more at risk... but for now that's the only viable solution when `headless: true` does not fit the use case._