mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { ElectronApplication, Page } from '@playwright/test';
|
|
|
|
const isDevTools = async (page: Page) => {
|
|
// It seems that the developer tools window can have titles in different
|
|
// formats (e.g. DevTools, Developer Tools).
|
|
return (await page.title()).match(/Dev(eloper)?\s*Tools/i);
|
|
};
|
|
|
|
const firstNonDevToolsWindow = async (electronApp: ElectronApplication) => {
|
|
// Wait for the window event as soon as possible -- it's possible that
|
|
// the window we want will be shown while doing other async checks.
|
|
const nextNonDevToolsPage = electronApp.waitForEvent('window', {
|
|
predicate: async page => {
|
|
return !(await isDevTools(page));
|
|
},
|
|
});
|
|
|
|
// First use firstWindow -- it's possible that the first window
|
|
// has already been shown.
|
|
let mainWindow = await electronApp.firstWindow();
|
|
|
|
if (await isDevTools(mainWindow)) {
|
|
for (const window of electronApp.windows()) {
|
|
if (!(await isDevTools(window))) {
|
|
mainWindow = window;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (await isDevTools(mainWindow)) {
|
|
mainWindow = await nextNonDevToolsPage;
|
|
}
|
|
}
|
|
|
|
// waitForEvent will throw if no additional windows are created.
|
|
// Ignore.
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
nextNonDevToolsPage.catch(_error => {});
|
|
|
|
return mainWindow;
|
|
};
|
|
|
|
export default firstNonDevToolsWindow;
|