前言

Playwright 提供了一种在测试中保持登录状态的方法,只登录一次,就可以跳过所有测试的登录步骤

一、首次登陆

登陆成功后,保存状态文件,后面的用例直接读取这个文件的状态保持登陆即可。

import ddddocr
from playwright.async_api import Playwright
from playwright.sync_api import sync_playwright

def run(playwright: Playwright):
    # 启动 chromium 浏览器
    browser = p.chromium.launch(headless=False,slow_mo=1000)
    context = browser.new_context()
    # 打开一个标签页
    page = context.new_page()
    # 打开百度
    page.goto("http://192.168.64.209:8008/#/login")
    # 打印当前页面title
    print(page.title())
    page.locator(".s-canvas").screenshot(path="example.png")
    page.get_by_placeholder("账号").fill("admin")
    page.get_by_placeholder("密码").fill("Admin@123")
    ocr = ddddocr.DdddOcr()
    with open('example.png', 'rb') as f:
        img_bytes = f.read()
    result = ocr.classification(img_bytes)
    print(result)
    page.get_by_placeholder("验证码").fill(result)
    page.get_by_role("button", name="登录").click()
    page.screenshot(path="example2.png")
    page.set_default_timeout(10000)
    # 保存状态文件
    storage = context.storage_state(path="../auth/state.json")
    context.close()
    #关闭浏览器
    browser.close()

with sync_playwright() as p:
    run(p)`

二、保持登陆状态使用

使用**browser.new_context(storage_state=“…/auth/state.json”)**去加载保存在本地的cookies

from playwright.sync_api import Playwright, sync_playwrig

def run(playwright: Playwright):
    browser = playwright.chromium.launch(headless=False)
    # 加载本地cookies,免登陆
    context = browser.new_context(storage_state="../auth/state.json")
    # 打开页面继续操作
    page = context.new_page()
    page.goto('http://192.168.64.209:8008/')
    # 打断点看是否已经登录
    page.pause() 
    context.close()
    browser.close()
    

with sync_playwright() as p:
    run(p)

运行后结果:
在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