<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這是一篇羅裡吧嗦的前言,可能更多的屬於個人的感慨以及吐槽。
首先打個廣告:你每天點點點累麼?面對越來越卷的環境你彷徨麼?被要求 2 天做一個系統全面迴歸測試的你感到孤單無助麼?你在加班的深夜會以淚洗面麼?如果你或者你的測試朋友有上述症狀,那麼不要害怕,playwright 解救不開心,寫 UI 自動化再也不用 F12+ 複製 XPATH 然後 1 天后又在改了。
確實很久沒弄過 UI 自動化了,本身 Xpath 確實寫的也不是太好。外加之前弄過兩次 UI 自動化均因為後期維護成本降不下來放棄掉了所以最近聽到 UI 就直接擺爛了,一直在折騰介面這條路上躺平,但是機緣巧合前 2 個月我們招 WEB 開發我無意間發現現在 WEB 開發工程師居然在寫 UI 自動化。。。。。 好卷啊懷著一顆好奇的心我搜了下這個叫 playwrigh 的框架~~~ 擺弄了 2 個月感覺還是有點意思 而且應該屬於微軟的 vscode 那類而不是 windows 或者 IE 這類。
就直接把自己 pytest 的一個新增的 case 脫敏後拿出來看下吧
def test_add(page): try: page.goto("https://xxxxxxx:1111/index") page.locator("'一級選單'").click() page.locator("'二級選單'").click() page.locator("'三級選單'").click() page.wait_for_timeout(5000) page.locator("button:has-text('新增')").click() page.locator("textarea:right-of(:text('XXXX'))").fill('模板123') with page.expect_file_chooser() as fc_info: page.locator("text=click to upload").click() file_chooser = fc_info.value file_chooser.set_files("upload/upload1.xls") page.fill("input:right-of(:text('日期'))",'2004-09-26') page.locator("'日期'").click() page.fill("input:right-of(:text('時間'))",'01:21:56') page.press("input:right-of(:text('時間'))",'Enter') page.locator("button:has-text('確認')").click() page.wait_for_load_state('networkidle') assert assert_api('add') == True page.screenshot(path='temp_data\screenshot\res.png', full_page=True) allure.attach.file('temp_data\screenshot\res.png', 'temp_data\screenshot\res.png', attachment_type=allure.attachment_type.PNG) except: page.screenshot(path='temp_data\screenshot\res_fail.png', full_page=True) allure.attach.file('temp_data\screenshot\res_fail.png', 'temp_data\screenshot\res_fail.png', attachment_type=allure.attachment_type.PNG) raise
首先最大的區別就是原來真的可以不用 Xpath 完成 UI 自動化的編寫 哈哈哈 真的對一長串又難維護又讀不懂的 xpath 深惡痛絕啊。直接肉眼可見的 text 定位簡直太開心。
其次其實最終讓我決定用這個框架的主要就是一個功能,頁面佈局定位 比如我們先看對比下圖和這句程式碼看一下 page.locator("input:right-of(:text('XXXX'))").fill('模板 123')
經過我產品經理級別精心的繪畫不難看出,這是一個管理系統很常見的 dialog 彈窗,它存在若干個輸入框以及一個下拉框以及確認、取消按鈕。
我們做 UI 自動化的時候很常見的操作就是要去 XXXX 右邊的輸入框中輸入內容,或者在 ZZZZ 這個下拉框中選擇。如果是 selenium 那麼還是有點囉嗦,但是 playwright 自身有的佈局定位器(根據某個元素定位/操作他上下左右的元素)這個事情就很簡單了。 page.locator("input:right-of(:text('XXXX'))").fill('模板 123') 對文字 XXXX 右側的輸入框輸入模板 123。搞定!從此不管是這個 XXXX 的順序調整了還是什麼
別的變了只要
1、XXXX 這個文字沒有變化
2、input 輸入框在 XXXX 的右邊
這句程式碼就無須維護。
再次 隨著現在功能要求的變化,元素也都在變 比如現在很少能看到簡單純粹的 select 和 upload 了,新框架這部分支援會更好比如程式碼段裡的檔案上傳部分程式碼
with page.expect_file_chooser() as fc_info: page.locator("text=click to upload").click() file_chooser = fc_info.value file_chooser.set_files("upload/upload1.xls")
簡單的搞定了 el-upload 型別的檔案上傳控制元件。
也囉嗦了這麼多,有興趣的同學可以繼續~~ 看到這還是覺得 就這? 的同學也可以 X 了~
參考資料
官網: https://playwright.dev/python/docs/intro
GITHUB:https://github.com/microsoft/playwright-python
因為我最熟悉的語言是 python,所以就只講 python 的了
#升級pip pip install --upgrade pip #安裝playwright模組 pip install playwright #安裝主流瀏覽器依賴,時間可能較久 playwright install
同步 demo
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("http://playwright.dev") print(page.title()) browser.close()
非同步 demo
import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as p: browser = await p.chromium.launch() page = await browser.new_page() await page.goto("http://playwright.dev") print(await page.title()) await browser.close() asyncio.run(main())
好了,完結 撒花本篇完結,下篇開始具體細節開始展開說說如果等不及的小夥伴建議直接看官網咖,這個框架的資料確實少。雖然官網只有英文,但是網易有道詞典 yyds,更多關於python playwrigh框架的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45