2. Python+Playwright playwright的API

Playwright支持同步和異步兩種API,使用異步API需要導入asyncio庫,它是一個可以用來實現Python協程的庫,更詳細介紹可參考Python協程 。我們可以根據自己的偏好選擇適合的模式。

同步與異步模式原理
同步操作方式:在代碼執行時,程序會阻塞等待每個操作執行的結果,直到該操作執行結束才能繼續執行后面的代碼。同步代碼容易理解和編寫,但如果在網絡請求等 I/O 操作時會造成大量的等待時間,影響程序的執行效率。

異步操作方式:在代碼執行時,當遇到需要等待操作執行的時候,程序不會被阻塞,而是繼續執行其他的代碼。當該操作執行的結果返回時,程序會自動跳回去接著執行之前被暫停的代碼。異步操作雖然需要一定的學習成本,但可以提升程序的執行效率。

同步模式

· 直接順序執行測試邏輯,直到完成。

· 使用上下文管理器或啟動/關閉方法控制瀏覽器生命周期。

· 簡單易用,適合同步測試場景。

· 但無法實現異步或重疊的測試邏輯。

異步模式

· 利用asyncio模塊以異步非阻塞方式執行測試邏輯。

· 瀏覽器啟動/關閉和大多數Playwright API也是異步的,需要await。

· 可以實現復雜的異步或重疊測試邏輯。

· 但較難調試,有一定學習成本。

同步和異步的概念
同步:發送一個請求,等待返回,然后再發送下一個請求。

異步:發送一個請求,不等待返回,隨時可以再發送下一個請求。

同步和異步實踐
測試用例
假設一共有2條測試用例:
用例1步驟如下:
1)chrome瀏覽器打開百度
2)搜索框輸入“test”
3)點擊百度一下搜索
4)點擊搜索結果的第2頁
用例2步驟:
1)chrome瀏覽器打開搜狗搜索
2)搜索框輸入“test”
3)點擊搜狗搜索
4)點擊搜索結果的第2頁

同步
這里我們使用sync_playwright上下文管理器同步啟動Playwright,然后編寫同步測試邏輯。

參考代碼
根據上述測試用例編寫自動化測試腳本代碼如下:

import time
from playwright.sync_api import sync_playwrightdef testcase1():print('testcase1 start')with sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto("https://www.baidu.com/")print(page.title())page.fill("input[name=\"wd\"]", "test")page.click("text=百度一下")page.click("#page >> text=2")browser.close()print('testcase1 done')def testcase2():print('testcase2 start')with sync_playwright() as p:browser2 = p.chromium.launch(headless=False)page2 = browser2.new_page()page2.goto("https://www.sogou.com/")print(page2.title())page2.fill("input[name=\"query\"]", "test")page2.click("text=搜狗搜索")page2.click("#sogou_page_2")browser2.close()print('testcase2 done')start = time.time()
testcase1()
testcase2()
end = time.time()
print('Running time: %s Seconds' % (end - start))

在這里插入圖片描述

異步
這里我們使用asyncio模塊異步啟動Playwright,然后編寫異步測試邏輯。需要使用await關鍵字標識異步操作。

參考代碼
根據上述測試用例編寫自動化測試腳本代碼如下:

import asyncio
import timefrom playwright.async_api import async_playwrightasync def testcase1():print('testcase1 start')async with async_playwright() as p:browser = await p.chromium.launch(headless=False)page = await browser.new_page()await page.goto("https://www.baidu.com/")print(await page.title())await page.fill("input[name=\"wd\"]", "test")await page.click("text=百度一下")await page.click("#page >> text=2")await browser.close()print('testcase1 done')async def testcase2():print('testcase2 start')async with async_playwright() as p:browser2 = await p.chromium.launch(headless=False)page2 = await browser2.new_page()await page2.goto("https://www.sogou.com/")print(await page2.title())await page2.fill("input[name=\"query\"]", "test")await page2.click("text=搜狗搜索")await page2.click("#sogou_page_2")await browser2.close()print('testcase2 done')async def main():task1 = asyncio.create_task(testcase1())task2 = asyncio.create_task(testcase2())tasks = [task1, task2]print('before await')await asyncio.gather(*tasks)start = time.time()
asyncio.run(main())
end = time.time()
print('Running time: %s Seconds' % (end - start))

在這里插入圖片描述

在這里插入圖片描述

通過對比同步和異步的運行時間可以看到,使用異步編程的方式可以顯著提升測試效率

Python Playwright 支持同步和異步兩種操作方式。

同步操作方式:在代碼執行時,程序會阻塞等待每個操作執行的結果,直到該操作執行結束才能繼續執行后面的代碼。同步代碼容易理解和編寫,但如果在網絡請求等 I/O 操作時會造成大量的等待時間,影響程序的執行效率。

