@@ -543,12 +543,19 @@ export class E2EElement extends MockHTMLElement implements pd.E2EElementInternal
543
543
}
544
544
545
545
export async function find ( page : pd . E2EPageInternal , rootHandle : puppeteer . ElementHandle , selector : pd . FindSelector ) {
546
- const { lightSelector, shadowSelector , text, contains } = getSelector ( selector ) ;
546
+ const { lightSelector, text, contains } = getSelector ( selector ) ;
547
547
548
548
let elmHandle : puppeteer . ElementHandle ;
549
549
550
+ if ( typeof selector === 'string' && selector . includes ( '>>>' ) ) {
551
+ const handle = await page . $ ( selector ) ;
552
+ const elm = new E2EElement ( page , handle ) ;
553
+ await elm . e2eSync ( ) ;
554
+ return elm ;
555
+ }
556
+
550
557
if ( typeof lightSelector === 'string' ) {
551
- elmHandle = await findWithCssSelector ( page , rootHandle , lightSelector , shadowSelector ) ;
558
+ elmHandle = await findWithCssSelector ( rootHandle , lightSelector ) ;
552
559
} else {
553
560
elmHandle = await findWithText ( page , rootHandle , text , contains ) ;
554
561
}
@@ -562,40 +569,13 @@ export async function find(page: pd.E2EPageInternal, rootHandle: puppeteer.Eleme
562
569
return elm ;
563
570
}
564
571
565
- async function findWithCssSelector (
566
- page : pd . E2EPageInternal ,
567
- rootHandle : puppeteer . ElementHandle ,
568
- lightSelector : string ,
569
- shadowSelector : string ,
570
- ) {
571
- let elmHandle = await rootHandle . $ ( lightSelector ) ;
572
+ async function findWithCssSelector ( rootHandle : puppeteer . ElementHandle , lightSelector : string ) {
573
+ const elmHandle = await rootHandle . $ ( lightSelector ) ;
572
574
573
575
if ( ! elmHandle ) {
574
576
return null ;
575
577
}
576
578
577
- if ( shadowSelector ) {
578
- const shadowHandle = await page . evaluateHandle (
579
- ( elm : Element , shadowSelector : string ) => {
580
- if ( ! elm . shadowRoot ) {
581
- throw new Error ( `shadow root does not exist for element: ${ elm . tagName . toLowerCase ( ) } ` ) ;
582
- }
583
-
584
- return elm . shadowRoot . querySelector ( shadowSelector ) ;
585
- } ,
586
- elmHandle ,
587
- shadowSelector ,
588
- ) ;
589
-
590
- await elmHandle . dispose ( ) ;
591
-
592
- if ( ! shadowHandle ) {
593
- return null ;
594
- }
595
-
596
- elmHandle = shadowHandle . asElement ( ) as puppeteer . ElementHandle < Element > ;
597
- }
598
-
599
579
return elmHandle ;
600
580
}
601
581
@@ -659,50 +639,26 @@ export async function findAll(
659
639
) {
660
640
const foundElms : E2EElement [ ] = [ ] ;
661
641
662
- const { lightSelector, shadowSelector } = getSelector ( selector ) ;
642
+ if ( typeof selector === 'string' && selector . includes ( '>>>' ) ) {
643
+ const handles = await page . $$ ( selector ) ;
644
+ for ( let i = 0 ; i < handles . length ; i ++ ) {
645
+ const elm = new E2EElement ( page , handles [ i ] ) ;
646
+ await elm . e2eSync ( ) ;
647
+ foundElms . push ( elm ) ;
648
+ }
649
+ return foundElms ;
650
+ }
663
651
652
+ const { lightSelector } = getSelector ( selector ) ;
664
653
const lightElmHandles = await rootHandle . $$ ( lightSelector ) ;
665
654
if ( lightElmHandles . length === 0 ) {
666
655
return foundElms ;
667
656
}
668
657
669
- if ( shadowSelector ) {
670
- // light dom selected, then shadow dom selected inside of light dom elements
671
- for ( let i = 0 ; i < lightElmHandles . length ; i ++ ) {
672
- const executionContext = getPuppeteerExecution ( lightElmHandles [ i ] ) ;
673
- const shadowJsHandle = await executionContext . evaluateHandle (
674
- ( elm : Element , shadowSelector : string ) => {
675
- if ( ! elm . shadowRoot ) {
676
- throw new Error ( `shadow root does not exist for element: ${ elm . tagName . toLowerCase ( ) } ` ) ;
677
- }
678
-
679
- return elm . shadowRoot . querySelectorAll ( shadowSelector ) ;
680
- } ,
681
- lightElmHandles [ i ] ,
682
- shadowSelector ,
683
- ) ;
684
-
685
- await lightElmHandles [ i ] . dispose ( ) ;
686
-
687
- const shadowJsProperties = await shadowJsHandle . getProperties ( ) ;
688
- await shadowJsHandle . dispose ( ) ;
689
-
690
- for ( const shadowJsProperty of shadowJsProperties . values ( ) ) {
691
- const shadowElmHandle = shadowJsProperty . asElement ( ) as puppeteer . ElementHandle ;
692
- if ( shadowElmHandle ) {
693
- const elm = new E2EElement ( page , shadowElmHandle ) ;
694
- await elm . e2eSync ( ) ;
695
- foundElms . push ( elm ) ;
696
- }
697
- }
698
- }
699
- } else {
700
- // light dom only
701
- for ( let i = 0 ; i < lightElmHandles . length ; i ++ ) {
702
- const elm = new E2EElement ( page , lightElmHandles [ i ] ) ;
703
- await elm . e2eSync ( ) ;
704
- foundElms . push ( elm ) ;
705
- }
658
+ for ( let i = 0 ; i < lightElmHandles . length ; i ++ ) {
659
+ const elm = new E2EElement ( page , lightElmHandles [ i ] ) ;
660
+ await elm . e2eSync ( ) ;
661
+ foundElms . push ( elm ) ;
706
662
}
707
663
708
664
return foundElms ;
@@ -711,16 +667,12 @@ export async function findAll(
711
667
function getSelector ( selector : pd . FindSelector ) {
712
668
const rtn = {
713
669
lightSelector : null as string ,
714
- shadowSelector : null as string ,
715
670
text : null as string ,
716
671
contains : null as string ,
717
672
} ;
718
673
719
674
if ( typeof selector === 'string' ) {
720
- const splt = selector . split ( '>>>' ) ;
721
-
722
- rtn . lightSelector = splt [ 0 ] . trim ( ) ;
723
- rtn . shadowSelector = splt . length > 1 ? splt [ 1 ] . trim ( ) : null ;
675
+ rtn . lightSelector = selector . trim ( ) ;
724
676
} else if ( typeof selector . text === 'string' ) {
725
677
rtn . text = selector . text . trim ( ) ;
726
678
} else if ( typeof selector . contains === 'string' ) {
0 commit comments