3 * Copyright 2024 Google Inc.
4 * SPDX-License-Identifier: Apache-2.0
6 import type {ElementHandle} from 'puppeteer';
7 import {expectNotType, expectType} from 'tsd';
9 declare const handle: ElementHandle;
14 expectType<ElementHandle<HTMLAnchorElement> | null>(await handle.$('a'));
15 expectNotType<ElementHandle<Element> | null>(await handle.$('a'));
18 expectType<ElementHandle<HTMLAnchorElement> | null>(
19 await handle.$('a#id'),
21 expectNotType<ElementHandle<Element> | null>(await handle.$('a#id'));
24 expectType<ElementHandle<HTMLAnchorElement> | null>(
25 await handle.$('a.class'),
27 expectNotType<ElementHandle<Element> | null>(await handle.$('a.class'));
30 expectType<ElementHandle<HTMLAnchorElement> | null>(
31 await handle.$('a[attr=value]'),
33 expectNotType<ElementHandle<Element> | null>(
34 await handle.$('a[attr=value]'),
38 expectType<ElementHandle<HTMLAnchorElement> | null>(
39 await handle.$('a:psuedo-class'),
41 expectNotType<ElementHandle<Element> | null>(
42 await handle.$('a:pseudo-class'),
46 expectType<ElementHandle<HTMLAnchorElement> | null>(
47 await handle.$('a:func(arg)'),
49 expectNotType<ElementHandle<Element> | null>(
50 await handle.$('a:func(arg)'),
56 expectType<ElementHandle<HTMLDivElement> | null>(await handle.$('div'));
57 expectNotType<ElementHandle<Element> | null>(await handle.$('div'));
60 expectType<ElementHandle<HTMLDivElement> | null>(
61 await handle.$('div#id'),
63 expectNotType<ElementHandle<Element> | null>(await handle.$('div#id'));
66 expectType<ElementHandle<HTMLDivElement> | null>(
67 await handle.$('div.class'),
69 expectNotType<ElementHandle<Element> | null>(await handle.$('div.class'));
72 expectType<ElementHandle<HTMLDivElement> | null>(
73 await handle.$('div[attr=value]'),
75 expectNotType<ElementHandle<Element> | null>(
76 await handle.$('div[attr=value]'),
80 expectType<ElementHandle<HTMLDivElement> | null>(
81 await handle.$('div:psuedo-class'),
83 expectNotType<ElementHandle<Element> | null>(
84 await handle.$('div:pseudo-class'),
88 expectType<ElementHandle<HTMLDivElement> | null>(
89 await handle.$('div:func(arg)'),
91 expectNotType<ElementHandle<Element> | null>(
92 await handle.$('div:func(arg)'),
98 expectType<ElementHandle<Element> | null>(await handle.$('some-custom'));
101 expectType<ElementHandle<Element> | null>(
102 await handle.$('some-custom#id'),
106 expectType<ElementHandle<Element> | null>(
107 await handle.$('some-custom.class'),
111 expectType<ElementHandle<Element> | null>(
112 await handle.$('some-custom[attr=value]'),
116 expectType<ElementHandle<Element> | null>(
117 await handle.$('some-custom:pseudo-class'),
121 expectType<ElementHandle<Element> | null>(
122 await handle.$('some-custom:func(arg)'),
128 expectType<ElementHandle<Element> | null>(await handle.$(''));
131 expectType<ElementHandle<Element> | null>(await handle.$('#id'));
134 expectType<ElementHandle<Element> | null>(await handle.$('.class'));
137 expectType<ElementHandle<Element> | null>(await handle.$('[attr=value]'));
140 expectType<ElementHandle<Element> | null>(
141 await handle.$(':pseudo-class'),
145 expectType<ElementHandle<Element> | null>(await handle.$(':func(arg)'));
150 expectType<ElementHandle<HTMLAnchorElement> | null>(
151 await handle.$('div > a'),
153 expectNotType<ElementHandle<Element> | null>(await handle.$('div > a'));
156 expectType<ElementHandle<HTMLAnchorElement> | null>(
157 await handle.$('div > a#id'),
159 expectNotType<ElementHandle<Element> | null>(
160 await handle.$('div > a#id'),
164 expectType<ElementHandle<HTMLAnchorElement> | null>(
165 await handle.$('div > a.class'),
167 expectNotType<ElementHandle<Element> | null>(
168 await handle.$('div > a.class'),
172 expectType<ElementHandle<HTMLAnchorElement> | null>(
173 await handle.$('div > a[attr=value]'),
175 expectNotType<ElementHandle<Element> | null>(
176 await handle.$('div > a[attr=value]'),
180 expectType<ElementHandle<HTMLAnchorElement> | null>(
181 await handle.$('div > a:psuedo-class'),
183 expectNotType<ElementHandle<Element> | null>(
184 await handle.$('div > a:pseudo-class'),
188 expectType<ElementHandle<HTMLAnchorElement> | null>(
189 await handle.$('div > a:func(arg)'),
191 expectNotType<ElementHandle<Element> | null>(
192 await handle.$('div > a:func(arg)'),
198 expectType<ElementHandle<HTMLDivElement> | null>(
199 await handle.$('div > div'),
201 expectNotType<ElementHandle<Element> | null>(await handle.$('div > div'));
204 expectType<ElementHandle<HTMLDivElement> | null>(
205 await handle.$('div > div#id'),
207 expectNotType<ElementHandle<Element> | null>(
208 await handle.$('div > div#id'),
212 expectType<ElementHandle<HTMLDivElement> | null>(
213 await handle.$('div > div.class'),
215 expectNotType<ElementHandle<Element> | null>(
216 await handle.$('div > div.class'),
220 expectType<ElementHandle<HTMLDivElement> | null>(
221 await handle.$('div > div[attr=value]'),
223 expectNotType<ElementHandle<Element> | null>(
224 await handle.$('div > div[attr=value]'),
228 expectType<ElementHandle<HTMLDivElement> | null>(
229 await handle.$('div > div:psuedo-class'),
231 expectNotType<ElementHandle<Element> | null>(
232 await handle.$('div > div:pseudo-class'),
236 expectType<ElementHandle<HTMLDivElement> | null>(
237 await handle.$('div > div:func(arg)'),
239 expectNotType<ElementHandle<Element> | null>(
240 await handle.$('div > div:func(arg)'),
246 expectType<ElementHandle<Element> | null>(
247 await handle.$('div > some-custom'),
251 expectType<ElementHandle<Element> | null>(
252 await handle.$('div > some-custom#id'),
256 expectType<ElementHandle<Element> | null>(
257 await handle.$('div > some-custom.class'),
261 expectType<ElementHandle<Element> | null>(
262 await handle.$('div > some-custom[attr=value]'),
266 expectType<ElementHandle<Element> | null>(
267 await handle.$('div > some-custom:pseudo-class'),
271 expectType<ElementHandle<Element> | null>(
272 await handle.$('div > some-custom:func(arg)'),
278 expectType<ElementHandle<Element> | null>(await handle.$('div > #id'));
281 expectType<ElementHandle<Element> | null>(await handle.$('div > .class'));
284 expectType<ElementHandle<Element> | null>(
285 await handle.$('div > [attr=value]'),
289 expectType<ElementHandle<Element> | null>(
290 await handle.$('div > :pseudo-class'),
294 expectType<ElementHandle<Element> | null>(
295 await handle.$('div > :func(arg)'),
301 expectType<ElementHandle<HTMLAnchorElement> | null>(
302 await handle.$('div > a'),
304 expectNotType<ElementHandle<Element> | null>(await handle.$('div > a'));
307 expectType<ElementHandle<HTMLAnchorElement> | null>(
308 await handle.$('div > a#id'),
310 expectNotType<ElementHandle<Element> | null>(
311 await handle.$('div > a#id'),
315 expectType<ElementHandle<HTMLAnchorElement> | null>(
316 await handle.$('div > a.class'),
318 expectNotType<ElementHandle<Element> | null>(
319 await handle.$('div > a.class'),
323 expectType<ElementHandle<HTMLAnchorElement> | null>(
324 await handle.$('div > a[attr=value]'),
326 expectNotType<ElementHandle<Element> | null>(
327 await handle.$('div > a[attr=value]'),
331 expectType<ElementHandle<HTMLAnchorElement> | null>(
332 await handle.$('div > a:psuedo-class'),
334 expectNotType<ElementHandle<Element> | null>(
335 await handle.$('div > a:pseudo-class'),
339 expectType<ElementHandle<HTMLAnchorElement> | null>(
340 await handle.$('div > a:func(arg)'),
342 expectNotType<ElementHandle<Element> | null>(
343 await handle.$('div > a:func(arg)'),
349 expectType<ElementHandle<HTMLDivElement> | null>(
350 await handle.$('div > div'),
352 expectNotType<ElementHandle<Element> | null>(await handle.$('div > div'));
355 expectType<ElementHandle<HTMLDivElement> | null>(
356 await handle.$('div > div#id'),
358 expectNotType<ElementHandle<Element> | null>(
359 await handle.$('div > div#id'),
363 expectType<ElementHandle<HTMLDivElement> | null>(
364 await handle.$('div > div.class'),
366 expectNotType<ElementHandle<Element> | null>(
367 await handle.$('div > div.class'),
371 expectType<ElementHandle<HTMLDivElement> | null>(
372 await handle.$('div > div[attr=value]'),
374 expectNotType<ElementHandle<Element> | null>(
375 await handle.$('div > div[attr=value]'),
379 expectType<ElementHandle<HTMLDivElement> | null>(
380 await handle.$('div > div:psuedo-class'),
382 expectNotType<ElementHandle<Element> | null>(
383 await handle.$('div > div:pseudo-class'),
387 expectType<ElementHandle<HTMLDivElement> | null>(
388 await handle.$('div > div:func(arg)'),
390 expectNotType<ElementHandle<Element> | null>(
391 await handle.$('div > div:func(arg)'),
397 expectType<ElementHandle<Element> | null>(
398 await handle.$('div > some-custom'),
402 expectType<ElementHandle<Element> | null>(
403 await handle.$('div > some-custom#id'),
407 expectType<ElementHandle<Element> | null>(
408 await handle.$('div > some-custom.class'),
412 expectType<ElementHandle<Element> | null>(
413 await handle.$('div > some-custom[attr=value]'),
417 expectType<ElementHandle<Element> | null>(
418 await handle.$('div > some-custom:pseudo-class'),
422 expectType<ElementHandle<Element> | null>(
423 await handle.$('div > some-custom:func(arg)'),
429 expectType<ElementHandle<Element> | null>(await handle.$('div > #id'));
432 expectType<ElementHandle<Element> | null>(await handle.$('div > .class'));
435 expectType<ElementHandle<Element> | null>(
436 await handle.$('div > [attr=value]'),
440 expectType<ElementHandle<Element> | null>(
441 await handle.$('div > :pseudo-class'),
445 expectType<ElementHandle<Element> | null>(
446 await handle.$('div > :func(arg)'),
455 expectType<Array<ElementHandle<HTMLAnchorElement>>>(await handle.$$('a'));
456 expectNotType<Array<ElementHandle<Element>>>(await handle.$$('a'));
459 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
460 await handle.$$('a#id'),
462 expectNotType<Array<ElementHandle<Element>>>(await handle.$$('a#id'));
465 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
466 await handle.$$('a.class'),
468 expectNotType<Array<ElementHandle<Element>>>(await handle.$$('a.class'));
471 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
472 await handle.$$('a[attr=value]'),
474 expectNotType<Array<ElementHandle<Element>>>(
475 await handle.$$('a[attr=value]'),
479 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
480 await handle.$$('a:psuedo-class'),
482 expectNotType<Array<ElementHandle<Element>>>(
483 await handle.$$('a:pseudo-class'),
487 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
488 await handle.$$('a:func(arg)'),
490 expectNotType<Array<ElementHandle<Element>>>(
491 await handle.$$('a:func(arg)'),
497 expectType<Array<ElementHandle<HTMLDivElement>>>(await handle.$$('div'));
498 expectNotType<Array<ElementHandle<Element>>>(await handle.$$('div'));
501 expectType<Array<ElementHandle<HTMLDivElement>>>(
502 await handle.$$('div#id'),
504 expectNotType<Array<ElementHandle<Element>>>(await handle.$$('div#id'));
507 expectType<Array<ElementHandle<HTMLDivElement>>>(
508 await handle.$$('div.class'),
510 expectNotType<Array<ElementHandle<Element>>>(
511 await handle.$$('div.class'),
515 expectType<Array<ElementHandle<HTMLDivElement>>>(
516 await handle.$$('div[attr=value]'),
518 expectNotType<Array<ElementHandle<Element>>>(
519 await handle.$$('div[attr=value]'),
523 expectType<Array<ElementHandle<HTMLDivElement>>>(
524 await handle.$$('div:psuedo-class'),
526 expectNotType<Array<ElementHandle<Element>>>(
527 await handle.$$('div:pseudo-class'),
531 expectType<Array<ElementHandle<HTMLDivElement>>>(
532 await handle.$$('div:func(arg)'),
534 expectNotType<Array<ElementHandle<Element>>>(
535 await handle.$$('div:func(arg)'),
541 expectType<Array<ElementHandle<Element>>>(await handle.$$('some-custom'));
544 expectType<Array<ElementHandle<Element>>>(
545 await handle.$$('some-custom#id'),
549 expectType<Array<ElementHandle<Element>>>(
550 await handle.$$('some-custom.class'),
554 expectType<Array<ElementHandle<Element>>>(
555 await handle.$$('some-custom[attr=value]'),
559 expectType<Array<ElementHandle<Element>>>(
560 await handle.$$('some-custom:pseudo-class'),
564 expectType<Array<ElementHandle<Element>>>(
565 await handle.$$('some-custom:func(arg)'),
571 expectType<Array<ElementHandle<Element>>>(await handle.$$(''));
574 expectType<Array<ElementHandle<Element>>>(await handle.$$('#id'));
577 expectType<Array<ElementHandle<Element>>>(await handle.$$('.class'));
580 expectType<Array<ElementHandle<Element>>>(
581 await handle.$$('[attr=value]'),
585 expectType<Array<ElementHandle<Element>>>(
586 await handle.$$(':pseudo-class'),
590 expectType<Array<ElementHandle<Element>>>(await handle.$$(':func(arg)'));
595 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
596 await handle.$$('div > a'),
598 expectNotType<Array<ElementHandle<Element>>>(await handle.$$('div > a'));
601 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
602 await handle.$$('div > a#id'),
604 expectNotType<Array<ElementHandle<Element>>>(
605 await handle.$$('div > a#id'),
609 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
610 await handle.$$('div > a.class'),
612 expectNotType<Array<ElementHandle<Element>>>(
613 await handle.$$('div > a.class'),
617 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
618 await handle.$$('div > a[attr=value]'),
620 expectNotType<Array<ElementHandle<Element>>>(
621 await handle.$$('div > a[attr=value]'),
625 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
626 await handle.$$('div > a:psuedo-class'),
628 expectNotType<Array<ElementHandle<Element>>>(
629 await handle.$$('div > a:pseudo-class'),
633 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
634 await handle.$$('div > a:func(arg)'),
636 expectNotType<Array<ElementHandle<Element>>>(
637 await handle.$$('div > a:func(arg)'),
643 expectType<Array<ElementHandle<HTMLDivElement>>>(
644 await handle.$$('div > div'),
646 expectNotType<Array<ElementHandle<Element>>>(
647 await handle.$$('div > div'),
651 expectType<Array<ElementHandle<HTMLDivElement>>>(
652 await handle.$$('div > div#id'),
654 expectNotType<Array<ElementHandle<Element>>>(
655 await handle.$$('div > div#id'),
659 expectType<Array<ElementHandle<HTMLDivElement>>>(
660 await handle.$$('div > div.class'),
662 expectNotType<Array<ElementHandle<Element>>>(
663 await handle.$$('div > div.class'),
667 expectType<Array<ElementHandle<HTMLDivElement>>>(
668 await handle.$$('div > div[attr=value]'),
670 expectNotType<Array<ElementHandle<Element>>>(
671 await handle.$$('div > div[attr=value]'),
675 expectType<Array<ElementHandle<HTMLDivElement>>>(
676 await handle.$$('div > div:psuedo-class'),
678 expectNotType<Array<ElementHandle<Element>>>(
679 await handle.$$('div > div:pseudo-class'),
683 expectType<Array<ElementHandle<HTMLDivElement>>>(
684 await handle.$$('div > div:func(arg)'),
686 expectNotType<Array<ElementHandle<Element>>>(
687 await handle.$$('div > div:func(arg)'),
693 expectType<Array<ElementHandle<Element>>>(
694 await handle.$$('div > some-custom'),
698 expectType<Array<ElementHandle<Element>>>(
699 await handle.$$('div > some-custom#id'),
703 expectType<Array<ElementHandle<Element>>>(
704 await handle.$$('div > some-custom.class'),
708 expectType<Array<ElementHandle<Element>>>(
709 await handle.$$('div > some-custom[attr=value]'),
713 expectType<Array<ElementHandle<Element>>>(
714 await handle.$$('div > some-custom:pseudo-class'),
718 expectType<Array<ElementHandle<Element>>>(
719 await handle.$$('div > some-custom:func(arg)'),
725 expectType<Array<ElementHandle<Element>>>(await handle.$$('div > #id'));
728 expectType<Array<ElementHandle<Element>>>(
729 await handle.$$('div > .class'),
733 expectType<Array<ElementHandle<Element>>>(
734 await handle.$$('div > [attr=value]'),
738 expectType<Array<ElementHandle<Element>>>(
739 await handle.$$('div > :pseudo-class'),
743 expectType<Array<ElementHandle<Element>>>(
744 await handle.$$('div > :func(arg)'),
750 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
751 await handle.$$('div > a'),
753 expectNotType<Array<ElementHandle<Element>>>(await handle.$$('div > a'));
756 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
757 await handle.$$('div > a#id'),
759 expectNotType<Array<ElementHandle<Element>>>(
760 await handle.$$('div > a#id'),
764 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
765 await handle.$$('div > a.class'),
767 expectNotType<Array<ElementHandle<Element>>>(
768 await handle.$$('div > a.class'),
772 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
773 await handle.$$('div > a[attr=value]'),
775 expectNotType<Array<ElementHandle<Element>>>(
776 await handle.$$('div > a[attr=value]'),
780 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
781 await handle.$$('div > a:psuedo-class'),
783 expectNotType<Array<ElementHandle<Element>>>(
784 await handle.$$('div > a:pseudo-class'),
788 expectType<Array<ElementHandle<HTMLAnchorElement>>>(
789 await handle.$$('div > a:func(arg)'),
791 expectNotType<Array<ElementHandle<Element>>>(
792 await handle.$$('div > a:func(arg)'),
798 expectType<Array<ElementHandle<HTMLDivElement>>>(
799 await handle.$$('div > div'),
801 expectNotType<Array<ElementHandle<Element>>>(
802 await handle.$$('div > div'),
806 expectType<Array<ElementHandle<HTMLDivElement>>>(
807 await handle.$$('div > div#id'),
809 expectNotType<Array<ElementHandle<Element>>>(
810 await handle.$$('div > div#id'),
814 expectType<Array<ElementHandle<HTMLDivElement>>>(
815 await handle.$$('div > div.class'),
817 expectNotType<Array<ElementHandle<Element>>>(
818 await handle.$$('div > div.class'),
822 expectType<Array<ElementHandle<HTMLDivElement>>>(
823 await handle.$$('div > div[attr=value]'),
825 expectNotType<Array<ElementHandle<Element>>>(
826 await handle.$$('div > div[attr=value]'),
830 expectType<Array<ElementHandle<HTMLDivElement>>>(
831 await handle.$$('div > div:psuedo-class'),
833 expectNotType<Array<ElementHandle<Element>>>(
834 await handle.$$('div > div:pseudo-class'),
838 expectType<Array<ElementHandle<HTMLDivElement>>>(
839 await handle.$$('div > div:func(arg)'),
841 expectNotType<Array<ElementHandle<Element>>>(
842 await handle.$$('div > div:func(arg)'),
848 expectType<Array<ElementHandle<Element>>>(
849 await handle.$$('div > some-custom'),
853 expectType<Array<ElementHandle<Element>>>(
854 await handle.$$('div > some-custom#id'),
858 expectType<Array<ElementHandle<Element>>>(
859 await handle.$$('div > some-custom.class'),
863 expectType<Array<ElementHandle<Element>>>(
864 await handle.$$('div > some-custom[attr=value]'),
868 expectType<Array<ElementHandle<Element>>>(
869 await handle.$$('div > some-custom:pseudo-class'),
873 expectType<Array<ElementHandle<Element>>>(
874 await handle.$$('div > some-custom:func(arg)'),
880 expectType<Array<ElementHandle<Element>>>(await handle.$$('div > #id'));
883 expectType<Array<ElementHandle<Element>>>(
884 await handle.$$('div > .class'),
888 expectType<Array<ElementHandle<Element>>>(
889 await handle.$$('div > [attr=value]'),
893 expectType<Array<ElementHandle<Element>>>(
894 await handle.$$('div > :pseudo-class'),
898 expectType<Array<ElementHandle<Element>>>(
899 await handle.$$('div > :func(arg)'),
910 expectType<HTMLAnchorElement>(element);
911 expectType<number>(int);
919 (element, int, str) => {
920 expectType<HTMLDivElement>(element);
921 expectType<number>(int);
922 expectType<string>(str);
931 (element, value) => {
932 expectType<HTMLAnchorElement>(element);
941 (element, value) => {
942 expectType<Element>(element);
948 expectType<HTMLAnchorElement>(
949 await handle.$eval('a', element => {
953 expectType<unknown>(await handle.$eval('a', 'document'));
961 expectType<HTMLAnchorElement[]>(elements);
962 expectType<number>(int);
970 (elements, int, str) => {
971 expectType<HTMLDivElement[]>(elements);
972 expectType<number>(int);
973 expectType<string>(str);
982 (elements, value) => {
983 expectType<HTMLAnchorElement[]>(elements);
992 (elements, value) => {
993 expectType<Element[]>(elements);
999 expectType<HTMLAnchorElement[]>(
1000 await handle.$$eval('a', elements => {
1004 expectType<unknown>(await handle.$$eval('a', 'document'));
1009 expectType<ElementHandle<HTMLAnchorElement> | null>(
1010 await handle.waitForSelector('a'),
1012 expectNotType<ElementHandle<Element> | null>(
1013 await handle.waitForSelector('a'),
1017 expectType<ElementHandle<HTMLDivElement> | null>(
1018 await handle.waitForSelector('div'),
1020 expectNotType<ElementHandle<Element> | null>(
1021 await handle.waitForSelector('div'),
1025 expectType<ElementHandle<Element> | null>(
1026 await handle.waitForSelector('some-custom'),