首页 > 其他分享 >自动化神器 Playwright 的 Web 自动化测试解决方案

自动化神器 Playwright 的 Web 自动化测试解决方案

时间:2023-06-26 16:38:25浏览次数:51  
标签:Web Playwright get 元素 playwright 自动化 placeholder page

1. 主流框架的认识

 总结:

  • 由于Selenium在3.x和4.x两个版本的迭代中并没有发生多大的变化,因此Selenium一统天下的地位可能因新框架的出现而变得不那么稳固。
  • 后续的Cypress、TestCafe、Puppeteer被誉为后Selenium时代Web UI自动化的三驾马车。但是由于这三个框架都是基于JavaScript开发的,且都不支持Python,所以使用率并没有很高。
  • playwright则是综合了上述框架的优点,提供了很好的体验,将来可能成为流行的趋势。

2. Playwright认识

  • Playwright简介

    • 2020年,微软(Microsoft)开源了一个名为Playwright的工具,与Selenium一样入门简单,支持多语言(Python、Java、Node.js、.NET),支持多浏览器(Chromium、Firefox、Webkit),可跨平台(Windwos、Linux、Mac OS)
    • Playwright同时支持接口自动化和UI自动化,为现代web应用提供了可靠的端到端的测试能力。
  • Playwright优势

    • 1)自动等待功能让自动化更可靠
    • 2)自动追踪:可以很方便地配置重试策略,自动的追踪结果,以截图和录屏的方式进行记录。
    • 3)断言机制:会根据网络环境进行自动断言,直到满足某种条件为止。
    • 4)异步执行:Playwright基于socket进行双向通讯,支持同步与异步执行两种方式
    • 5)可运行多页仿真场景:Playwright是通过上下文管理浏览器,相当于每一个测试用例都会创建一个独立的上下文,浏览器的上下文其实就是一个全新的浏览器,这种方式的好处就是在提速的同时又实现测试与测试之间的隔离,使得测试结果更加准确,所以可以实现并行执行。
    • 6)强大的工具集:还我们提供了强大的工具集,例如:脚本录制工具codegen、脚本编写以及调试工具playwright等

3. Playwright环境搭建

  

  • 安装内置浏览器(chromium,firefox,webkit):playwright install

  

 

4. Playwright入门实战

1)脚本录制

  • 案例1:实现Web ui自动化,打开浏览器,访问测试派(http://testingpai.com),点击登录后在进行登录操作(输入用户名、密码,点击登录按钮)
  • 操作步骤:
    • 第一步:pycharm--Terminal中输入命令:playwright codegen,会自动打开浏览器和Playwright Inspector工具,Playwright Inspector工具自动开启录制功能
    • 第二步:在打开的浏览器中进行相关的操作,如访问地址、点击或输入操作
    • 第三步:操作完成后,在Playwright Inspector中点击Record停止录制,然后复制代码即可
from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("http://testingpai.com/")
    page.get_by_text("登录").click()
    page.get_by_placeholder("用户名/邮箱/手机号").click()
    page.get_by_placeholder("用户名/邮箱/手机号").fill("kemi")
    page.get_by_placeholder("用户名/邮箱/手机号").press("Tab")
    page.get_by_placeholder("密码").fill("123456")
    page.pause()  # 断点调试功能
    page.get_by_role("button", name="登录").click()

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)

