目录
安装和脚本录制
安装在python目录下,命令:pip install playwright;
安装Chromium、Firefox、WebKit等浏览器的驱动文件,命令:python -m playwright install;
开始录制命令: python -m playwright codegen --target python -o my.py -b chromium https://***.com
元素获取
# 单个元素取值
page.locator("div:nth-child(1) > .svg-icon").click()
# 多元素满足取第一个
page.locator("div:nth-child(1) > .svg-icon").first.click()
# 上传
page.locator(".upload input").set_input_files(file)
# 获取元素对应内容信息
info = page.locator('.detail-header')
test_info = info.text_content()
# 获取不到元素,通过等待确认
page.wait_for_selector('button:has-text("按钮")', state='visible')
page.wait_for_selector('button:has-text("按钮")', state='hidden')
page.wait_for_selector('button:has-text("按钮")', state='visible', timeout=30000)
元素操作
# .type(value):用于模拟键盘输入,逐字符地输入指定的值。
page.locator("selector").type("1")
# .fill(value):用于清空输入框并填入新的值。
page.locator("selector").fill("1")
# .clear():清空输入框的内容。
page.locator("selector").clear()
# .press(key):可以模拟按键操作,例如按下 Enter 键。
page.locator("selector").press("Enter")
# .click():点击输入框,通常用于将焦点放在输入框上。
page.locator("selector").click()
# .focus():将焦点设置到输入框上。
page.locator("selector").focus()
断言
# 检查元素是否可见
expect(page.locator("button#submit")).to_be_visible()
# 检查元素是否包含特定文本
expect(page.locator("h1")).to_contain_text("欢迎")
# 检查元素的状态
expect(page.locator("button#submit")).to_be_enabled() # 检查按钮是否可用
# 检查元素的数量
expect(page.locator("ul > li")).to_have_count(3) # 检查列表项数量
# 检查元素是否被隐藏
expect(page.locator("div#loading")).to_be_hidden()
总结
- 优点
- 几乎是零代码模式,操作过程中即可生成代码,提效便捷
- 支持跨浏览器和跨平台,兼容性强
- 有自动等待功能,不需要人工等待
- 缺点
- 如果前端组件动态或者定义不明确,会导致自动生成的代码执行失败(需要协助调整组件,增加ID可以很好的解决)
- 很多情况下,元素操作是直接写出按钮或文本信息,中英文就不适用(但是UI一种应该也基本不存子问题吧~~)
- 踩坑
- 脚本调试结束后,Linux服务器执行时,需要调整为无头模式
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=True) # 启动无头模式
- 正常模式下录制的登录,Linux服务器执行时,总是卡在登录页(解决方法:确认登录后cookie等储存结构,将信息存储)
- 脚本调试结束后,Linux服务器执行时,需要调整为无头模式
官方地址(引用):Installation | Playwright Python