playwright+python系列课程50_playwright_保存登录cookie解决反复登录问题

推荐阅读:自动化测试工具-Playwright(快速上手)

playwright_保存登录cookie解决反复登录问题

做测试执行脚本时都跳不过登录这个环节,但是如果每个脚本执行时都登录一次这会大大降低脚本执行效率。如果能在执行测试时只登录一次那么将大量节约脚本执行的时间。

Playwright在称为浏览器上下文的隔离环境中执行测试。该隔离模型提高了可重复性并防止相关联的测试脚本执行失败。测试可以加载现有的已验证状态,比如获取已登录的状态(Cookie),在后续脚本中复用。这消除了在每个测试中进行身份验证的需要,即每个测试用例都不需要重新登录,并加快了测试执行速度。

Playwrigh可以将登录状态比如Cookie存储到本地系统中,我们只需要在第一次登录后将Cookie存储起来,存储为本地文件。这样一来,我们就可以在执行测试用例时直接读取存储的文件,重用已经登录的状态,避免了身份验证的繁琐过程。这不仅方便,还可以提高测试的执行效率!

Playwrght可以将登录状态存储为json格式文件,登录后使用以下代码就可以保存登录状态;

storage = context.storage_state(path="state.json")

执行用例时,直接读取本地登录状态代码:

context = browser.new_context(storage_state="state.json")

保存登录状态到本地实践代码:

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''

from playwright.sync_api 
import Playwright, sync_playwright, expect

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False,slow_mo=2000)
    context = browser.new_context(record_video_dir="videos") #设置录屏保存目录
    page = context.new_page()

    # 登录系统
    page.goto("http://127.0.0.1/zentao/user-login.html") # 使用相对地址
    page.locator("#account").fill("admin")
    page.locator("input[name=\"password\"]").click()
    page.locator("input[name=\"password\"]").fill("Deshifuzhi01")
    page.locator('text="登录"').click()
    storage = context.storage_state(path="state.json") #保存登录状态

    page.wait_for_timeout(10000)
    # ---------------------
    context.close() # 上下文关闭时保存录屏
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

读取登录状态文件跳过登录环节实践代码:

# '''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''

from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False,slow_mo=2000)
    context = browser.new_context(storage_state="state.json") #使用本地保存的登录状态文件
    page = context.new_page()

    # 直接访问内页
    page.goto("http://127.0.0.1/zentao/my.html") # 没有登录过程直接登录主页

    page.wait_for_timeout(10000)
    # ---------------------
    context.close() # 上下文关闭时保存录屏
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

原文链接:https://blog.csdn.net/qq_35948955/article/details/135730934