Commit a3f167f
perf(driver): ask the resolver for the candidate list once, not once per index
Deriving a locator asked "which index am I?" by calling resolve() for 1, 2, 3 …
25 — and every one of those re-scans the document (getVisibleText + isVisible +
hasMatchingDescendant over the whole candidate set). The loop only ends early
when the element WINS an index, so an element whose text repeats — a column
header standing in six list views on an enterprise screen — pays all 25 to learn
it has no wildcard identity at all.
Measured on a live PolicyCenter page (2030 nodes, ~220 candidates): ~400ms for
one such element, and ~25s for the snapshot the agent layer takes before every
state-changing action, with CDP Runtime.evaluate timeouts on top.
- resolveAll(tag, text, contains) returns exactly the candidates resolve() would
consider, in resolve()'s own order: same predicate, same ranker seam, same
shadow-DOM fallback. resolveAll(...)[i - 1] === resolve(..., i, ...).
- the predicate itself moves into _matchList, so the ranked path and the new one
share one implementation of "what matches" (the unranked path keeps its own
short-circuiting copy — it can stop at the index-th match).
- the text test now runs BEFORE isVisible in every path. isVisible ends in
getBoundingClientRect + elementFromPoint — a layout flush and a hit test — and
running it first spent both on every node on the page, nearly all of which
never matched. Same result set, strictly less work.
Four e2e cases pin the contract, the equivalence one asserted inside the page so
it compares element identity rather than ids: index-for-index agreement with
resolve() (and nothing one past the list), non-candidates reported absent rather
than guessed, the ranked order honoured, and the shadow-DOM sweep.
Co-Authored-By: Claude <noreply@anthropic.com>1 parent c4650e9 commit a3f167f
2 files changed
Lines changed: 121 additions & 12 deletions
File tree
- karate-core/src
- main/resources/io/karatelabs/driver
- test/java/io/karatelabs/driver/e2e
Lines changed: 61 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
282 | 282 | | |
283 | 283 | | |
284 | 284 | | |
285 | | - | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
286 | 289 | | |
287 | 290 | | |
288 | 291 | | |
289 | 292 | | |
290 | 293 | | |
291 | | - | |
| 294 | + | |
292 | 295 | | |
293 | 296 | | |
294 | 297 | | |
| |||
340 | 343 | | |
341 | 344 | | |
342 | 345 | | |
343 | | - | |
344 | 346 | | |
| 347 | + | |
345 | 348 | | |
346 | 349 | | |
347 | 350 | | |
348 | 351 | | |
| 352 | + | |
349 | 353 | | |
350 | 354 | | |
351 | 355 | | |
352 | 356 | | |
353 | 357 | | |
354 | | - | |
| 358 | + | |
355 | 359 | | |
356 | 360 | | |
357 | 361 | | |
| |||
361 | 365 | | |
362 | 366 | | |
363 | 367 | | |
364 | | - | |
365 | | - | |
366 | | - | |
367 | | - | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
368 | 372 | | |
369 | | - | |
| 373 | + | |
370 | 374 | | |
371 | 375 | | |
372 | 376 | | |
373 | | - | |
374 | 377 | | |
375 | | - | |
| 378 | + | |
376 | 379 | | |
377 | 380 | | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
378 | 385 | | |
379 | 386 | | |
380 | 387 | | |
381 | 388 | | |
382 | 389 | | |
383 | | - | |
| 390 | + | |
384 | 391 | | |
385 | 392 | | |
386 | 393 | | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
387 | 436 | | |
388 | 437 | | |
389 | 438 | | |
| |||
Lines changed: 60 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
567 | 567 | | |
568 | 568 | | |
569 | 569 | | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
570 | 630 | | |
0 commit comments