(selector)
| 249 | }, |
| 250 | |
| 251 | async waitForSelector(selector) { |
| 252 | const existing = document.querySelector(selector) |
| 253 | if (existing) { |
| 254 | return existing |
| 255 | } |
| 256 | |
| 257 | return await new Promise<Element>((resolve, reject) => { |
| 258 | const observer = new MutationObserver(() => { |
| 259 | const el = document.querySelector(selector) |
| 260 | if (el) { |
| 261 | cleanup() |
| 262 | resolve(el) |
| 263 | } |
| 264 | }) |
| 265 | const timer = setTimeout(() => { |
| 266 | cleanup() |
| 267 | reject(new Error(`Timed out waiting for selector: ${selector}`)) |
| 268 | }, 1000) |
| 269 | const cleanup = () => { |
| 270 | clearTimeout(timer) |
| 271 | observer.disconnect() |
| 272 | } |
| 273 | |
| 274 | observer.observe(document.documentElement, { |
| 275 | childList: true, |
| 276 | subtree: true, |
| 277 | }) |
| 278 | }) |
| 279 | }, |
| 280 | |
| 281 | async evaluate(fn: (...args: any[]) => any, arg?: unknown) { |
| 282 | const result = await fn(arg) |
nothing calls this directly
no test coverage detected