繁体   English   中英

Electron 桌面应用测试用[PLAYWRIGHT]

[英]Electron desktop Application testing with[PLAYWRIGHT]

我正在尝试使用 playwright 来自动化 electron js 应用程序,但我似乎找不到任何相关信息。 为了自动化一个简单的程序,我使用了 playwright:- https://playwright.dev/docs/api/class-electronhttps://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM