news 2026/7/2 2:09:05

playwright-拖拽音量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
playwright-拖拽音量

一、有如下一个音量demo,实现自动拖拽

html如下:

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>全类型HTML表单&iframe综合测试页</title> <style> * { box-sizing: border-box; margin: 8px; font-size: 15px; } .box { border: 1px solid #ccc; padding: 15px; margin: 10px 0; border-radius: 6px; } iframe { border: 2px solid #666; } button, input[type=button], input[type=submit], input[type=reset] { padding: 6px 16px; cursor: pointer; } input, select, textarea { padding: 5px; width: 280px; } textarea { height: 80px; } </style> </head> <body> <h2>1. input 各类输入框全类型</h2> <form id="testForm"> <div class="box"> <!-- 普通文本输入 --> <label>文本输入(text):</label> <input type="text" name="username" placeholder="请输入用户名" value="默认文字"> <br> <label>文本输入(text):</label> <input type="text" name="username" placeholder="请输入用户名" value="默认文字"> <br> <!-- 密码框 --> <label>密码输入(password):</label> <input type="password" name="pwd" placeholder="请输入密码"> <br> <label>密码输入(password):</label> <input type="password" name="pwd" placeholder="请输入密码"> <br> <!-- 数字输入 --> <label>数字输入(number):</label> <input type="number" name="age" min="0" max="150" value="18"> <br> <!-- 邮箱 --> <label>邮箱(email):</label> <input type="email" name="email" placeholder="test@xxx.com"> <br> <!-- 手机号tel --> <label>电话(tel):</label> <input type="tel" name="phone" placeholder="13800138000"> <br> <!-- 网址url --> <label>网址(url):</label> <input type="url" name="link" placeholder="https://xxx.com"> <br> <!-- 搜索框 --> <label>搜索框(search):</label> <input type="search" name="search" placeholder="关键词搜索"> <br> <!-- 日期选择 --> <label>日期(date):</label> <input type="date" name="birth"> <br> <!-- 时间选择 --> <label>时间(time):</label> <input type="time" name="time"> <br> <!-- 日期+时间 --> <label>日期时间(datetime-local):</label> <input type="datetime-local" name="dt"> <br> <!-- 月份选择 --> <label>月份(month):</label> <input type="month" name="month"> <br> <!-- 周选择 --> <label>周(week):</label> <input type="week" name="week"> <br> <!-- 颜色拾取器 --> <label>颜色(color):</label> <input type="color" name="color" value="#0066ff"> <br> <!-- 范围滑块 --> <label>音量滑块(range):</label> <input type="range" name="volume" min="0" max="100" value="50"> <br> <!-- 文件上传 --> <label>文件上传(file):</label> <input type="file" name="file" multiple> <br> <!-- 隐藏域 页面不可见,提交携带数据 --> <input type="hidden" name="hiddenId" value="test001"> </div> <h2>2. 单选框 radio</h2> <div class="box"> <input type="radio" name="gender" id="man" value="男" checked> <label for="man">男</label> <input type="radio" name="gender" id="woman" value="女"> <label for="woman">女</label> </div> <h2>3. 复选框 checkbox</h2> <div class="box"> <input type="checkbox" name="hobby" id="read" value="阅读" checked> <label for="read">阅读</label> <input type="checkbox" name="hobby" id="game" value="游戏"> <label for="game">游戏</label> <input type="checkbox" name="hobby" id="sport" value="运动"> <label for="sport">运动</label> </div> <h2>4. 下拉选择框 select</h2> <div class="box"> <!-- 普通下拉框 --> <label>城市单选下拉:</label> <select name="city"> <option value="">请选择城市</option> <option value="sh">上海</option> <option value="bj">北京</option> <option value="gz">广州</option> <option value="sz">深圳</option> </select> <br><br> <!-- 多选下拉框 multiple --> <label>爱好多选下拉(按住Ctrl多选):</label> <select name="mulHobby" multiple size="4"> <option value="code">编程</option> <option value="movie">电影</option> <option value="travel">旅行</option> <option value="food">美食</option> </select> <br><br> <!-- 分组下拉 optgroup --> <label>分组下拉菜单:</label> <select name="fruit"> <optgroup label="热带水果"> <option value="mango">芒果</option> <option value="banana">香蕉</option> </optgroup> <optgroup label="温带水果"> <option value="apple">苹果</option> <option value="pear">梨</option> </optgroup> </select> </div> <h2>5. 多行文本框 textarea</h2> <div class="box"> <label>留言内容:</label> <textarea name="msg" placeholder="请输入多行留言...">默认预置文本内容</textarea> </div> <h2>6. 各类按钮 Button / input按钮</h2> <div class="box"> <!-- input系列按钮 --> <input type="button" value="普通按钮 button" onclick="alert('点击普通input按钮')"> <input type="submit" value="提交表单 submit"> <input type="reset" value="重置表单 reset"> <br><br> <!-- button标签按钮,可内嵌html --> <button type="button" onclick="alert('点击原生button标签')">原生button按钮</button> <button type="submit">button提交按钮</button> <button type="reset">button重置按钮</button> <button disabled>禁用按钮 disabled</button> </div> </form> <h2>7. 字段集分组 fieldset + legend</h2> <fieldset style="width: 320px;"> <legend>个人基础信息分组</legend> <label>昵称:</label> <input type="text" name="nick"> </fieldset> <script> // 简单测试JS:表单提交拦截打印表单数据 const form = document.getElementById('testForm'); form.addEventListener('submit', function(e) { e.preventDefault(); const formData = new FormData(form); console.log('表单提交数据:'); for (let [key, val] of formData) { console.log(key, ':', val); } alert('已阻止页面跳转,数据打印在控制台'); }) </script> </body> </html>

二、playwright 拖拽音量

1.有如下步骤

①打开测试页面

②获取 音量控件 定位

③第一种方式,直接fill方法 滑倒 10%

④ 第二种 === 鼠标拖拽工具方法(带高亮跟踪)示例 ===

新建测试类TestRange

import com.microsoft.playwright.*; import com.microsoft.playwright.options.AriaRole; import com.microsoft.playwright.options.BoundingBox; import java.nio.file.Path; import java.nio.file.Paths; public class TestRange { public static void main(String[] args) { try (Playwright playwright = Playwright.create()) { Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false)); Page page = browser.newPage(); //打开测试页面 page.navigate("file:///E:/playwright/testDemo/全类型HTML表单&iframe综合测试页.html"); //获取 音量控件 定位 Locator slider = page.locator("//*[@id=\"testForm\"]/div[1]/input[16]"); slider.hover(); //第一中,直接fill方法 滑倒 10% slider.fill("10"); // 第二种 === 鼠标拖拽工具方法(带高亮跟踪)示例 === //增加小红点 injectMouseTracker(page); page.waitForTimeout(1000); // 拖拽到 80% 位置 mouseDragSlider(page, "//*[@id=\"testForm\"]/div[1]/input[16]", 0.8); page.waitForTimeout(1000); //移除小红点 removeMouseTracker(page); //停2秒 page.waitForTimeout(2000); browser.close(); } } // ============ 鼠标拖拽工具方法(带高亮跟踪) ============ public static void injectMouseTracker(Page page) { page.evaluate("() => {" + "const dot = document.createElement('div');" + "dot.id = '__pw_mouse_tracker__';" + "dot.style.cssText = 'position:fixed;width:10px;height:10px;" + "background:red;border-radius:50%;z-index:99999;" + "pointer-events:none;transform:translate(-50%,-50%)';" + "document.body.appendChild(dot);" + "}"); } public static void mouseMoveTo(Page page, double x, double y) { page.evaluate("(args) => {" + "const d = document.getElementById('__pw_mouse_tracker__');" + "if (d) { d.style.left = args[0] + 'px'; d.style.top = args[1] + 'px'; }" + "}", new Object[]{x, y}); page.mouse().move(x, y); } public static void mouseDrag(Page page, double fromX, double fromY, double toX, double toY, int steps) { mouseMoveTo(page, fromX, fromY); page.mouse().down(); for (int i = 1; i <= steps; i++) { double x = fromX + (toX - fromX) * i / steps; double y = fromY + (toY - fromY) * i / steps; mouseMoveTo(page, x, y); } page.mouse().up(); } public static void mouseDragSlider(Page page, String selector, double targetPercent) { Locator slider = page.locator(selector); BoundingBox box = slider.boundingBox(); if (box == null) throw new RuntimeException("Element not found or not visible: " + selector); double fromX = box.x + box.width * 0.5; double toX = box.x + box.width * targetPercent; double y = box.y + box.height / 2; mouseDrag(page, fromX, y, toX, y, 10); } public static void removeMouseTracker(Page page) { page.evaluate("() => {" + "document.getElementById('__pw_mouse_tracker__')?.remove();" + "}"); } }
2.结果展示

二、通过葫芦娃ui自动化工具操作

①打开葫芦娃ui自动化工具

②加载对应step.xlsx和data.xlsx

③step.xlsx配置如图:

case sheet输入如下

④创建对应sheet [ 测试鼠标拖拽音量] 如下,方法选择 mouseDragSlider:

⑤切换到工具,点击运行:

⑥执行结果如下:

运行效果和上面一样

完全零代码,直接维护excel 就行,谢谢大家的支持,可以点个赞或转发。谢谢大家~

想要工具可以私聊 或者直接赞赏哈~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 2:07:59

预测建模做商业洞察:服务分数不是汇报结论

预测建模做商业洞察&#xff1a;服务分数不是汇报结论 一、业务预测要先问能不能行动 机器学习模型能预测用户流失、销量变化、库存风险和转化概率&#xff0c;但商业洞察不等于模型分数。一个 AUC 很高的模型&#xff0c;如果不能指导运营动作&#xff0c;也很难产生价值。业务…

作者头像 李华
网站建设 2026/7/2 2:06:39

年入100亿压缩机龙头IPO!1.66亿诉讼案未决,应收账款质量恶化

2026年7月3日&#xff0c;沈鼓集团股份有限公司将在上交所主板接受IPO上市委审核&#xff0c;这是沈鼓集团第二次冲击资本市场。沈鼓集团早在2014年就首次提交IPO申报稿&#xff0c;本次上市申请于2025年12月25日获上交所正式受理。【摩斯IPO】研究&#xff0c;沈鼓集团整体经营…

作者头像 李华
网站建设 2026/7/2 2:03:58

工程化应用基础设施:可观测性要覆盖 提示词、检索和执行

工程化应用基础设施&#xff1a;可观测性要覆盖 提示词、检索和执行 一、AI 链路的黑盒不能只靠日志猜 传统后端排障时&#xff0c;我们看接口状态码、数据库慢查询、服务日志和链路追踪。AI 应用多了几层&#xff1a;Prompt 组装、向量检索、重排、模型推理、内容安全、流式输…

作者头像 李华
网站建设 2026/7/2 2:03:34

AI 辅助:Python 数据管线自动化:从临时脚本到可维护任务系统

AI 辅助&#xff1a;Python 数据管线自动化&#xff1a;从临时脚本到可维护任务系统一、临时脚本最容易变成生产依赖 很多数据管线最初都是一个 Python 脚本。读取 CSV&#xff0c;清洗字段&#xff0c;调用接口&#xff0c;写入数据库。第一版很快能跑&#xff0c;业务也很满意…

作者头像 李华