当前位置: 首页 > news >正文

浏览器元素定位工具-项目源码免费领取

插件页面
在这里插入图片描述
图片

使用效果

在这里插入图片描述

在这里插入图片描述

1. 整体架构(类比测试框架)

配置入口
消息中转
交互控制
生成定位器
UI展示
样式
manifest.json
background.js
content.js
popup.js
页面元素
popup.html
locator.css
  • manifest.json:类似 pytest.ini,声明插件权限、入口文件、快捷键等配置。
  • background.js:类似测试框架的 Runner,管理全局状态和消息转发。
  • content.js:核心测试逻辑,类似 Page Object 的定位器生成器。
  • popup.js/html:类似测试报告的 GUI 界面,展示历史记录和操作面板。

2. 核心模块:content.js(定位器生成引擎)

关键类 ElementLocatorHelper(类比 LocatorFactory
class ElementLocatorHelper {constructor() {this.isActive = false;  // 类似测试的录制状态this.currentElement = null;  // 当前悬停元素this.selectedElement = null; // 已选中元素}
}
定位器生成流程(9级策略)
Usercontent.js点击元素generateLocators(element)验证ID → Name → 测试属性 → ...检查唯一性(validateUniqueness)loop[9级验证]返回最优定位器Usercontent.js
  • 唯一性验证:类似 WebDriverfind_elements 检查匹配数量。
  • 优先级ID > Name > data-testid > 稳定Class > ... > JS坐标

3. 定位器策略详解(类比测试选择器)

策略层级类型示例(Playwright)稳定性类比测试场景
1IDpage.locator("#login-btn")⭐⭐⭐最理想的定位方式
3测试属性page.locator("[data-testid='submit']")⭐⭐⭐专为测试设计的属性
5属性组合page.locator("input[type='text'][placeholder='用户名']")⭐⭐表单输入框专用
9JS坐标page.evaluate("document.elementFromPoint(x,y)")复杂动态元素的最后手段

4. 关键算法解析(以ID定位为例)

// 类似:在Selenium中优先用ID定位
if (element.id) {const selector = `#${element.id}`;if (document.querySelectorAll(selector).length === 1) { // 唯一性检查return {type: 'ID',playwright: `page.locator("${selector}")`,stability: 'high'};}
}
  • 唯一性验证:通过 querySelectorAll 检查是否只匹配一个元素。
  • 稳定性分级:ID/Name为 high,XPath为 low

5. UI交互流程(类比测试录制)

  1. 悬停高亮

    element.classList.add('locator-hover'); // 添加绿色边框
    
    • 类似 Selenium IDE 的元素高亮。
  2. 点击选中

    const locators = generateLocators(element); // 生成9级定位器
    showBestLocator(locators); // 显示最优解
    
    • 类似录制测试脚本时选择最佳定位方式。
  3. 复制定位器

    navigator.clipboard.writeText("page.locator('#id')"); 
    
    • 直接生成可粘贴到测试代码中的定位器。

6. 弹窗逻辑(popup.js)

class LocatorPopup {async exportAllCode() {// 类似导出Page Object代码const code = this.selectedElements.map(el => `# ${el.tagName}\n${el.locators.bestStrategy.playwright}`).join('\n');await navigator.clipboard.writeText(code);}
}
  • 历史记录:类似测试框架的 lastFailed 功能,保存最近50个元素。
  • 批量导出:一键生成完整页面的定位器代码。

7. 样式系统(locator.css)

.locator-hover {outline: 2px solid #4CAF50; /* 绿色悬停边框 */background: rgba(76,175,80,0.1);
}
.locator-selected {outline: 3px solid #FF5722; /* 橙色选中边框 */
}
  • 类似开发者工具的元素检查效果,但针对测试场景优化。

8. 调试技巧(针对测试工程师)

  1. 查看定位器生成过程
    在 Chrome 控制台输入 window.locatorHelper.generateLocators($0)$0 表示当前选中的元素。

  2. 验证选择器唯一性

    // 在控制台测试某个选择器
    document.querySelectorAll("#login-btn").length === 1
    
  3. 模拟插件消息

    // 测试background.js的消息处理
    chrome.runtime.sendMessage({type: 'elementSelected', data: {...}})
    

9. **与测试框架的集成示例

Playwright 测试脚本示例

# 使用插件生成的定位器
def test_login(page):page.goto("https://example.com")login_btn = page.locator("#login-btn")  # 插件生成的ID定位器login_btn.click()# 插件生成的备选定位器username = page.locator("[name='username']")  username.fill("testuser")

10. 常见问题排查(QA视角)

现象可能原因解决方案
定位器匹配多个元素页面存在重复ID/Class改用更高优先级的策略
动态Class不稳定类名包含随机哈希值使用属性组合或父元素限定
iframe内元素无法定位未切换到iframe上下文手动添加iframe切换代码

  1. 项目地址
    https://github.com/kangpc/browser-extension
http://www.dtcms.com/a/286570.html

相关文章:

  • 萤石摄像头C++SDK应用实例
  • 前端笔记之 async/await 异步编程详解
  • 面试高频题 力扣 695.岛屿的最大面积 洪水灌溉(FloodFill) 深度优先遍历 暴力搜索 C++解题思路 每日一题
  • Python网络爬虫之selenium库
  • 第九章 基础设施更新工程
  • 语音控制操作板:人机交互的未来趋势
  • 企业级异常处理方案:Spring Boot自定义异常全局拦截实战
  • 多线程的认识
  • 深入Java注解:从内置到元注解与自定义实战指南
  • 变量提升知识总结
  • 前后端数据交互,关于表单数据传输问题
  • 图机器学习(11)——链接预测
  • Linux和git常用命令
  • TF-IDF(Term Frequency - Inverse Document Frequency)
  • RFID技术赋能智慧物流:实现搬运环节的精准化与高效化
  • 【PTA数据结构 | C语言版】多叉堆的上下调整
  • 【LeetCode 2163. 删除元素后和的最小差值】解析
  • 上市公司-企业超额商誉数据(2005-2023年)-实证数据
  • 《C++继承深度引擎:从内存布局到多态全景拆解》​
  • 飞算科技:以创新科技引领数字化变革,旗下飞算 JavaAI 成开发利器
  • Linux Master 知识库 —— 致 Linux 系统工程师
  • 通信算法之294:LTE系统中的整数倍频偏估计
  • 太阳辐射监测站:洞察太阳能量的科技之眼
  • 【软件系统架构】系列七:系统性能——路由器性能深入解析
  • 告别宕机!Ubuntu自动重启定时任务设置(一键脚本/手动操作)
  • [Raspberry Pi]如何將無頭虛擬顯示器服務(headless display)建置在樹莓派的Ubuntu桌面作業系統中?
  • 汽车免拆诊断案例 | 07款丰田Hilux启动故障
  • Redis——MoreKey
  • 深入理解进程地址空间:虚拟内存与进程独立性
  • nodeJs笔记(六)