亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 web前端 js教程 Playwright:Web UI 自動化測試框架全面概述

Playwright:Web UI 自動化測試框架全面概述

Dec 26, 2024 pm 05:57 PM

PlayWright是微軟開發(fā)的Web UI自動化測試框架。

它旨在提供一個跨平臺、跨語言、跨瀏覽器的自動化測試框架,同時也支援行動瀏覽器。

Playwright: A Comprehensive Overview of Web UI Automation Testing Framework

如其官方首頁所述:

  • 自動等待、頁面元素智能斷言、執(zhí)行追蹤等功能,在處理網(wǎng)頁不穩(wěn)定方面非常有效。
  • 它在與執(zhí)行測試的進(jìn)程不同的進(jìn)程中控制瀏覽器,消除了進(jìn)程內(nèi)測試執(zhí)行器的限制並支援 Shadow DOM 滲透。
  • PlayWright 為每個測試建立一個瀏覽器上下文。瀏覽器上下文相當(dāng)於一個全新的瀏覽器設(shè)定文件,可以實現(xiàn)零成本的全面測試隔離。建立新的瀏覽器上下文只需幾毫秒。
  • 提供程式碼產(chǎn)生、逐步偵錯追蹤檢視器等功能。

PlayWright vs. Selenium v??ipress. Cypress

當(dāng)今最好的 Web UI 自動化測試框架是什麼?傑出的選項包括已有十年歷史的 Selenium、最近流行的 Cypress 以及我們在這裡介紹的 PlayWright。它們有何不同?以下是總結(jié)對比供大家參考

Feature PlayWright Selenium Cypress
Supported Languages JavaScript, Java, C#, Python JavaScript, Java, C#, Python, Ruby JavaScript/TypeScript
Supported Browsers Chrome, Edge, Firefox, Safari Chrome, Edge, Firefox, Safari, IE Chrome, Edge, Firefox, Safari
Testing Framework Frameworks for supported languages Frameworks for supported languages Frameworks for supported languages
Usability Easy to use and configure Complex setup with a learning curve Easy to use and configure
Code Complexity Simple Moderate Simple
DOM Manipulation Simple Moderate Simple
Community Maturity Improving gradually Highly mature Fairly mature
Headless Mode Support Yes Yes Yes
Concurrency Support Supported Supported Depends on CI/CD tools
iframe Support Supported Supported Supported via plugins
Driver Not required Requires a browser-specific driver Not required
Multi-Tab Operations Supported Not supported Supported
Drag and Drop Supported Supported Supported
Built-in Reporting Yes No Yes
Cross-Origin Support Supported Supported Supported
Built-in Debugging Yes No Yes
Automatic Wait Yes No Yes
Built-in Screenshot/Video Yes No video recording Yes

主要比較:

  • 支援的語言:PlayWright 和 Selenium 支援 Java、C# 和 Python,這使得它們在可能不熟悉 JavaScript/TypeScript 的測試工程師中更受歡迎。
  • 技術(shù)方法:PlayWright 和 Selenium 都使用 Google 的遠(yuǎn)端偵錯協(xié)定來控制基於 Chromium 的瀏覽器。對於像 Firefox 這樣的瀏覽器,如果沒有這樣的協(xié)議,它們就會使用 JavaScript 注入。 Selenium 將其封裝在 Driver 中,而 PlayWright 直接呼叫它。另一方面,Cypress 使用 JavaScript 來控制瀏覽器。
  • 瀏覽器支援:Selenium 支援 Internet Explorer,這與 IE 即將被淘汰無關(guān)。
  • 易於使用:所有三個框架都有一個學(xué)習(xí)曲線。然而,與 Selenium 相比,PlayWright 和 Cypress 對於簡單場景更加用戶友好。

入門

雖然 PlayWright 支援多種語言,但它嚴(yán)重依賴 Node.js。無論您使用Python還是Java版本,PlayWright在初始化時都需要Node.js環(huán)境,下載Node.js驅(qū)動程式。因此,本指南我們將重點(diǎn)放在 JavaScript/TypeScript。

安裝與演示

  1. 確保已安裝 Node.js。
  2. 使用npm或yarn初始化PlayWright專案:
   # Using npm
   npm init playwright@latest

   # Using yarn
   yarn create playwright
  1. 按照提示操作:
    • 選擇 TypeScriptJavaScript(預(yù)設(shè):TypeScript)。
    • 指定測驗?zāi)夸浢Q。
    • 決定是否要安裝PlayWright支援的瀏覽器(預(yù)設(shè):True)。

如果您選擇下載瀏覽器,PlayWright 將下載 Chromium、Firefox 和 WebKit,這可能需要一些時間。此過程僅在第一次設(shè)定期間發(fā)生,除非 PlayWright 版本已更新。

專案結(jié)構(gòu)

初始化後,您將得到一個項目範(fàn)本:

