File tree Expand file tree Collapse file tree 5 files changed +82
-0
lines changed
packages/compass-e2e-tests/helpers/commands Expand file tree Collapse file tree 5 files changed +82
-0
lines changed Original file line number Diff line number Diff line change 1+ import { Selectors } from '../compass' ;
2+ import type { CompassBrowser } from '../compass-browser' ;
3+
4+ import Debug from 'debug' ;
5+
6+ const debug = Debug ( 'compass-e2e-tests' ) ;
7+
8+ // TODO: Wait for any animation to settle before resolving?
9+ export function getOpenModals (
10+ browser : CompassBrowser ,
11+ selector : Parameters < CompassBrowser [ '$$' ] > [ 0 ] = Selectors . LGModal
12+ ) : Promise < WebdriverIO . Element [ ] > {
13+ return browser . $$ ( selector ) . filter ( async ( element ) => {
14+ try {
15+ const tagName = await element . getTagName ( ) ;
16+ if ( tagName !== 'dialog' ) {
17+ throw new Error (
18+ `Expected selector to match dialogs, matched '${ tagName } '`
19+ ) ;
20+ }
21+ const open = await element . getAttribute ( 'open' ) ;
22+ return open === 'true' ;
23+ } catch ( err ) {
24+ // Most likely, the element disappeared after it got selected
25+ debug ( 'ignoring' , err instanceof Error ? err . stack : err ) ;
26+ return false ;
27+ }
28+ } ) ;
29+ }
Original file line number Diff line number Diff line change @@ -67,3 +67,7 @@ export * from './read-stage-operators';
6767export * from './click-confirmation-action' ;
6868export * from './get-input-by-label' ;
6969export * from './resize-window' ;
70+ export * from './get-open-modals' ;
71+ export * from './is-modal-open' ;
72+ export * from './is-modal-eventually-open' ;
73+ export * from './wait-for-open-modal' ;
Original file line number Diff line number Diff line change 1+ import { Selectors } from '../compass' ;
2+ import type { CompassBrowser } from '../compass-browser' ;
3+
4+ export async function isModalEventuallyOpen (
5+ browser : CompassBrowser ,
6+ selector : Parameters < CompassBrowser [ '$$' ] > [ 0 ] = Selectors . LGModal ,
7+ timeout ?: number
8+ ) : Promise < boolean > {
9+ try {
10+ await browser . waitForOpenModal ( selector , { timeout } ) ;
11+ // return true if it opens before the timeout expires
12+ return true ;
13+ } catch {
14+ return false ;
15+ }
16+ }
Original file line number Diff line number Diff line change 1+ import { Selectors } from '../compass' ;
2+ import type { CompassBrowser } from '../compass-browser' ;
3+
4+ export async function isModalOpen (
5+ browser : CompassBrowser ,
6+ selector : Parameters < CompassBrowser [ '$$' ] > [ 0 ] = Selectors . LGModal
7+ ) : Promise < boolean > {
8+ const modals = await browser . getOpenModals ( selector ) ;
9+ return modals . length > 0 ;
10+ }
Original file line number Diff line number Diff line change 1+ import { inspect } from 'node:util' ;
2+ import type { WaitForOptions } from 'webdriverio' ;
3+ import type { CompassBrowser } from '../compass-browser' ;
4+
5+ export async function waitForOpenModal (
6+ browser : CompassBrowser ,
7+ selector : Parameters < CompassBrowser [ '$$' ] > [ 0 ] ,
8+ { reverse = false , ...options } : WaitForOptions = { }
9+ ) : Promise < void > {
10+ await browser . waitUntil (
11+ async ( ) => {
12+ const open = await browser . isModalOpen ( selector ) ;
13+ return reverse ? ! open : open ;
14+ } ,
15+ {
16+ timeout : 2_000 ,
17+ timeoutMsg : `Timeout waiting for modal '${ inspect ( selector ) } ' to ${
18+ reverse ? 'close' : 'open'
19+ } `,
20+ ...options ,
21+ }
22+ ) ;
23+ }
You can’t perform that action at this time.
0 commit comments