異步操作方式:在代碼執行時,當遇到需要等待操作執行的時候,程序不會被阻塞,而是繼續執行其他的代碼。當該操作執行的結果返回時,程序會自動跳回去接著執行之前被暫停的代碼。異步操作雖然需要一定的學習成本,但可以提升程序的執行效率。

Python Playwright 默認使用異步操作方式。可以通過使用 await 關鍵字或 async with 語法來定義異步操作,或者使用 sync 關鍵字來定義同步操作。

headless 模式

在launch方法的參數中添加 headless=False playwright默認是無頭模式運行,True是無頭模式,False是有頭模式,即在電腦上能看到瀏覽器的運行界面。默認情況下,Playwright 以無頭模式運行瀏覽器。要查看瀏覽器 UI,請headless=False在啟動瀏覽器時傳遞標志。有頭模式適用于調試,而無頭模式適用于CI / cloud執行。

headless 無頭模式運行瀏覽器示例: 打開瀏覽器/不打開瀏覽器

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:# headless無頭模式運行瀏覽器示例: 不打開瀏覽器界面browser = p.chromium.launch()# 非headless無頭模式運行瀏覽器示例: 打開瀏覽器界面# browser = p.chromium.launch(headless=False)          # 啟動 chromium 瀏覽器page = browser.new_page()              # 打開一個標簽頁page.goto("https://www.baidu.com")     # 打開百度地址print(page.title())                    # 打印當前頁面titlepage.click("input[name=\"wd\"]")       # 點擊輸入框page.fill("input[name=\"wd\"]", "chromium")  # 在輸入框輸入瀏覽器名字page.screenshot(path=f'example-{p.chromium.name}.png')browser.close()                        # 關閉瀏覽器對象

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40037.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++的const

const在C中是一個非常重要的關鍵字,用于定義不可變的變量、函數參數、成員函數等。它可以提高代碼的可讀性、安全性,并幫助編譯器進行優化。 定義常量 使用const定義不可變的變量: const int MAX_SIZE 100;常量指針 指向常量的指針和常量…

【ARMv8/v9 GIC 系列 5 -- GIC GICD_CTRL 使用詳細介紹】

文章目錄 GICD_CTRLGICD_CTLR 寄存器結構RWP(Register Write Pending)E1NWF(Enable 1 of N Wakeup Functionality)DS(Disable Security) 親和性路由(Affinity Routing)ARE_NSARE_S 中…

【java計算機畢設】服裝生產管理系統java MySQL springboot vue html maven項目設計源代碼+萬字文檔

目錄 1項目功能 2項目介紹 3項目地址 1項目功能 【java計算機畢設】服裝生產管理系統java MySQL springboot vue html maven項目代碼文檔 2項目介紹 系統功能: 服裝生產管理系統包括管理員、用戶兩種角色。 管理員功能包括個人中心模塊用于修改個人信息和密碼&a…

【UE5.3】筆記6-創建可自由控制Pawn類

搭建場景 搭建一個場景:包含地板、圍墻。可以根據喜好加一些自發光的效果。 增加食物 創建食物藍圖類,在場景里放置一些食物以供我們player去吃掉獲取分值。 創建可控制的layer 我們先右鍵創建一個藍圖繼承自pawn類,起名BP_Player&#xf…

Python-算法編程100例-二分法(入門級)-業務負載分配

題目: 現有一個服務器集群(服務器數量為 serverNum),和一批不同類型的任務(用數組 tasks 表示,下標表示任務類型,值為任務數量)。 現需要把這批任務都分配到集群的服務器上&#x…

2024年在WordPress中創建銷售活動的專家級優惠券方法

2024年在WordPress中創建銷售活動的專家級優惠券方法 今天我想和大家分享一些關于如何在WordPress網站上使用專家級優惠券工具來創建銷售活動的經驗。對于已經在電商領域有一定經驗的店主,利用專家級優惠券不僅能吸引顧客,還能顯著增加銷量。在這篇文章…

【Linux】線程封裝與互斥(萬字)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 文章目錄 前言 C多線程的用法 對原生線程進行一次封裝 理解pthread線程 Linux線程互斥 進程線程間的互斥相關背景概念 互斥量mutex 操作共享變量會有問題的售票…

[go-zero] goctl 生成api和rpc

文章目錄 1.goctl 概述2.go-zero 需要安裝的組件3.生成 api4.生成 rpc 1.goctl 概述 goctl支持多種rpc,較為流行的是google開源的grpc,這里主要介紹goctl rpc protoc的代碼生成與使用。protoc是grpc的命令,作用是將proto buffer文件轉化為相…

探討命令模式及其應用

