最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中playwright截屏API的實現(xiàn)

 更新時間:2026年01月23日 09:42:00   作者:全棧編程愛好者rebort  
無論是屏幕錄制,還是屏幕截圖,Playwright都提供了簡潔的方法實現(xiàn),本文就來詳細(xì)的介紹一下python中playwright截屏API的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

1. 截屏api

Playwright提供了一個截屏的APIpage.screenshot。使用該API,只需要指定截圖的圖片的保存路徑及文件名即可。如果僅指定文件名,默認(rèn)保存在當(dāng)前目錄。

參數(shù)解析:

  • path:保存圖像的文件路徑。截屏類型將從文件擴(kuò)展名中推斷出來。
  • timeout:設(shè)置最長時間(以毫秒為單位)。默認(rèn)為30秒。
  • animations:在設(shè)置為disabled時停止CSS動畫、CSSWeb動畫。默認(rèn)為allow。
  • clip:指定結(jié)果圖像的剪輯的對象。
  • quality:截屏分辨率的質(zhì)量,介于0-100之間。不適用于.png圖像。
  • mask:當(dāng)截取截屏?xí)r,您可以指定應(yīng)該被遮蔽(覆蓋)的定位器。

例如

await page.screenshot({ path:`test-results/${date.toISOString()}.jpeg`,
      clip:{
          x:0,
          y:0,
          width:100,
          height:100
},
      quality:20,
      type:'jpeg',
      mask:[page.getByTestId("introduction")],
      timeout:1000
});
});

1.1 截圖操作

一步即可實現(xiàn)最簡單的截圖操作:

page.screenshot(path="screenshot.png")

1.2 全屏幕截圖

設(shè)置full_page=True參數(shù),可以實現(xiàn)screenshot 完整的可滾動頁面的屏幕截圖:

const { chromium }=require('playwright');

(async ()=>{
const browser = await chromium.launch();
const page = await browser.newPage();

// 設(shè)置 fullPage 選項為 true
  await page.screenshot({ path:'fullpage.png', fullPage:true});

  await browser.close();
})();

1.3 按元素截圖

也可以針對某個區(qū)域的界面元素截圖,方法是先定位到指定的頁面上元素,再完成screenshot操作:

page.locator(".header").screenshot(path="screenshot.png")

1.4 截圖數(shù)據(jù)流

除了截圖存入文件,也可以把圖像放入緩沖區(qū),并用于后續(xù)處理

screenshot_bytes = page.screenshot()
print(base64.b64encode(screenshot_bytes).decode())

1.5 指定quality

await page.screenshot({ path: ‘screenshot.jpg‘, quality: 50 });

1.6 指定viewportSize

await page.setViewportSize({ width: 1280, height: 720 });
await page.screenshot({ path: ‘screenshot.png‘ });

1.7 指定deviceScaleFactor

await page.screenshot({ path: ‘screenshot@2x.png‘, deviceScaleFactor: 2 });

1.8 指定圖片格式為jpg

await page.screenshot({ path: ‘screenshot.jpg‘, type: ‘jpeg‘ });

注意默認(rèn)為.png格式

2. 錄屏

默認(rèn)情況下,視頻錄制處于關(guān)閉off狀態(tài) 如果需要錄制測試過程視頻,只需要打開設(shè)置即可

import { defineConfig } from '@playwright/test';
export default defineConfig({
  use: {
    video: 'on-first-retry',
  },
});

參數(shù)解釋如下:

  • 'off'- 不要錄制視頻。
  • 'on'- 為每個測試錄制視頻。
  • 'retain-on-failure'- 為每個測試錄制視頻,但從成功的測試運行中刪除所有視頻。
  • 'on-first-retry'- 僅在首次重試測試時錄制視頻。

值得注意的是:視頻僅在頁面或瀏覽器上下文關(guān)閉后可用。

context = browser.newContext(record_video_dir="videos/")

# 確保調(diào)用 close,  videos視頻才會保存
context.close()

2.1 指定viweport大小

視頻大小默認(rèn)為縮小到適合 800x800 的視口大小。視口的視頻放置在輸出視頻的左上角,必要時會縮小以適應(yīng)。可根據(jù)需要設(shè)置視口大小以匹配所需的視頻大小,例如:

import { defineConfig }from'@playwright/test';
exportdefault defineConfig({
use:{
    video:{
      mode:'on-first-retry',
      size:{ width:640, height:480}
}
},
});

