Skip to content

Commit a671819

Browse files
committed
Add new modal specific commands
1 parent cdd55ba commit a671819

File tree

5 files changed

+72
-0
lines changed

5 files changed

+72
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Selectors } from '../compass';
2+
import type { CompassBrowser } from '../compass-browser';
3+
4+
// TODO: Wait for any animation to settle before resolving?
5+
export function getOpenModals(
6+
browser: CompassBrowser,
7+
selector: Parameters<CompassBrowser['$$']>[0] = Selectors.LGModal
8+
): Promise<WebdriverIO.Element[]> {
9+
return browser.$$(selector).filter(async (element) => {
10+
const tagName = await element.getTagName();
11+
if (tagName !== 'dialog') {
12+
throw new Error(
13+
`Expected selector to match dialogs, matched '${tagName}'`
14+
);
15+
}
16+
const open = await element.getAttribute('open');
17+
return open === 'true';
18+
});
19+
}

packages/compass-e2e-tests/helpers/commands/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,7 @@ export * from './read-first-document-content';
6666
export * from './read-stage-operators';
6767
export * from './click-confirmation-action';
6868
export * from './get-input-by-label';
69+
export * from './get-open-modals';
70+
export * from './is-modal-open';
71+
export * from './is-modal-eventually-open';
72+
export * from './wait-for-open-modal';
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
}

0 commit comments

Comments
 (0)