【Playwright+Python】手把手帶你寫一個自動化測試腳本

?

如何使用代理方式打開網頁

?

在?playwright.chromium.launch()?中傳入?proxy?參數即可,示例代碼如下:

1、同步寫法:
from?playwright.sync_api?import?sync_playwrightproxy?=?{'server':?'http:/127.0.0.1:8080'}def?run():with?sync_playwright()?as?p:browser?=?p.chromium.launch(headless=False,?proxy=proxy)page?=?browser.new_page()page.goto('https://www.baidu.com')title?=?page.title()if?"百度"?in?title:print("打開百度成功")else:print("打開百度失敗")browser.close()run()
2、異步寫法:
from?playwright.async_api?import?async_playwright
import?asyncioproxy?=?{'server':?'http:/127.0.0.1:8080'}async?def?run():async?with?async_playwright()?as?p:browser?=?await?p.chromium.launch(headless=False,?proxy=proxy)page?=?await?browser.new_page()await?page.goto('https://www.baidu.com')title?=?await?page.title()if?"百度"?in?title:print("打開百度成功")else:print("打開百度失敗")await?browser.close()asyncio.get_event_loop().run_until_complete(run())

?

同步和異步寫法對比

1、同步的優點:
  • 代碼結構簡單易懂,不需要學習async/await語法

  • 適用于小規模或簡單任務

  • 調試和理解同步代碼更簡單

2、異步的優點:
  • 能更高效地利用系統資源,避免阻塞等待IO

  • 對于長時間操作如網絡請求更高效

  • 可以支持并發執行多個任務

  • 對于大規模和復雜系統更有利

3、區別
  • 對于小任務和學習用途,同步代碼結構更簡單。

  • 對于需要長時間IO等待的任務(如網絡請求),使用異步可以更高效。

  • 對于需要支持高并發的系統(如網站),使用異步模型可以支持更多并發連接。

  • 多線程同步會帶來鎖的問題,而異步避免了鎖的使用。

  • 異步的FUTURE模式也更易于擴展性好,支持動態增加回調函數。

4、總結
  • 小任務用同步

  • 長時間IO任務用異步

  • 高并發系統用異步

  • 以后的功能擴展考慮異步更靈活

一般來說對于現代化系統,異步編程模型將是主流趨勢。但同步在某些場景也同樣易用。選擇時要根據具體需求來權衡。

?

寫一個自動化測試腳本

?

1、示例腳本

算是個入門的例子,關于每句話的意思,看我注釋即可,示例代碼如下:

import?re
from?playwright.sync_api?import?Page,?expect,?sync_playwrightproxy?=?{'server':?'http://127.0.0.1:8080'}def?test_baidu():with?sync_playwright()?as?p:browser?=?p.chromium.launch(headless=False,?proxy=proxy)page?=?browser.new_page()#?跳轉到baidu頁面page.goto("https://www.baidu.com/")#?點擊輸入框page.locator("#kw").click()#?輸入框輸入seleniumpage.locator("#kw").fill("selenium")#?點擊百度一下查詢按鈕page.get_by_role("button",?name="百度一下").click()#?驗證輸入框是否輸入seleniumexpect(page.locator("#kw")).to_have_value("selenium")#?驗證頁面是否包含文本“大家還在搜”expect(page.locator("#content_left")).to_contain_text("大家還在搜")#?退出瀏覽器browser.close()

?

注意:測試類和測試方法都要用test_ 前綴命名

?

2、基本操作

這是 Playwright 常用操作列表,請注意,還有許多其他操作,請務必查看定位器 API 部分以了解更多相關信息。

操作描述
locator.check()選中輸入復選框
locator.click()點擊元素
locator.uncheck()取消選中輸入復選框
locator.hover()將鼠標懸停在元素上
locator.fill()填寫表單字段,輸入文本
locator.focus()聚焦元素
locator.press()按下單個鍵
locator.set_input_files()選擇要上傳的文件
locator.select_option()從下拉菜單中選擇選項
3、斷言操作
斷言描述
expect(locator).to_be_checked()復選框處于選中狀態
expect(locator).to_be_enabled()控件已啟用
expect(locator).to_be_visible()元素可見
expect(locator).to_contain_text()元素包含文本
expect(locator).to_have_attribute()元素具有屬性
expect(locator).to_have_count()元素列表已給出長度
expect(locator).to_have_text()元素匹配文本
expect(locator).to_have_value()輸入元素具有值
expect(page).to_have_title()頁面有標題
expect(page).to_have_url()頁面有 URL

?

4、fixtures夾具的使用

示例代碼:

import?pytest
from?playwright.sync_api?import?Page,?expect,?sync_playwright@pytest.fixture(scope="function",?autouse=True)
def?before_each_after_each(page:?Page):print("before?the?test?runs")page.goto("https://www.baidu.com/")yieldprint("after?the?test?runs")def?test_main_navigation(page:?Page):page.locator("#kw").fill("萬物皆可連 博客園")page.get_by_role("button",?name="百度一下").click()expect(page.locator("#content_left")).to_contain_text("萬物皆可連?-?博客園")

代碼解釋:

  • 定義了一個名為 before_each_after_each 的 fixture(夾具),它的作用域是每個測試函數,并且設置為自動應用于每個測試函數。

  • 在這個 fixture 中:打印 "before the test runs",表示測試運行前執行的操作。使用 page.goto("https://www.baidu.com/") 打開百度首頁。

  • yield 關鍵字在這個 fixture 運行期間掛起,等待測試函數執行。測試函數將在 fixture 的環境下執行。

?

?

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

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

相關文章

Kafka精要

Apach Kafka 是一款分布式流處理框架,用于實時構建流處理應用。它有一個核心 的功能廣為人知,即 作為企業級的消息引擎被廣泛使用 kafka設計 Kafka 將消息以 topic 為單位進行歸納 將向 Kafka topic 發布消息的程序成為 producers. 將預訂 topics 并消…

Linux內核開發-編寫一個proc文件

0.前言 上一章(點擊返回上一章)完成了一個內核模塊的編寫,實現了在內核運行時的動態加載和卸載。 在模塊的開發調測過程中或者模塊運行過程中,可能需要打印內核模塊的變量的值或者想要動態開關模塊的運行日志打印,那么…

小盒子跑大模型!基于算能BM1684X+FPGA平臺實現大模型私有化部署

當前,在人工智能領域,大模型在豐富人工智能應用場景中扮演著重要的角色,經過不斷的探索,大模型進入到落地的階段。而大模型在落地過程中面臨兩大關鍵難題:對龐大計算資源的需求和對數據隱私與安全的考量。為應對這些挑…

springcloud-gateway include-expression 配置說明

在開發過程中遇到的一些配置問題,記錄下來以供參考 spring-gateway版本是2.2.9-release,使用的spring cloud dependence 是 Hoxton.SR12 在依賴eureka 服務發現并自動將發現服務器加入到router中的時候,需要指定對應的服務進行添加,根據文檔…

postman國內外競爭者及使用詳解分析

一、postman簡介 Postman 是一款廣泛使用的 API 開發和測試工具,適用于開發人員和測試人員。它提供了一個直觀的界面,用于發送 HTTP 請求、查看響應、創建和管理 API 測試用例,以及自動化 API 測試工作流程。以下是 Postman 的主要功能和特點…

linux的CP指令

實現 CP 指令 src 源文件 des 目標文件 執行流程: 打開源文件( src ) open 打開目標文件( des ) open 寫入目標文件 write 讀取 src 文件到緩存數組 read 關閉目標文件和源文件 close ./a.out src.c de…

開源網安參與編制的《代碼大模型安全風險防范能力要求及評估方法》正式發布

?代碼大模型在代碼生成、代碼翻譯、代碼補全、錯誤定位與修復、自動化測試等方面為研發人員帶來了極大便利的同時,也帶來了對安全風險防范能力的挑戰。基于此,中國信通院依托中國人工智能產業發展聯盟(AIIA),聯合開源…