playwright.config.ts    # PlayWright configuration file
package.json            # Node.js configuration file
package-lock.json       # Node.js dependency lock file
tests/                  # Your test directory
  example.spec.ts       # Template test case
tests-examples/         # Example tests directory
  demo-todo-app.spec.ts # Example test case

運(yùn)行範(fàn)例測試案例:

npx playwright test

測試靜默執(zhí)行(在無頭模式下),結(jié)果顯示為:

Running 6 tests using 6 workers

  6 passed (10s)

To open the last HTML report run:

  npx playwright show-report

範(fàn)例原始碼

這是 example.spec.ts 測試用例:

import { test, expect } from '@playwright/test';

test('has title', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await page.getByRole('link', { name: 'Get started' }).click();
  await expect(page).toHaveURL(/.*intro/);
});
  • 第一次測驗:驗證頁標(biāo)題包含「劇作家」。
  • 第二次測試:點(diǎn)擊「開始」連結(jié)並驗證 URL。

每種測試方法都有:

  • 測試名稱(例如「有標(biāo)題」)。
  • 一個函數(shù)來執(zhí)行測試邏輯。

主要方法包括:

  • page.goto:導(dǎo)航到 URL。
  • Expect(page).toHaveTitle:斷言頁面標(biāo)題。
  • page.getByRole:透過角色定位元素。
  • wait:等待非同步操作完成。

從命令列運(yùn)行測試

以下是常用指令:

  • 執(zhí)行所有測試:
   # Using npm
   npm init playwright@latest

   # Using yarn
   yarn create playwright
  • 執(zhí)行特定的測試檔案:
playwright.config.ts    # PlayWright configuration file
package.json            # Node.js configuration file
package-lock.json       # Node.js dependency lock file
tests/                  # Your test directory
  example.spec.ts       # Template test case
tests-examples/         # Example tests directory
  demo-todo-app.spec.ts # Example test case
  • 偵錯測試案例:
npx playwright test

程式碼錄製

使用codegen功能記錄互動:

Running 6 tests using 6 workers

  6 passed (10s)

To open the last HTML report run:

  npx playwright show-report

錄製的程式碼可以複製到您的檔案中。注意:記錄器可能無法處理懸停等複雜操作。


深入劇作家指南

行動和行為

本節(jié)介紹一些典型的 Playwright 操作與頁面元素互動。請注意,前面介紹的定位器物件在建立過程中實際上並沒有在頁面上定位該元素。即使頁面上不存在該元素,使用元素定位器方法取得定位器物件也不會引發(fā)任何異常。實際的元素查找僅在互動期間發(fā)生。這與 Selenium 的 findElement 方法不同,後者直接在頁面上搜尋元素,如果找不到元素則拋出異常。

文字輸入

使用 fill 方法進(jìn)行文字輸入,主要針對 、

import { test, expect } from '@playwright/test';

test('has title', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await page.getByRole('link', { name: 'Get started' }).click();
  await expect(page).toHaveURL(/.*intro/);
});

複選框和單選按鈕

使用 locator.setChecked() 或 locator.check() 與 input[type=checkbox]、input[type=radio] 或具有 [role=checkbox] 屬性的元素進(jìn)行交互:

  npx playwright test

選擇控制

使用 locator.selectOption() 與

  npx playwright test landing-page.spec.ts

滑鼠點(diǎn)擊

基本操作:

  npx playwright test --debug

對於被其他人覆蓋的元素,請用力點(diǎn)擊:

npx playwright codegen https://leapcell.io/

或以程式方式觸發(fā)點(diǎn)擊事件:

// Text input
await page.getByRole('textbox').fill('Peter');

鍵入字元

locator.type() 方法模擬逐個字元輸入,觸發(fā) keydown、keyup 和 keypress 事件:

await page.getByLabel('I agree to the terms above').check();

expect(await page.getByLabel('Subscribe to newsletter').isChecked()).toBeTruthy();

// Uncheck
await page.getByLabel('XL').setChecked(false);

特殊按鍵

使用 locator.press() 作為特殊鍵:

// Select by value
await page.getByLabel('Choose a color').selectOption('blue');

// Select by label
await page.getByLabel('Choose a color').selectOption({ label: 'Blue' });

// Multi-select
await page.getByLabel('Choose multiple colors').selectOption(['red', 'green', 'blue']);

支援的按鍵包括反引號、減號、等於、反斜線、退格、製表符、刪除、轉(zhuǎn)義、ArrowDown、End、Enter、Home、Insert、PageDown、PageUp、ArrowRight、ArrowUp、F1 -F12、Digit0-Digit9 和KeyA -KeyZ。

文件上傳

使用locator.setInputFiles()指定要上傳的檔案。支援多個文件:

// Left click
await page.getByRole('button').click();

// Double click
await page.getByText('Item').dblclick();

// Right click
await page.getByText('Item').click({ button: 'right' });

// Shift+click
await page.getByText('Item').click({ modifiers: ['Shift'] });

