playwright簡介
不愧是宇宙最強,它也是目前為止對selenium封裝得最好的一個庫,還有對應的異步機制,其他見百度不便在此詳敘。
本篇經典案例是對我司的veer產品做ui自動化的案例,可供參考 不謝~
相關代碼已整理至gitee,https://gitee.com/teark/playest.git,大家自行git clone即可。
安裝與啟動
# 安裝 playwright-python 依賴庫 pip install playwright # 安裝瀏覽器驅動 python -m playwright install # 錄制腳本 python -m playwright codegen
其實我們用的只是錄制腳本里的定位語句,其他的需要自己改寫。如下:
page層
class IndexPage: # 頁面元素 url = "https://preview-www.veer.com/" popup = "i" search_box = "[placeholder=\"搜索照片、插畫和矢量圖,多個詞用空格隔開\"]" value = "hello world" submit = "[class='search_bar_submit']" real_flag = "[class='count_label']" fail_flag = "共 0 個結果"
page層最小粒度控制,便於管理元素。
testcase層
具有以下特性(自行體會):
結合非GUI模式以方便CI/CD
結合PO模式以方便單獨管理元素
結合pytest.mark.paramtrize實現參數化
結合pytest.fixture實現預處理
結合了日志記錄 + 結果斷言
import time from playwright.sync_api import Page from po.index_page import IndexPage as pg import pytest from common.log import logger @pytest.fixture(scope="function") def preview(page): page.goto(pg.url) page.click(pg.popup) yield page page.close() @pytest.mark.parametrize("word", ["hello world", "星空"]) def test_search(preview: Page, word): page = preview page.fill(pg.search_box, word) page.click(pg.submit) time.sleep(1) with page.expect_navigation(): flag = page.text_content(pg.real_flag) logger().info(flag) assert flag != pg.fail_flag