首页 > 编程语言 >《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本

《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本

时间:2024-04-29 12:22:43浏览次数:27  
标签:脚本 playwright Python 录制 40 codegen Playwright context page

https://www.cnblogs.com/du-hong/p/17835463.html

 

1.简介

各种自动化框架都会有脚本录制功能, playwright这么牛叉当然也不例外。很早之前的selenium、Jmeter工具,发展到每种浏览器都有对应的录制插件。今天我们就来看下微软自动化框架playwright是如何录制脚本的。很多小伙伴或者童鞋们会觉得奇怪,怎么现在才将录制生成脚本啊,要是早点讲解和分享,我还费什么劲,揪头发写代码啊。宏哥这里说一下:这么做的目的就是为了录制生成脚本打基础的。要不然开始直接上手就录制了,就算生成脚本你也不知道什么意思,更不用说脚本中有错误需要你调试修改脚本了。playwright 可以支持自动录制生成脚本,也就是说只需要在页面上点点点,就可以自动生成对应的脚本了。

2.启动脚本自动录制

1.在CMD命令行中,使用如下命令,打开自动录制功能:

playwright codegen

2.执行该命令后,程序会自动打开两个窗口,一个是浏览器窗口,您可以在其中与要测试的网站进行交互,另一个是 Playwright Inspector 窗口,您可以在其中记录测试、复制测试、清除测试以及更改测试语言。随着我们在浏览器窗口中进行手动操作,在Playwright Inspector界面中会自动生成手动操作对应的自动化代码。如下图所示:

3.在Playwright Inspector界面的Target选项中,可以切换编程语言:Python、Java、Node.js、.NET C#。如下图所示:

4.在浏览器界面中,当把鼠标放置在某个区域上,会自动提示出定位该位置的选择器代码,使用起来非常方便。如下图所示:

3.关闭脚本自动录制

3.1方法一

录制完成后,手动关掉浏览器即可。

3.2方法二

在CMD命令行中,使用快捷键Ctrl+C,然后输入Y,关闭自动录制功能,如下图所示:

4.自动保存录制脚本到本地文件

如果直接使用“playwright codegen”命令启动脚本录制,虽然在录制的过程中会自动生成脚本,但关掉浏览器后,生成的脚本也被自动关掉了。这样就再也找不回来了,白白辛苦半天。

如果想将生成的脚本自动保存在文件中,可以使用如下命令启动脚本录制:

playwright codegen -o 本地文件名

使用“-o”命令指定一个本地文件,在脚本录制完成后,自动生成的脚本会保存在该文件中。

5.启动浏览器时,自动打开指定页面

如果未指定访问的页面时,录制命令自动打开一个空白页面。但我们可以使用如下命令,让浏览器在启动后,自动打开一个指定页面。

playwright codegen 指定打开的网址 -o script.py

保存到本地的文件:

6.项目实战

6.1同步生成脚本

宏哥这里以百度搜索“北京-宏哥”为例。一个完整的搜索流程代码生成如下:

参开代码:

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("https://www.baidu.com/")
    page.locator("#kw").click()
    page.locator("#kw").fill("北京-宏哥")
    page.get_by_role("button", name="百度一下").click()

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


with sync_playwright() as playwright:
    run(playwright)

6.2异步生成脚本

1.启动自动录制脚本。

2.在Target切换到异步,如下图所示:

3.开始录制:一个完整的搜索流程代码生成如下:

参开代码:

import asyncio

from playwright.async_api import Playwright, async_playwright, expect


async def run(playwright: Playwright) -> None:
    browser = await playwright.chromium.launch(headless=False)
    context = await browser.new_context()
    page = await context.new_page()
    await page.goto("https://www.baidu.com/")
    await page.locator("#kw").click()
    await page.locator("#kw").fill("北京-宏哥")
    await page.get_by_role("button", name="百度一下").click()

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


async def main() -> None:
    async with async_playwright() as playwright:
        await run(playwright)


asyncio.run(main())

6.3pytest框架生成脚本

如果你是写自动化测试用例,还能自动生成 pytest 框架的代码,太牛叉了。。。

1.启动自动录制脚本。

2.在Target切换到Pytest,如下图所示:

3.开始录制:一个完整的搜索流程代码生成如下:

 参开代码:

from playwright.sync_api import Page, expect


def test_example(page: Page) -> None:
    page.goto("https://www.baidu.com/")
    page.locator("#kw").click()
    page.locator("#kw").fill("北京-宏哥")
    page.get_by_role("button", name="百度一下").click()

 7.扩展

7.1录制相关命令操作

playwright还有很多录制的命令操作,有兴趣的可以自己试一下。相关命令参数如下:

1.codegen在浏览器中运行并执行操作

playwright codegen playwright.dev

2.Playwright 打开一个浏览器窗口,其视口设置为特定的宽度和高度,并且没有响应,因为需要在相同条件下运行测试。
使用该--viewport选项生成具有不同视口大小的测试。

playwright codegen --viewport-size=800,600 playwright.dev

3.--device 使用设置视口大小和用户代理等选项模拟移动设备时记录脚本和测试。
模拟移动设备iPhone11,注意:device的值必须用双引号,并且区分大小写

playwright codegen --device="iPhone 11" playwright.dev 