2)录制工具快速定位元素

  • 如果我自己写代码,需要定位元素,通过Playwright Inspector工具的Pick locator可以快速获取元素定位的信息,具体操作如下截图:

  

  • Playwright支持两大类元素定位方式,包括:
  • 1)get_by方式
    • get_by_id: 通过元素的 id 属性来查找元素,例如:element = page.get_by_id("my-id")
    • get_by_name: 通过元素的 name 属性来查找元素,例如:element = page.get_by_name("my-name")
    • get_by_text: 通过元素的文本内容来查找元素,例如:element = page.get_by_text("Submit")
    • get_by_title: 通过元素的 title 属性来查找元素,例如:element = page.get_by_title("my-title")
    • get_by_placeholder: 通过元素的 placeholder 属性来查找元素,例如:element = page.get_by_placeholder("my-placeholder")
    • get_by_selector: 通过 CSS 选择器来查找元素,例如:element = page.get_by_selector("#submit-button")
    • get_by_xpath: 通过 XPath 表达式来查找元素,例如:element = page.get_by_xpath("//div[@class='my-class']")
    • get_by_label: 根据label属性值查找元素,类似于HTML中的label标签和对应的for属性。
    • get_by_role: 通过角色方式定位元素,例如:element = page.get_by_role("button", name="Submit")
  • 2)page.locator方式
    • 通过ID定位元素:使用page.locator("#element-id")page.locator('id=element-id')定位。
    • 通过CSS选择器定位元素:使用page.locator("css=selector")定位。例如:element = page.locator("button#submit-button")
    • 通过XPath表达式定位元素:使用page.locator("xpath=expression")定位。例如:element = page.locator("//button[@id='submit-button']")
    • 通过名称定位元素:使用page.locator("name=element-name")定位。
    • 通过链接文本定位元素:使用page.locator("text=link-text")定位。
    • 通过部分链接文本定位元素:使用page.locator("partial_text=partial-link-text")定位。
    • 通过元素属性定位元素:使用page.locator("[attribute=value]")定位。
    • 通过标签名定位元素:使用page.locator("tag=tag-name")定位。

4. Pytest+Allure+Playwright完整项目演示

1)脚本转为测试用例

  • 案例需求:将上面测试派(http://testingpai.com)的登录操作转为测试用例
  • 操作步骤:
    • 第一步:pycharm--Terminal中输入命令:playwright codegen,会自动打开浏览器和Playwright Inspector工具,Playwright Inspector工具自动开启录制功能
    • 第二步:在打开的浏览器中进行相关的操作,如访问地址、点击或输入操作
    • 第三步:操作完成后,在Playwright Inspector中点击Record停止录制
    • 第四步:在Target中选择Python下的pytest,就会自动化将录制的代码转为测试用例,然后复制代码即可。具体操作如下截图所示:

  

  • 代码如下:
from playwright.sync_api import Page, expect

def test_example(page: Page) -> None:
    page.goto("http://testingpai.com/")
    page.get_by_text("登录").click()
    page.get_by_placeholder("用户名/邮箱/手机号").click()
    page.get_by_placeholder("用户名/邮箱/手机号").fill("kemi")
    page.get_by_placeholder("用户名/邮箱/手机号").press("Tab")
    page.get_by_placeholder("密码").fill("123456")
    page.get_by_role("button", name="登录").click()
  • 执行用例前必须先安装插件,否则会报错,因为用例只有核心的业务操作,没有浏览器、上下文、页面的初始化,装了插件后会自动做这些初始化的操作,从而执行用例不会报错。命令:pip install pytest-playwright  

  

 

2)数据驱动

  • 集合pytest的parametrize实现数据驱动
import pytest
from playwright.sync_api import Page, expect

# 测试用例数据
case_data = [{'caseid':1,'username':'kemi123', 'password':'kemi123'},
             {'caseid':2,'username':'zhangsan', 'password':'123456'},
             {'caseid':3,'username':'lisi', 'password':'123456'}]

# 数据驱动
@pytest.mark.parametrize('case', case_data)
def test_example(page: Page,case) -> None:
    username = case['username']
    password = case['password']

    page.goto("http://testingpai.com/")
    page.get_by_text("登录").click()
    page.get_by_placeholder("用户名/邮箱/手机号").click()
    page.get_by_placeholder("用户名/邮箱/手机号").fill(username)
    page.get_by_placeholder("用户名/邮箱/手机号").press("Tab")
    page.get_by_placeholder("密码").fill(password)
    page.get_by_role("button", name="登录").click()
    page.screenshot(path=f"images/login/登录{case['caseid']}.png")  # 截图保存到指定位置