2.2 指定視頻保存路徑path

保存的視頻文件將出現(xiàn)在指定的文件夾中。

const path = await page.video().path();
console.log(path);

2.3 典型應(yīng)用場景

每個test都保留record video

const config = {
  use: {
    video: 'on',
  },
};

停止錄制

const config = {
  use: {
    video: {
      mode: 'off',
  },
};

僅錄制failed test

const config = {
  use: {
    video: 'retain-on-failure',
  },
};

僅首次失敗錄制

const config = {
  use: {
    video: 'on-first-retry',
  },
};

打開錄制的視頻

錄制的視頻擴(kuò)展名為 .webm,可以使用任何瀏覽器打開它。視頻也附加在報告中,也可以使用瀏覽器選項保存它,方法是右鍵單擊視頻或其下方的鏈接。

小總結(jié)

無論是屏幕錄制,還是屏幕截圖,Playwright都提供了簡潔的方法實現(xiàn),對于截圖,簡單調(diào)用page.screenshot()即可,對于錄屏,則是在配置文件playwright.config.js中打開設(shè)置mode: {video: on}即可。

提到web api自動化測試,已經(jīng)有很多工具可以選擇:如基于命令行的curl,基于UI界面的postman,基于瀏覽器自帶的F12,以及在敏捷團(tuán)隊越來越流行的apifox,都可以很好地完成web api自動化測試。對于playwright來說,提供的api testing能力可以很方便地和ui testing能力結(jié)合,從而實現(xiàn)更復(fù)雜的測試驗證任務(wù)。

1.Web API介紹

Web API,即 Web Application Programming Interface,是一種用于提供 Web 服務(wù)的接口,通過 HTTP 協(xié)議進(jìn)行通信。它允許不同的應(yīng)用程序在網(wǎng)絡(luò)上進(jìn)行數(shù)據(jù)交換和通信,常見的 Web API 有下列4種: RESTful APISOAP API、 GraphQL APIgRPC API

REST API

REST,即 Representational State Transfer,是一種基于 HTTP 協(xié)議的軟件架構(gòu)風(fēng)格,用于構(gòu)建分布式系統(tǒng)。REST API 是一種符合 REST 原則的 Web API,它使用 HTTP 方法(如 GET、POSTPUT、DELETE)來實現(xiàn)資源的增刪改查操作。

SOAP API

SOAP,即 Simple Object Access Protocol,是一種基于 XML 的通信協(xié)議,用于在分布式系統(tǒng)中進(jìn)行信息交換。SOAP API 使用 XML 格式來定義消息格式和消息協(xié)議,通常使用 HTTP 或 SMTP 協(xié)議來傳輸數(shù)據(jù)。

GraphQL API

GraphQL 是一種用于構(gòu)建 API 的查詢語言,它允許客戶端根據(jù)自身的需求來請求特定的數(shù)據(jù)。GraphQL API 提供了一個靈活的數(shù)據(jù)查詢和獲取方式,客戶端可以通過一個請求來獲取多個資源的數(shù)據(jù),從而減少網(wǎng)絡(luò)傳輸量和提高數(shù)據(jù)獲取效率。

gRPC API

gRPC 是一種高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,它使用 Protocol Buffersprotobuf)作為接口定義語言(IDL),支持多種編程語言和平臺。gRPC API 提供了一種簡單而強(qiáng)大的方法來定義服務(wù)接口和方法,并在客戶端和服務(wù)器之間進(jìn)行通信。

下列表格總結(jié)了他們的主要特點:

Web API類型

主要貢獻(xiàn)者

主要特點

RESTful API

Roy Fielding

資源、路徑、請求方法。在互聯(lián)網(wǎng)應(yīng)用廣泛

SOAP API

微軟

基于xml,較復(fù)雜。支持事務(wù)處理

GraphQL API

Facebook

一次請求獲得多個資源。減少數(shù)據(jù)傳輸

gRPC API

Google

基于http/2,速度更快,性能更高,也更復(fù)雜

2.REST API介紹

RESTful API

是符合REST原則的API設(shè)計風(fēng)格,它通過使用HTTP協(xié)議中的各種方法來操作資源,包括GETPOST、PUT、DELETE等。

REST

Representational State Transfer,表述性狀態(tài)傳遞,服務(wù)器將資源狀態(tài)表述傳遞給客戶端。

