网站首页 > 技术文章 正文
Playwright实战:拖拽(drag-and-drop)操作详解
之前拖拽,写过一篇Typescript版本的教程,本篇为Python版本。
拖拽也是测试中常见交互手段,本文分享了利用Python实现Playwright实现自动化拖拽,希望可以对你有所帮助。
一、引言
拖拽操作概述
拖拽 ( drag-and-drop
)是指用户按住渐进元素,将其移动到目标元素上时重新松开鼠标的操作,应用于文件上传、项目排序、UI配置连线等场景。
在 Web
自动化测试中,想要模拟用户拖拽操作,必须正确解析下列基本步骤:
拖拽操作基本原理
1. 解析 DOM 结构 :确定渐进元素和目标元素; 2. 突显操作行为 :鼠标移动到元素上,触发 hover
效果;3. 渐进拖拽 :执行 mouse.down
或dragTo
,移动到目标元素。4. 松开操作 :执行 mouse.up
,触发系列DOM
事件 (drop
,dragend
),依靠JS
解析处理逻辑。
Playwright
提供了高级 drag_to
方法,也支持低级的 mouse
按键和移动操作,适合不同项目处理需求。
二、Playwright 拖拽实现
方案1:drag_to()高级方法
from playwright.sync_api import sync_playwright
def test_drag_and_drop_dragto():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto()
source = page.locator("#small-box")
target = page.locator(".large-box")
source.drag_to(target)
assert "Success" in target.inner_text()
browser.close()
方案2:低级 mouse 操作
from playwright.sync_api import sync_playwright
def test_drag_and_drop_manual():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto()
page.locator("#small-box").hover()
page.mouse.down()
page.locator(".large-box").hover()
page.mouse.up()
assert "Success" in page.locator(".large-box").inner_text()
browser.close()
拖拽多个元素
sources = page.locator(".draggable-item")
target = page.locator("#drop-area")
for i in range(await sources.count()):
await sources.nth(i).drag_to(target)
环境配置
python -m venv venv
source venv/bin/activate
pip install playwright
playwright install
注: Playwright Python 版本 >= 1.34
三、结论
Q1: 拖拽操作失效?
可能是 DOM
元素未出现,可加 wait_for()
或观察动画进程的状态。
Q2: drag_to 和 mouse.move 有何区别? drag_to
是高级抽象,有耗时、入焦操作, mouse
是低级执行,适合非标准 HTML5 drag API
的场景。
Q3: 点击后元素不会执行 drag事件?
确认当前页面是否使用 JS
触发 dragstart
/ drop
,或者是 canvas
/自定义 UI
系统,此时需要添加中断点解析原因。
Playwright
在拖拽操作中提供了高级和低级操作方式,能够应对大部分标准化和非标准化拖拽场景。在清晰元素结构和 DOM
事件模型基础上,选择适合的操作方案才能保证自动化的稳定性。
猜你喜欢
- 2025-07-24 分享小伙伴私信推荐的5款小工具(聊天小工具)
- 2025-07-24 PyCharm接入deepseek,实现Python代码自由
- 2025-07-24 如何在Python中按值对字典进行排序?
- 2025-07-24 Python排序90%人只会用sorted()?这7个高阶技巧让你代码效率翻倍
- 2025-07-24 新手 Python 项目实战 - PyQT 篇 5.事件类型
- 2025-07-24 PyAutoGUI:让Python帮你“偷懒”的神器!
- 2025-07-24 【九宫格按键输入法】Python 实现
- 285℃Python短文,Python中的嵌套条件语句(六)
- 282℃PythonNet:实现Python与.Net代码相互调用!
- 281℃python笔记:for循环嵌套。end=""的作用,图形打印
- 278℃Python实现字符串小写转大写并写入文件
- 276℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 135℃原来2025是完美的平方年,一起探索六种平方的算吧
- 120℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 112℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)