目錄 命令模式命令模式結構命令模式適用場景命令模式優缺點練手題目題目描述輸入描述輸出描述題解 命令模式 命令模式是一種行為設計模式, 它可將請求轉換為一個包含與請求相關的所有信息的獨立對象。 該轉換讓你能根據不同的請求將方法參數化、 延遲請求執行或將其…

《亞馬遜搬運亞馬遜產品》配合跟賣采集爬取跟賣店鋪高質量

亞馬遜高質量產品如何搬運?亞馬遜采集亞馬遜。 哈嘍大家好,大家講一下做亞馬遜是發貨、鋪貨這塊的功能。目前這款軟件做跟賣大家都知道,同時也支持做鋪貨。鋪貨可以采集國內的1688、淘寶、京東都可以采,采完之后也可以采速賣通&a…

周周星分享7.3—基于氣象大數據的自動站實況聯合預測

賽題 2024中國高校計算機大賽 — 大數據挑戰賽 經驗分享 大家好,我是掃地僧團隊的隊長,以前參加這樣打榜的比賽比較少,了解的打榜技巧不是太多,所以想從科研的角度給大家一點分享。 這次比賽主要從以下五個步驟進行&#xff1a…

Linux Doxygen快速生成文檔

此前寫過一篇編寫Doxygen格式的注釋以用于生成文檔,點擊以查閱, Doxygen常用語法與字段記錄,但是當時用的windows桌面版的doxygen,最近使用ubuntu編寫代碼想直接使用doxygen生成,故寫下此博客 Doxygen Doxygen是一個用于生成軟件文檔的工具,它可以從代碼中提取注釋…

(四)opengl函數加載和錯誤處理

#include <glad/glad.h>//glad必須在glfw頭文件之前包含 #include <GLFW/glfw3.h> #include <iostream>void frameBufferSizeCallbakc(GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height);std::cout << width << &qu…

PHP多線程爬蟲:高效解析電商網頁內容

如何使用php多線程編寫高效的網頁爬蟲 隨著互聯網的發展和數據的不斷增長&#xff0c;網頁爬蟲成為了一種非常重要的工具。通過網頁爬蟲&#xff0c;我們可以自動地從各種網站上獲取大量的數據&#xff0c;并進行進一步的處理和分析。而PHP作為一種廣泛使用的編程語言&#xf…

Android高級面試_6_性能優化

Android 高級面試-7&#xff1a;網絡相關的三方庫和網絡協議等 1、網絡框架 問題&#xff1a;HttpUrlConnection, HttpClient, Volley 和 OkHttp 的區別&#xff1f; HttpUrlConnection 的基本使用方式如下&#xff1a; URL url new URL("http://www.baidu.com")…

SwanLinkOS首批實現與HarmonyOS NEXT互聯互通,軟通動力子公司鴻湖萬聯助力鴻蒙生態統一互聯

在剛剛落下帷幕的華為開發者大會2024上&#xff0c;伴隨全場景智能操作系統HarmonyOS Next的盛大發布&#xff0c;作為基于OpenHarmony的同根同源系統生態&#xff0c;軟通動力子公司鴻湖萬聯全域智能操作系統SwanLinkOS首批實現與HarmonyOS NEXT互聯互通&#xff0c;率先攻克基…

大模型與機器人精彩碰撞-7月5日晚上八點不見不散!

在瞬息萬變的科技時代&#xff0c;新興人工智能和機器人技術的結合正在引領新一輪的創新浪潮。你是否想成為未來科技的領航者&#xff1f;你是否想了解最前沿的AI與機器人技術&#xff1f;行麥科技重磅推出的“AIGC時代的生存法則”AI系列課&#xff0c;將為你揭開大模型與機器…

創建kset

1、kset介紹 2、相關結構體和api介紹 2.1 struct kset 2.2 kset_create_and_add kset_create_and_addkset_createkset_registerkobject_add_internalkobject_add_internal2.3 kset_unregister kset_unregisterkobject_delkobject_put3、實驗操作 #include<linux/module.…

【leetcode64-69二分查找、70-74棧、75-77堆】

二分查找[64-69] 時間復雜度O(log n)&#xff0c;要想到二分排序 35.搜索插入位置 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left 0right len(nums)-1while left < right: #左閉右閉mid (leftright)//2if nums[mid] < target…

【算法訓練記錄——Day39】

Day39——動態規劃Ⅱ 1.leetcode_62不同路徑2.leetcode_63不同路徑Ⅱ3.leetcode_343整數拆分4.leetcode_96不同的二叉樹搜索 1.leetcode_62不同路徑 思路&#xff1a;經典的動態規劃問題&#xff1a; dp[i][j]表示到達&#xff08;i&#xff0c;j&#xff09;位置時的不同路徑…