RESTful API特點

  • 資源導(dǎo)向: RESTful API的核心概念是資源,每個資源都有一個唯一的標(biāo)識符(URI)。客戶端通過HTTP方法對資源進(jìn)行操作,如GET用于獲取資源、POST用于創(chuàng)建資源、PUT用于更新資源、DELETE用于刪除資源等。
  • 無狀態(tài)性: RESTful API是無狀態(tài)的,每個請求都必須包含足夠的信息來處理該請求,而不依賴于服務(wù)器上的會話狀態(tài)。這樣可以使得API的設(shè)計更加簡潔,并且易于擴(kuò)展和維護(hù)。
  • 可緩存性: RESTful API通過利用HTTP協(xié)議中的緩存機(jī)制來提高性能和可擴(kuò)展性。服務(wù)器可以在響應(yīng)中包含緩存控制信息,客戶端可以根據(jù)這些信息來緩存資源,減少不必要的網(wǎng)絡(luò)請求。
  • 統(tǒng)一接口: RESTful API使用統(tǒng)一的接口來訪問資源,即通過HTTP方法對資源進(jìn)行操作。這種統(tǒng)一接口的設(shè)計使得API更易于理解和使用。

下面,重點結(jié)合Playwright說明下REST api如何完成自動化測試。

3. 常見api自動化測試工具

瀏覽器調(diào)試工具

chorome瀏覽器自帶的devtools,對于測試人員和開發(fā)人員,可能都是最需要掌握的調(diào)試工具。典型的測試場景如:模擬慢速網(wǎng)絡(luò)連結(jié)

官網(wǎng)有詳細(xì)介紹:

https://developer.chrome.com/docs/devtools?hl=zh-cn

curl

Curl 是一個基礎(chǔ)的開源命令行工具,用于在服務(wù)器之間傳輸數(shù)據(jù),同時支持創(chuàng)建 HTTP 請求并將其發(fā)送到后端服務(wù)中,同時也支持使用 cURL 命令發(fā)送 HTTP 請求,例如 POST、PUT 和 DELETE。例如:

postman

Postman,有客戶端版本和 web 網(wǎng)頁版。Postman 支持多種協(xié)議和格式,包括 HTTP、HTTPS、GraphQLREST 等。Postman 的優(yōu)點在于它易于使用,支持多種請求類型和參數(shù)設(shè)置,可以方便地創(chuàng)建和管理 API 測試套件;還支持將測試結(jié)果導(dǎo)出為多種格式,如 JSONCSV 等;還提供了一些有用的工具,如 Mock Server,可以幫助用戶模擬 API 響應(yīng)以及運行單元測試。

JMeter

JMeter主要用來做性能測試。優(yōu)點是Java編寫,免費開源,無需安裝,做web api測試也是可以的。

soupUI

SoapUI 是專門為 API 測試而開發(fā)的開源工具,可以輕松測試 REST 和 SOAP API。

apifox

Apifox 是一款集 API 文檔、API 調(diào)試、API mock、API 自動化測試為一體的接口一站式協(xié)作平臺,類似于 PostmanSwagger、mock 和 Jmeter 的綜合體。它提供了直觀、易于使用的界面,支持多種 HTTP 請求方法、參數(shù)類型和數(shù)據(jù)格式,還提供了豐富的測試和調(diào)試功能,例如斷言、測試集合、環(huán)境變量等。

下列表格總結(jié)了他們的主要特點:

工具

描述

主要優(yōu)點

瀏覽器調(diào)試工具

瀏覽器自帶的開發(fā)者工具,可用于發(fā)送和調(diào)試HTTP請求。

無需額外安裝軟件,直接在瀏覽器中調(diào)試,方便快捷。
提供了豐富的調(diào)試功能,包括請求和響應(yīng)的查看、編輯和分析等。

curl

命令行工具,用于發(fā)送和接收HTTP請求。

跨平臺,支持Linux、macOS和Windows等操作系統(tǒng)。靈活,可通過命令行參數(shù)設(shè)置各種請求參數(shù)和選項。

Postman

圖形界面工具,提供了豐富的功能和可視化操作界面。

用戶友好,無需編寫代碼,通過可視化界面快速構(gòu)建和發(fā)送請求。支持多種請求類型和測試腳本編寫,功能強(qiáng)大。

JMeter

Java編寫的壓力測試工具,也可用于接口測試。

功能強(qiáng)大,支持多種協(xié)議和高并發(fā)壓力測試。
可以通過插件擴(kuò)展功能,滿足不同測試需求。