// Hover
await page.getByText('Item').hover();

// Click at specific position
await page.getByText('Item').click({ position: { x: 0, y: 0 } });

焦點(diǎn)元素

使用 locator.focus() 聚焦在某個元素:

   # Using npm
   npm init playwright@latest

   # Using yarn
   yarn create playwright

拖放

拖放過程涉及四個步驟:

  1. 將滑鼠停留在可拖曳元素上。
  2. 按下滑鼠左鍵。
  3. 將滑鼠移到目標(biāo)位置。
  4. 放開滑鼠左鍵。

您可以使用locator.dragTo()方法:

playwright.config.ts    # PlayWright configuration file
package.json            # Node.js configuration file
package-lock.json       # Node.js dependency lock file
tests/                  # Your test directory
  example.spec.ts       # Template test case
tests-examples/         # Example tests directory
  demo-todo-app.spec.ts # Example test case

或者,手動實作該流程:

npx playwright test

對話方塊處理

預(yù)設(shè)情況下,Playwright 會自動取消警告、確認(rèn)和提示等對話方塊。您可以預(yù)先註冊一個對話框處理程序來接受對話框:

Running 6 tests using 6 workers

  6 passed (10s)

To open the last HTML report run:

  npx playwright show-report

處理新頁面

當(dāng)新頁面彈出時,可以使用popup事件來處理:

import { test, expect } from '@playwright/test';

test('has title', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await page.getByRole('link', { name: 'Get started' }).click();
  await expect(page).toHaveURL(/.*intro/);
});

劇作家最佳平臺:Leapcell

Playwright: A Comprehensive Overview of Web UI Automation Testing Framework

Leapcell 是一個專為分散式應(yīng)用程式設(shè)計的現(xiàn)代雲(yún)端運(yùn)算平臺。它採用按量付費(fèi)模式,無閒置成本,確保您只需為使用的資源付費(fèi)。

Leapcell 對劇作家應(yīng)用的獨(dú)特優(yōu)勢

  1. 成本效率

    • 隨選付費(fèi):低流量時避免資源浪費(fèi),尖峰時自動擴(kuò)容。
    • 真實範(fàn)例:例如,根據(jù) getdeploying.com 的計算,在傳統(tǒng)雲(yún)端服務(wù)中租用 1 vCPU 和 2 GB RAM 虛擬機(jī)器的費(fèi)用約為每月 25 美元。在 Leapcell 上,25 美元可以支援處理 694 萬個請求、平均回應(yīng)時間為 60 毫秒的服務(wù),讓您物有所值。
  2. 開發(fā)者體驗

    • 易於使用:直覺的介面,設(shè)定要求極低。
    • 自動化:簡化開發(fā)、測試和部署。
    • 無縫整合:支援 Go、Python、Node.js、Rust 等。
  3. 可擴(kuò)充性和效能

    • 自動縮放:動態(tài)調(diào)整資源以保持最佳效能。
    • 非同步最佳化:輕鬆處理高並發(fā)任務(wù)。
    • 全球覆蓋:分散式資料中心支援低延遲存取。

更多部署範(fàn)例,請參閱文件。

以上是Playwright:Web UI 自動化測試框架全面概述的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機(jī)制通過標(biāo)記-清除算法自動管理內(nèi)存,以減少內(nèi)存洩漏風(fēng)險。引擎從根對像出發(fā)遍歷並標(biāo)記活躍對象,未被標(biāo)記的則被視為垃圾並被清除。例如,當(dāng)對像不再被引用(如將變量設(shè)為null),它將在下一輪迴收中被釋放。常見的內(nèi)存洩漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。 V8引擎通過分代回收、增量標(biāo)記、並行/並發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應(yīng)避免不必要的全局引用、及時解除對象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。 1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標(biāo)之爭Oracle試圖註冊“JavaScript”商標(biāo)的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標(biāo),他認(rèn)為JavaScript是一個開放標(biāo)準(zhǔn),不應(yīng)由Oracle

React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。 1.React靈活自由,適合需要高度定制、團(tuán)隊有架構(gòu)能力的中大型項目;2.Angular提供完整解決方案,適合企業(yè)級應(yīng)用和長期維護(hù)的大項目;3.Vue上手簡單,適合中小型項目或快速開發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊規(guī)模、項目生命週期及是否需要SSR也都是選擇框架的重要因素??傊瑳]有絕對最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) 立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義後立即執(zhí)行的函數(shù)表達(dá)式,用於變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號中使其成為表達(dá)式,並緊隨其後的一對括號來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量衝突,防止多個腳本間的命名重複;2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便於初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鍊式調(diào)用、錯誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。 1.鍊式調(diào)用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結(jié)果並可返回值或Promise;2.錯誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

什麼是緩存API?如何與服務(wù)人員使用? 什麼是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。 1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預(yù)加載關(guān)鍵資源及後臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機(jī)制的區(qū)別。

See all articles