PlayWright自动化测试4

1、定位一组元素

python 复制代码
h获取所有按钮
buttons = page.locator('button').all()
# 获取所有按钮的数量
  button_count = page.locator('button').count()

# 点击第二个按钮
    second_button = page.locator('button').nth(1)
    second_button.click()
使用 locator().evaluate_all(fn) 方法对所有元素执行函数
# 获取所有按钮的文本内容
    button_texts = page.locator('button').evaluate_all('nodes => nodes.map(node => node.textContent)')

evaluate_all允许你对所有匹配的元素执行一个 JavaScript 函数,并返回结果。这个函数 fn 在浏览器上下文中运行,因此它可以访问 DOM 元素。

2、设置cookies

复制代码
context.add_cookies(cookies_data)

cookie数据是一个数组,数组中每个元素是一个字典,字典的键是固定的

有name,value,domain,path等,如果不设置domain、path会报错

python 复制代码
page.set_cookie({'name': 'test', 'value': '123', 'domain': 'example.com'})
cookies = page.context.cookies()
print(cookies)


# 登录后保存storage state 到指定的文件
 storage = context.storage_state(path="auth/state.json")
其他页面使用storage,就不需要登录了
context = browser.new_context(storage_state="state.json")

eg:

python 复制代码
from playwright.sync_api import sync_playwright


def main():
    cookies_data = [
        {
            'name': '5',
            'value': 'CocIXmZhewK0/h11GYndAg==',
            'domain': '.5dns.org',
            'path': '/'
        }
    ]
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False, slow_mo=1000)
        context = browser.new_context()
        context.add_cookies(cookies_data)
        page = context.new_page()
        page.goto("http://example.app.com")
        page.wait_for_timeout(5000)

        for i in range(4):
            page.get_by_placeholder('请选择').nth(i).click()
            page.get_by_role("list").get_by_text("通过").click()


if __name__ == '__main__':
    main()

3、录制脚本

python 复制代码
playwright codegen 所要打开的网站

eg:

playwright codegen  https://www.baidu.com

以iphone11模式打开百度

playwright codegen --device="iPhone 11" https://www.baidu.com

执行身份验证并关闭浏览器后,auth.json将包含存储状态
playwright codegen --save-storage=auth.json

在进行录制时,携带存储的cookie等上边操作后保存的信息

playwright open --load-storage=auth.json my.web.app
playwright codegen --load-storage=auth.json my.web.app

终端执行上述命令后,打开两个窗口,一个浏览器,一个代码录制窗口,自己操作浏览器,右边就会生成对应的代码,还可切换成不同语言的,操作完成后,可以复制到代码编辑器,运行回放

python 复制代码
import re
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("theshy")
    page.get_by_role("button", name="百度一下").click()
    with page.expect_popup() as page1_info:
        page.get_by_label("标题:已确认TheShy与Rookie重回IG").click()
    page1 = page1_info.value

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

if __name__ == '__main__':

    with sync_playwright() as playwright:
        run(playwright)

如果自己定位不到的元素,可以使用录制方式,定位试试

打开手机百度

4、截图

python 复制代码
page.screenshot(path="screenshot.png")

截全屏
page.screenshot(path="screenshot.png", full_page=True)

图片数据流获取

screenshot_bytes = page.screenshot()
print(base64.b64encode(screenshot_bytes).decode())

截取单个元素图片

page.locator(".header").screenshot(path="screenshot.png")

5、执行过程录屏

python 复制代码
context = browser.new_context(record_video_dir="videos/")

# 确保调用 close,  videos视频才会保存
context.close()


context = browser.new_context(
    record_video_dir="videos/",
    record_video_size={"width": 640, "height": 480}
)

打印视频路径
path = page.video.path()

视频格式.webm,可使用浏览器打开

相关推荐
聆风吟º2 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~2 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
极客小云2 小时前
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
网络·python·自动化·comfyui
不会代码的小测试4 小时前
UI自动化-POM封装
开发语言·python·selenium·自动化
兜兜转转了多少年5 小时前
从脚本到系统:2026 年 AI 代理驱动的 Shell 自动化
运维·人工智能·自动化
L543414468 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
码农阿豪8 小时前
多服务器批量指令管理:从Xshell到自动化运维
运维·服务器·自动化
2501_941982059 小时前
别再手动发群消息了!企业微信外部群自动化推送的架构设计与实现
运维·自动化·企业微信
Wpa.wk9 小时前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化
0思必得010 小时前
[Web自动化] Selenium获取元素的子元素
前端·爬虫·selenium·自动化·web自动化