[英]Electron desktop Application testing with[PLAYWRIGHT]
我正在嘗試使用 playwright 來自動化 electron js 應用程序,但我似乎找不到任何相關信息。 為了自動化一個簡單的程序,我使用了 playwright:- https://playwright.dev/docs/api/class-electron和https://www.electronjs.org/docs/latest/tutorial/quick-start 。 但是,我無法獲取 electron 應用程序中的元素(按鈕、下拉菜單等)。 任何將深入指導我使用 playwright 自動化桌面應用程序的參考或文檔。
我剛剛使用和你一樣的 Electron 和 React 完成了一系列 e2e 測試。 你沒看到什么? 它至少會加載應用程序嗎?
分享一個測試的代碼以及如何使用 .launch 方法啟動。
由於安裝程序會安裝其他組件,因此我使用他們的介紹指南讓我的工作,我必須構建和安裝,然后提供 exe 的路徑
在我的 package.json 我有。
"playwright": "^1.25.0",
"@playwright/test": "^1.25.0",
"eslint-plugin-playwright": "^0.10.0",
我創建了這個 class 來幫助我獲得更簡潔的代碼。
import { _electron as electron, ElectronApplication, Page } from 'playwright';
class ElectronAppController {
static electronApp: ElectronApplication;
static window1: Page;
static window2: Page;
static window3: Page;
static async launchApp() {
ElectronAppController.electronApp = await electron.launch({
executablePath: 'C:\\pathTo\\app.exe',
});
ElectronAppController.electronApp.on('window', async (page) => {
ElectronAppController.assignWindows(page);
});
const mywindows: Page[] =
await ElectronAppController.electronApp.windows();
for (
let index = 0, l = mywindows.length;
index < l;
index += 1
) {
ElectronAppController.assignWindows(
mywindows[index]
);
}
}
private static assignWindows(page: Page) {
const myurl = path.basename(page.url());
if (myurl === 'window1.html') {
ElectronAppController.window1= page;
}
if (myurl === 'window2.html') {
ElectronAppController.window2= page;
}
if (myurl === 'window3.html') {
ElectronAppController.window3= page;
}
return true;
}
}
測試文件名應該是[name].spec.ts,別忘了導入
test.describe('First Window Tests', async () => {
test.beforeAll(async () => {
await ElectronAppController.launchApp();
});
test('Check if first window opened', didLaunchApp);
test('name of the test', async () => {
// test body
// this will allow you to record a test very useful, but sometimes it has some problems check note bellow
await ElectronAppController.window1.pause;
});
test.afterAll(async () => {
await ElectronAppController.electronApp.close();
});
});
這是一個 didLaunchApp 就像一個簡單的測試
const didLaunchApp = async () => {
const isVisible: boolean = await ElectronAppController.electronApp.evaluate(
async ({ BrowserWindow }) => {
const mainWindow = BrowserWindow.getAllWindows()[0];
const getState = () => mainWindow.isVisible();
return new Promise((resolve) => {
if (mainWindow.isVisible()) {
resolve(getState());
} else {
mainWindow.once('ready-to-show', () => {
setTimeout(() => resolve(getState()), 0);
});
}
});
}
);
await expect(isVisible).toBeTruthy();
};
您可以記錄測試,但有時如果您有一些彈出窗口或其他對懸停在元素上的影響,這可能會產生一些問題,
您可以在此處閱讀有關選擇器的更多信息
我一直在使用相同的工具。 有沒有測試對話框的好方法?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.