[英]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.