SoupUI

支持SOAP協(xié)議和RESTful風(fēng)格的接口測試。

提供了豐富的接口測試功能,支持多種協(xié)議和數(shù)據(jù)格式。
用戶界面友好,易于使用和學(xué)習(xí)。

apifox

API 接口文檔管理工具

適合團(tuán)隊協(xié)作,從api定義,開放,測試,文檔,全生命周期管理

3.Playwright發(fā)送請求

以上工具在不同維度和層面提供了不同的能力,幫助完成web api測試。就自動化來說,無論是python環(huán)境下的requests庫,還是Java環(huán)境下的REST-assured,選擇Playwright有一個額外的好處,那就是可以和web UI自動化測試無縫連接,包括但不限于如下場景:

  • 通過調(diào)用api獲取token,在后續(xù)自動化測試中復(fù)用,避免從UI層反復(fù)login的痛點
  • 利用api提前創(chuàng)建測試數(shù)據(jù),比通過UI層的交互來創(chuàng)建數(shù)據(jù)更加高效
  • 利用api來清理測試過程中產(chǎn)生的垃圾數(shù)據(jù),為下次自動化測試做好準(zhǔn)備
  • 調(diào)用第三方api準(zhǔn)備測試環(huán)境,包括測試數(shù)據(jù)、服務(wù)、緩存、中間件...

Playwright主要通過APIRequestContext 方法來實現(xiàn)。

簡單來說,掌握api test發(fā)送request請求,包含了4個要素和4方法:

4要素

  • url
  • method
  • headers
  • parameter/Payload

request

  • get
  • post
  • delete
  • put

CRUD

以下是API測試中基本的CRUD(創(chuàng)建、讀取、更新、刪除)操作:

操作

HTTP方法

描述

創(chuàng)建

POST

創(chuàng)建一個新的資源。客戶端發(fā)送一個帶有新資源數(shù)據(jù)的POST請求。

讀取

GET

檢索現(xiàn)有資源或資源列表??蛻舳税l(fā)送一個GET請求到API端點。

更新

PUT 或 PATCH

修改現(xiàn)有資源??蛻舳税l(fā)送一個帶有更新數(shù)據(jù)的PUT或PATCH請求。PUT請求用新數(shù)據(jù)替換整個資源,而PATCH只更新指定的字段。

刪除

DELETE

刪除現(xiàn)有資源??蛻舳税l(fā)送一個帶有要刪除資源的唯一標(biāo)識符的DELETE請求。

這些操作構(gòu)成了API測試的基礎(chǔ),使測試人員能夠有效地與應(yīng)用程序的資源進(jìn)行交互。

APIRequestContext使用

import { test, expect } from '@playwright/test';
import { request, APIRequestContext } from '@playwright/test';
 
test('get api get', async () => {
  const apiContext: APIRequestContext = await request.newContext();
  const response = await apiContext.get('https://reqres.in/api/users?page=2');
  const responseCode = await response.status();
  console.log(responseCode);
  expect(responseCode).toBe(200);
});
 
test('get api get2', async ({request}) => {
  const response = await request.get('https://reqres.in/api/users?page=2');
  const responseCode = await response.status();
  console.log(responseCode);
  expect(responseCode).toBe(200);
});
 
test('get api post', async () => {
  const apiContext: APIRequestContext = await request.newContext();
  const response = await apiContext.post('https://reqres.in/api/users?page=2', {
  data: {
    title: 'Book Title',
    author: 'John Doe',
   },
  headers: {
    authorization: `Bearer eyJhbGciOiJIUzcCI6IkpXVCJ9.eyJzd`
   }
  });
  const resBody = await response.body();
  const responseCode = await response.status();
  console.log(responseCode);
  expect(responseCode).toBe(201);
});

說明如下:

  • APIRequestContext生成apiContext實例
  • apiContext.get()方法
  • response.status()斷言返回值為200
  • request方法類似
  • post、get調(diào)用方法類似

4.Playwright處理響應(yīng)

接口斷言寫法,通常3個方面考慮,分別是:返回值、返回數(shù)據(jù)數(shù)據(jù)類型

status code

expect(code).toBe(200);

JSON data

expect(res.message).toContain('操作成功');

JSON Schema

expect(typeof phoneNumber).toBe('string');

