簡體   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