4.模拟配色

playwright codegen --color-scheme=dark playwright.dev

5.模拟地理位置、语言和时区

playwright codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" maps.google.com

6.保留经过身份验证的状态
运行codegen以在会话结束时--save-storage保存cookie和localStorage 。这对于单独记录身份验证步骤并在稍后的测试中重用它很有用。

执行身份验证并关闭浏览器后,auth.json将包含存储状态。

playwright codegen --save-storage=auth.json

运行--load-storage以消耗先前加载的存储。这样,所有的cookie和localStorage都将被恢复,使大多数网络应用程序进入身份验证状态。

playwright open --load-storage=auth.json my.web.app
playwright codegen --load-storage=auth.json my.web.app
# Perform actions in authenticated state.

7.2page.pause() 断点调试

如果您想在某些非标准设置中使用 codegen(例如,使用browser_context.route()),可以调用page.pause(),这将打开一个带有 codegen 控件的单独窗口。这个相比大家在宏哥之前注释的代码里看到过,主要是用来调试代码的。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # Make sure to run headed.
    browser = p.chromium.launch(headless=False)

    # Setup context however you like.
    context = browser.new_context() # Pass any options
    context.route('**/*', lambda route: route.continue_())

    # Pause the page, and start recording manually.
    page = context.new_page()
    page.pause()

8.小结

今天这一篇主要讲解和分享了录制的启动、关闭和完整录制流程以及其他命令的录制。 好了,时间不早了,关于playwright的录制先介绍讲解到这里,感谢您耐心的阅读!!!

标签:脚本,playwright,Python,录制,40,codegen,Playwright,context,page
From: https://www.cnblogs.com/chinasoft/p/18165400

相关文章

  • LED摩托车灯ic降压恒流芯片电动车灯AP2402 半亮/全亮/爆闪
    玩具手电筒LED驱动降压恒流ICAP2402带爆闪教全亮/半亮/爆闪产品描述AP2402是一款PWM工作模式,高效率、外围简单、内置功率管,适用于5-100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达15W,最大电流1.5A。AP2402可实现三段功能切换,通过MODE1/2/3切换三种功能......
  • python3的数据结构
    一.列表(列表可以修改,字符串和元组不能)list.append(x)-把一个元素添加到列表的结尾-相当于a[len(a):]=[x]list.extend(L)-通过添加指定列表的所有元素来扩充列表-相当于a[len(a):]=Llist.insert(i,x)-在指定位置插入一个元素-a.insert(0,x)会插入到整个列表之前-a.i......
  • 带爆闪车灯手电筒芯片AP2400 多功能LED降压型恒流芯片
    AP2400是一款PWM工作模式,高效率、外围简单、外驱功率管,适用于输入的高精度降压LED恒流驱动芯片。外驱MOS,最大输出电流可达6A。AP2400可实现三段功能切换,通过MODE1/2/3切换三种功能模式:全亮,半亮,爆闪AP2400工作频率固定在150KHZ左右,同时内置抖频电路,可以降低对其......
  • python读取xml中的字段值
    importxml.etree.ElementTreeasETxml_string='''<?xmlversion="1.0"encoding="utf-8"?><rssxmlns:atom="http://www.w3.org/2005/Atom"xmlns:media="http://search.yahoo.com/mrss/"......
  • Python生成GIF动图
    菜鸟程序员带你揭秘python世界GIF动图看起来是不是特别好看,其实制作的方法有很多,但今天,我们来用python编程来自己动手生成GIF动图1、首先我们准备几张清晰的图片2、打开我们的编程工具,这里我使用的是pycharm,任意的python编辑器都可以,打开后,我们创建images目录,将我们准备好的图......
  • 如何用python运用ocr技术来识别文字
    要先安装ocr技术,也就是光学符号识别,通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其他印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的文本的技术(我在百度百科抄的),市面上大多数的文本识别,都基本是ocr技术。那用python怎么搞呢?1、安装环境我们......
  • win11迁移linux fedora 40 准备
    前期准备备份重要文件用wiztree+天翼云盘磁盘格式linux对ntfs支持不好,微软没开源只读肯定可以,写就会有bug,于是需要把2块硬盘的数据全部转成ext4拯救者linux驱动https://github.com/johnfanv2/LenovoLegionLinuxlinux虚拟机独显直通https://www.youtube.com/watch?v=g......
  • 揭秘Python中的JSON数据格式与Requests模块
    From: https://mp.weixin.qq.com/s/QgGyn2efYtVKI65RwXoiEA------------------------------------------------------------------------------------importpytestimportjsonimportrequestsfromrequests.authimportHTTPBasicAuthfromrequests.adaptersimportHTTPA......
  • Python中lambda表达式的用法
    lambda表达式本身是一个非常基础的python函数语法,其基本功能跟使用def所定义的python函数是一样的,只是lambda表达式基本在一行以内就完整的表达了整个函数的运算逻辑。这里我们简单展示一些lambda表达式的使用示例,以供参考。二元求和首先我们尝试一个最简单的二元求和的ipython......
  • python使用迭代生成器yield减少内存占用的方法
    在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中。其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会用到本文所介绍的迭代生成器yield。1.基本使用首先我们用一个例子来演示一下迭代生成器yi......