保存storage_state信息
背景
使用playwright进行UI测试时,使用
context.storage_state()
保存若依CMS
登录后的cookie信息失败,输出结果为空始终无法获取登录状态信息,但是断点调试又存在storage信息,这就很疑惑。
核心原因
playwright登录
若依CMS
时,成功后会跳转到/index
页面。
但是playwright在确认登录成功后,就会关闭浏览器,而
若依CMS
会在跳转/index
页面时,设置cookie等信息。
也就造成了我们获取不到cookie信息的原因。因此在后续代码中添加等待事件。
page.wait_for_url()
输出storage信息
- print(storage),cookie结果为null,但是打断点输出storage时,又有数据。
{'cookies': [], 'origins': []}
代码
原始代码,无法获取storage登录状态信息
import json
from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("http://81.70.166.221:8080/login")
page.get_by_role("textbox", name="用户名").click()
page.get_by_role("textbox", name="用户名").fill("admin")
page.get_by_role("textbox", name="密码").click()
page.get_by_role("textbox", name="密码").fill("admin123")
page.get_by_role("button", name="登录").click()
# page.pause()
# 保存storage state 到指定的文件
storage = context.storage_state(path='../auth/ry_auto.json')
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
改进后,添加等待事件wait_for_url
import json
from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("http://81.70.166.221:8080/login")
page.get_by_role("textbox", name="用户名").click()
page.get_by_role("textbox", name="用户名").fill("admin")
page.get_by_role("textbox", name="密码").click()
page.get_by_role("textbox", name="密码").fill("admin123")
page.get_by_role("button", name="登录").click()
# 等待时间,等待页面跳转,作为登录成功的标准
page.wait_for_url(url='http://81.70.166.221:8080/index')
# 添加断点
# page.pause()
# 保存storage state 到指定的文件
storage = context.storage_state(path='../auth/ry_auto.json')
print(storage)
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)