UI自动化测试神器Playwright(Java版)(保存登录cookie,解决免登录)

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

🔐无论你选择哪种身份认证策略,都可能需要在文件系统上存储已验证的浏览器状态,比如Cookie🍪。就像我们平时会将喜爱的小零食收藏在保险箱里一样,登录后我们也可以将Cookie存储起来,以备不时之需。这样一来,我们就可以避免在每个测试用例中都进行身份验证的繁琐过程,而是可以轻松地重用已经验证的状态。这不仅方便,还可以提高测试的执行效率哦!🚀

建议创建playwright/.auth目录并将其添加到.gitignore。你的日常身份验证将生成经过身份验证的浏览器状态,并将其保存到该playwright/.auth 目录中的文件中。后续,测试将重用此状态并启动已通过身份验证。

图片

下面的示例登录到GitHub。一旦执行了这些步骤,浏览器上下文将被认证。

图片

对每个测试重新进行登录可能会降低测试执行速度。要避免这种情况,请重新使用现有的身份验证状态。

Playwright提供了一种在测试中重用登录状态的方法。这样,你只需要登录一次,然后就可以跳过所有测试脚本依赖登录的步骤。

Web应用程序使用基于Cookie或基于令牌的身份验证,其中身份验证状态存储为Cookie或存储在本地存储中。Playwright提供了browserContext.storageState([options])方法,该方法可用于从经过身份验证的上下文检索存储状态,然后创建具有预填充状态的新上下文。

Cookie和本地存储状态可以在不同的浏览器中使用。它们取决于应用程序的身份验证模型:某些应用程序可能需要Cookie和本地存储。

下面的代码从经过身份验证的上下文中检索状态,并使用该状态创建一个新上下文。

图片

也就是通过登录获取Cookie,保存在指定路径,这样在其它地方需要登录时,就可以使用本地的cookie,实现免登录了。

图片

重用已验证状态涵盖了cookie和基于本地存储的验证。会话存储很少用于存储与登录状态相关联的信息。会话存储特定于特定的域,并且不会跨页加载持久化。Playwright没有提供持久化会话存储的API,但是可以使用下面的代码片段来保存/加载会话存储。

图片

通过以上方式,可以方便地实现免登录的效果,从而提高自动化测试的效率和准确性。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Python Playwright 对 CSDN 登录进行 UI 自动化分层设计的完善示例: 1. 安装 Playwright 首先需要安装 Playwright Python 库,可以使用以下命令进行安装: ```python pip install playwright ``` 2. 创建项目目录结构 在本地创建一个项目目录,例如 "CSDN_Automation",并在该目录下创建以下文件和文件夹: - `main.py`:主程序文件 - `pages` 文件夹:存放页面对象类文件 - `tests` 文件夹:存放测试用例文件 3. 创建页面对象类 在 `pages` 文件夹下创建一个 `CSDNLoginPage.py` 文件,该文件定义了 CSDN 登录页面的所有元素和操作: ```python from playwright.sync_api import Page class CSDNLoginPage: def __init__(self, page: Page): self.page = page def navigate(self): self.page.goto("https://passport.csdn.net/login") def input_username(self, username: str): self.page.fill("[name='username']", username) def input_password(self, password: str): self.page.fill("[name='password']", password) def click_login_button(self): self.page.click("[data-type='account']") def login(self, username: str, password: str): self.navigate() self.input_username(username) self.input_password(password) self.click_login_button() ``` 在该页面对象类中,我们定义了 CSDN 登录页面的所有元素和操作,包括页面导航、输入用户名和密码、点击登录按钮等。通过这样的封装,我们可以在测试用例中直接调用 `login` 方法来完成登录操作。 4. 创建测试用例 在 `tests` 文件夹下创建一个 `test_login.py` 文件,该文件定义了 CSDN 登录的测试用例: ```python import pytest from playwright.sync_api import Playwright, Page from pages.CSDNLoginPage import CSDNLoginPage @pytest.fixture(scope="module") def csdn_login_page(playwright: Playwright) -> Page: with playwright.chromium.launch(headless=False) as browser: with browser.new_context() as context: page = context.new_page() csdn_login_page = CSDNLoginPage(page) yield csdn_login_page def test_login_success(csdn_login_page: CSDNLoginPage): csdn_login_page.login("your username", "your password") assert "CSDN" in csdn_login_page.page.title() ``` 在该测试用例中,我们首先使用 `pytest.fixture` 装饰器定义了一个 `csdn_login_page` 的 fixture,用于创建 `CSDNLoginPage` 实例并返回该实例中的 `page` 对象。在 `test_login_success` 测试用例中,我们调用 `csdn_login_page` 实例的 `login` 方法来完成登录操作,并通过断言验证登录成功后页面标题中是否包含 "CSDN"。 5. 运行测试 最后,在项目目录下运行以下命令来执行测试: ```python python -m pytest ``` 这样就完成了基于 Python Playwright 的 CSDN 登录 UI 自动化分层设计的示例。在实际应用中,我们可以根据需要增加更多的页面对象类和测试用例,从而实现更全面的 UI 自动化测试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值