結(jié)論

  • Web API廣泛用于互聯(lián)網(wǎng)基于前后端分離的項目中,通訊協(xié)議http/https時,一般也稱為REST API
  • CRUD操作,對應(yīng)于數(shù)據(jù)的創(chuàng)建、讀取、更新、刪除操作,操作結(jié)果可以用status code狀態(tài)碼獲取,也可以用json data結(jié)構(gòu),而json schema往往對應(yīng)數(shù)據(jù)類型的校驗,在實際項目中,斷言的內(nèi)容,可以以上3個維度考慮
  • 靈活運用UI testingapi testing能力,可以實現(xiàn)更復(fù)雜的自動化驗證需求

到此這篇關(guān)于python中playwright截屏API的實現(xiàn)的文章就介紹到這了,更多相關(guān)playwright截屏API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python文件讀寫,自定義分隔符(custom delimiter)

    使用Python文件讀寫,自定義分隔符(custom delimiter)

    這篇文章主要介紹了使用Python文件讀寫,自定義分隔符(custom delimiter),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)做人臉識別的示例代碼

    使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)做人臉識別的示例代碼

    這篇文章主要介紹了使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)做人臉識別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python網(wǎng)絡(luò)編程之socket與socketserver

    Python網(wǎng)絡(luò)編程之socket與socketserver

    這篇文章介紹了Python網(wǎng)絡(luò)編程之socket與socketserver,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 在Python的setuptools框架下生成egg的教程

    在Python的setuptools框架下生成egg的教程

    這篇文章主要介紹了在Python的setuptools框架下生成egg的教程,本文來自于IBM官方開發(fā)者技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Linux下使用python腳本執(zhí)行BCP導(dǎo)入導(dǎo)出方式

    Linux下使用python腳本執(zhí)行BCP導(dǎo)入導(dǎo)出方式

    這篇文章主要介紹了Linux下使用python腳本執(zhí)行BCP導(dǎo)入導(dǎo)出方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • python實現(xiàn)梯度法 python最速下降法

    python實現(xiàn)梯度法 python最速下降法

    這篇文章主要為大家詳細(xì)介紹了python梯度法,最速下降法的原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python編程實現(xiàn)及時獲取新郵件的方法示例

    Python編程實現(xiàn)及時獲取新郵件的方法示例

    這篇文章主要介紹了Python編程實現(xiàn)及時獲取新郵件的方法,涉及Python實時查詢郵箱及郵件獲取相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • django下創(chuàng)建多個app并設(shè)置urls方法

    django下創(chuàng)建多個app并設(shè)置urls方法

    在本篇文章里小編給大家分享的是一篇關(guān)于django下創(chuàng)建多個app并設(shè)置urls方法,需要的朋友們可以參考學(xué)習(xí)下。
    2020-08-08
  • Python中類的mro與繼承關(guān)系詳解(二)

    Python中類的mro與繼承關(guān)系詳解(二)

    這篇文章主要介紹了Python中類的mro與繼承關(guān)系詳解,上一篇我們已經(jīng)通過mro相關(guān)資料介紹了mro繼承關(guān)系的基礎(chǔ)內(nèi)容,這片緊接著上一篇文章展開詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2022-07-07
  • pytorch?dataset實戰(zhàn)案例之讀取數(shù)據(jù)集的代碼

    pytorch?dataset實戰(zhàn)案例之讀取數(shù)據(jù)集的代碼

    這篇文章主要介紹了pytorch?dataset實戰(zhàn)案例讀取數(shù)據(jù)集的相關(guān)知識,這段代碼可以作為讀取數(shù)據(jù)集的一個DataSet類的基礎(chǔ)類,可以擴(kuò)充進(jìn)行修改,以后有類似需要可以拿過來修改,本文結(jié)合實例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10

最新評論

玉溪市| 南城县| 盘山县| 武陟县| 张掖市| 长乐市| 肥东县| 东乌珠穆沁旗| 新宁县| 通城县| 政和县| 内黄县| 河津市| 舞阳县| 建宁县| 军事| 米林县| 邵阳市| 鄂托克前旗| 赣榆县| 栾城县| 深圳市| 孝义市| 壤塘县| 神农架林区| 西乌珠穆沁旗| 稷山县| 天全县| 永清县| 万宁市| 长阳| 博兴县| 剑川县| 赤峰市| 固始县| 斗六市| 乌拉特后旗| 仪陇县| 麟游县| 陈巴尔虎旗| 来凤县|