chmod,chown命令

一.chmod命令 1.chmod命令的作用 我們使用chmod命令來修改文件和文件夾的權限信息(只有文件和文件夾的所屬用戶和root用戶可以修改該文件或文件夾的權限信息) 2.chmod命令的語法 chmod [-R] 我們將要賦予用戶/用戶組/其他用戶的權限 要修改的文件/文件…

SpringBoot實現定時任務的動態停止和更新

目錄 定時任務管理器定時任務的任務接口定時任務和定時任務結果的緩存對象定時任務使用姿勢 定時任務管理器 負責啟動一個定時任務、停止一個定時任務、更新一個定時任務 /*** 定時任務管理器* 1、創建并啟動一個定時任務* 2、停止一個定時任務* 3、更新一個定時任務*/ publi…

Mybatis-plus學習|性能分析插件、條件構造器、代碼自動生成器

性能分析插件 我們在平時的開發中,會遇到一些慢sql。測試!druid…. MP也提供性能分析插件,如果超過這個時間就停止運行! 1、導入插件 該插件只允許在開發和測試環境中使用,故先設置開發環境為開發模式 在MP配置類中注冊這個插件&#xff0…

【Python機器學習】數據表示和特征工程的一些概念

對于由浮點數組成的二維數據,其中每一列是描述數據點的連續特征。 對于很多應用來說,數據的收集方式并不是這樣,一種特別常見的特征類型就是分類特征,也叫離散特征,這種特征通常不是說數值。 分類特征和連續特征之間…

Python:淺談迭代器、生成器與協程的演化路徑

“人生苦短,我用Python”,雖然說大量數學和統計分析庫是一個重要優勢,但是歸根結底,Python的最大優勢就是三點: 但是通常一般來講,當扯到并發的時候,無論是多服務器、多進程、多線程、還是協程&…

C# SocketUDP服務器,組播

SocketUDP 自己即是服務器又是客戶端 ,在發消息只需要改成對方ip和端口號即可 前提對方必須開啟服務器 socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.72"), 8080)); 控件:Button,TextBox,RichTextBox 打開自己服務器 public…

【操作系統】信號處理與阻塞函數|時序競態問題

🔥博客主頁: 我要成為C領域大神🎥系列專欄:【C核心編程】 【計算機網絡】 【Linux編程】 【操作系統】 ??感謝大家點贊👍收藏?評論?? 本博客致力于知識分享,與更多的人進行學習交流 ? 關于阻塞函數和…

Windows環境部署MySQL_8.4.0 LTS的部署安裝、驗證連接以及卸載全過程實操手冊

前言: 什么是 MySQL MySQL 是一個關系型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬于Oracle 公司。MySQL 是一種關系型數據庫管理系統,關系型數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內&am…

secureCRT中使用python腳本自動化測試vela設備

利用vela設備自帶的wapi命令行,重復執行聯網斷網的命令,測試系統穩定性。 實現如下, # $language "python" # $interface "1.0"# This automatically generated script may need to be # edited in order to work co…

8.12 矢量圖層面要素單一符號使用七(隨機標記填充)

文章目錄 前言隨機標記填充(Random Marker Fill)QGis設置面符號為隨機標記填充(Random Marker Fill)二次開發代碼實現隨機標記填充(Random Marker Fill) 總結 前言 本章介紹矢量圖層線要素單一符號中使用隨…

分班查詢怎么發布?

在現代教育環境中,傳統的學生分班通知方式可能顯得有些過時和低效。通常,這些方式依賴于紙質通知單,這不僅需要大量的物理資源進行打印和分發,而且容易出錯,如丟失、錯誤分發或延遲。 幸運的是,現在有了更高…

掌握Perl并發:線程與進程編程全攻略

掌握Perl并發:線程與進程編程全攻略 引言 Perl作為一種功能強大的編程語言,提供了豐富的并發編程手段。無論是通過threads模塊實現的線程,還是通過fork系統調用產生的進程,Perl都能幫助開發者高效地處理多任務。本文將深入探討如…