electron 使用[PLAYWRIGHT]进行电子桌面应用程序测试

72qzrwbm  于 2022-12-08  发布在  Electron
关注(0)|答案(2)|浏览(656)

我尝试使用playwright来自动化一个电子js应用程序,但是我似乎找不到任何相关的信息。为了自动化一个简单的程序,我使用了playwright:-https://playwright.dev/docs/api/class-electronhttps://www.electronjs.org/docs/latest/tutorial/quick-start。但是,我无法获得电子应用程序中的元素(按钮、下拉菜单等)。任何参考或文档都将深入指导我使用playwright来自动化桌面应用程序。

ogq8wdun

ogq8wdun1#

我得到了我的工作使用他们的intro guide为我,因为安装程序安装额外的组件,我必须建立和安装,然后提供路径的exe
在我的package.json我有。

"playwright": "^1.25.0",
"@playwright/test": "^1.25.0",
"eslint-plugin-playwright": "^0.10.0",

我创建这个类是为了让代码更简洁。

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();
};

你可以记录测试,但是有时候如果你有一些弹出窗口或者其他的效果在一个元素上,
你可以阅读更多关于选择器here

fcwjkofz

fcwjkofz2#

我刚刚完成了一系列e2e测试,使用的是和你一样的电子与React。你看不到什么?它至少加载了应用程序吗?
共享一个测试的代码以及如何使用.launch方法启动。

相关问题