跳到主要內容

檔案下載

在網頁測試中自動化檔案下載時,必須在不同的瀏覽器中一致地處理它們,以確保可靠的測試執行。

在此,我們提供檔案下載的最佳實務,並示範如何為 Google ChromeMozilla FirefoxMicrosoft Edge 設定下載目錄。

下載路徑

在測試腳本中硬式編碼下載路徑可能會導致維護問題和可攜性問題。使用下載目錄的相對路徑,以確保在不同環境中的可攜性和相容性。

// 👎
// Hardcoded download path
const downloadPath = '/path/to/downloads';

// 👍
// Relative download path
const downloadPath = path.join(__dirname, 'downloads');

等待策略

未能實作適當的等待策略可能會導致競爭條件或不可靠的測試,特別是對於下載完成。實作明確的等待策略,以等待檔案下載完成,確保測試步驟之間的同步。

// 👎
// No explicit wait for download completion
await browser.pause(5000);

// 👍
// Wait for file download completion
await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000);

設定下載目錄

若要覆寫 Google ChromeMozilla FirefoxMicrosoft Edge 的檔案下載行為,請在 WebDriverIO 功能中提供下載目錄

wdio.conf.js
loading...

如需範例實作,請參閱WebdriverIO 測試下載行為範例

設定 Chromium 瀏覽器下載

若要使用 WebDriverIO 的 getPuppeteer 方法變更基於 Chromium 的瀏覽器(例如 Chrome、Edge、Brave 等)的下載路徑,以存取 Chrome DevTools。

const page = await browser.getPuppeteer();
// Initiate a CDP Session:
const cdpSession = await page.target().createCDPSession();
// Set the Download Path:
await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath });

處理多個檔案下載

在處理涉及多個檔案下載的情境時,必須實作策略來有效管理和驗證每個下載。請考慮以下方法

循序下載處理: 一個接一個下載檔案,並在啟動下一個檔案之前驗證每個下載,以確保有條理的執行和準確的驗證。

平行下載處理: 利用非同步程式設計技術來同時啟動多個檔案下載,以最佳化測試執行時間。實作穩健的驗證機制,以驗證所有下載是否完成。

跨瀏覽器相容性考量

雖然 WebDriverIO 提供用於瀏覽器自動化的統一介面,但仍必須考量瀏覽器行為和功能上的差異。請考慮在不同瀏覽器上測試您的檔案下載功能,以確保相容性和一致性。

瀏覽器特定的設定: 調整下載路徑設定和等待策略,以適應 Chrome、Firefox、Edge 和其他支援瀏覽器中瀏覽器行為和偏好的差異。

瀏覽器版本相容性: 定期更新您的 WebDriverIO 和瀏覽器版本,以利用最新的功能和增強功能,同時確保與您現有的測試套件相容。

歡迎!我能幫您什麼嗎?

WebdriverIO AI Copilot