3)报告显示

  • 通过pytest执行用例后,通过命令生成报告:allure serve outputs/allure,查看报告显示,截图如下:

     




标签:Web,Playwright,get,元素,playwright,自动化,placeholder,page
From: https://www.cnblogs.com/xiaoxiao-wu/p/17506030.html

相关文章

  • 深度解析SpringBoot内嵌Web容器
    你好,我是刘牌!前言今天分享一个SpringBoot的内嵌Web容器,在SpringBoot还没有出现时,我们使用Java开发了Web项目,需要将其部署到Tomcat下面,需要配置很多xml文件,SpringBoot出现后,就从繁琐的xml文件中解脱出来了,SpringBoot将Web容器进行了内嵌,我们只需要将项目打成一个jar包,就可以运行......
  • PlayWright(十)
     在web自动化测试中,经常会有登录的情况,并且每次打开页面都需要登录,非常麻烦,我们使用playwright的cookie实现自动化登录 1、使用秘籍①  登录网站,正常输入账号密码登录②  保存cookie信息③  使用之前cookie信息再次登录网站  2、小试牛刀我们以登录一个测试......
  • 如何提高Web应用程序安全
    Web应用程序安全是指为保护Web应用程序免受潜在攻击而采取的措施。包括保护Web应用程序免受可能损害其功能、安全性和数据完整性的外部威胁的策略和流程。有效的Web应用程序安全策略包括识别潜在漏洞、评估其相关风险以及实施防攻击的措施。Web应用程序中的常见漏洞攻击者经......
  • HTML5 WebUploader 分块上传
    ​ 设计由来在实际的项目开发中常遇到超大附件上传的情况,有时候客户会上传GB大小的文件,如果按照普通的MultipartFile方式来接收上传的文件,那么无疑会把服务器给干崩溃,更别说并发操作了。于是笔者决定要写一个超大附件上传的方法,于是有此。功能实现图​编辑  功能介......
  • python版本的playwright如何使用代理
      fromplaywright.sync_apiimportPlaywright,sync_playwrightwithsync_playwright()asplaywright:browser=playwright.chromium.launch()proxy_server='http://my-proxy-server.com:8080'context=browser.new_context(proxy={......
  • python版本的 playwright , 如何拦截请求,替换响应内容
         fromplaywright.sync_apiimportPlaywright,sync_playwrightdefrequest_interceptor(route,request):logger.info(request.url)if'api.js'inrequest.url:#替换响应内容route.fulfill(status=200,......
  • redis安装-备份-恢复 -- redislive -- web管理工具
    1.安装参考:https://www.jb51.net/article/146744.htm2.安装ruby2.3.31.gpg2--keyserverhkp://keys.gnupg.net--recv-keysD39DC0E32.curl-Lget.rvm.io|bash-sstable3.rvm生效source/usr/local/rvm/scripts/rvm4.安装一个版本rvminstall2.3.35.设置默认rubyrvmu......
  • 如何克服自动化测试中的壁垒和问题?
    随着自动化测试技术的快速发展和普及,自动化测试已经成为各个行业广泛应用的重要测试手段。然而,自动化测试中仍然存在壁垒和问题,这些问题可能对测试效果产生影响,甚至会影响整个项目的进程。在本文中,我们将探讨如何克服自动化测试中的壁垒和问题。1.技术壁垒自动化测试涉及复杂的技术......
  • 软件测试的自动化工具
    在软件开发过程中,测试是必不可少的一个环节。而在测试中,测试人员需要花费大量的时间和精力进行手动测试,这不仅费时费力,而且效率较低。因此,自动化测试工具的出现为测试人员提供了更加便捷高效的测试方法。本文将介绍几种常见的自动化测试工具,并分析其特点和优势。1.SeleniumSeleniu......
  • 学习websocket,原来这么简单
    简单介绍websocketWebSocket是一种在TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准。然后WebSocketAPI也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocketAPI中,浏览器和服......