{"id":19462817,"url":"https://github.com/iduxfe/wetest","last_synced_at":"2025-09-06T22:39:59.216Z","repository":{"id":64049776,"uuid":"572761251","full_name":"IDuxFE/wetest","owner":"IDuxFE","description":"Wetest is a no code E2E test","archived":false,"fork":false,"pushed_at":"2025-03-27T13:33:30.000Z","size":336,"stargazers_count":10,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-23T04:34:09.666Z","etag":null,"topics":["auto-tests","e2e-tests","nodejs","playwright","ui-recorder","uitest"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IDuxFE.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-01T01:09:33.000Z","updated_at":"2025-05-10T06:04:58.000Z","dependencies_parsed_at":"2024-06-07T07:29:58.692Z","dependency_job_id":"a75bb4dc-6c6f-4c04-9777-b3d3d99d3e75","html_url":"https://github.com/IDuxFE/wetest","commit_stats":{"total_commits":23,"total_committers":4,"mean_commits":5.75,"dds":"0.34782608695652173","last_synced_commit":"b22cca7da47522ed806d18c46cb23aa2f769a06e"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/IDuxFE/wetest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IDuxFE%2Fwetest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IDuxFE%2Fwetest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IDuxFE%2Fwetest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IDuxFE%2Fwetest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IDuxFE","download_url":"https://codeload.github.com/IDuxFE/wetest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IDuxFE%2Fwetest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273973986,"owners_count":25200579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-tests","e2e-tests","nodejs","playwright","ui-recorder","uitest"],"created_at":"2024-11-10T18:05:54.571Z","updated_at":"2025-09-06T22:39:59.186Z","avatar_url":"https://github.com/IDuxFE.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wetest\n\n## 工具使用场景/边界\n\n\u003e wetest当前能力致力于解决业务绝大部分基础场景的无代码自动化测试（80%场景），未来wetest将进一步深度开发，以达到90%以上的业务场景支持度\n\n### 场景支持度\n\n\n| 场景     |  支持度  |\n| :------- | :------: |\n| 表格场景 |   支持   |\n| 表单场景 |   支持   |\n| 多标签页 |   支持   |\n| 静态页面 |   支持   |\n| 画布场景 | 暂不支持 |\n\n### 事件支持度\n\n\n| 事件        |  支持度  |   未来计划   |\n| :---------- | :------: | :----------: |\n| click       |   支持   |      -      |\n| auxclick    |   支持   |      -      |\n| hover       |   支持   |      -      |\n| input       |   支持   |      -      |\n| keydown     |   支持   |      -      |\n| dragAndDrop | 暂不支持 | 下个迭代支持 |\n| dbclick     | 暂不支持 | 下个迭代支持 |\n\n### 断言支持度\n\n\n| 断言     |  支持度  |   未来计划   |\n| :------- | :------: | :----------: |\n| 元素快照 |   支持   |      -      |\n| 元素截图 |   支持   |      -      |\n| url断言  |   支持   |      -      |\n| 全屏截图 |   支持   |      -      |\n| 相反断言 | 暂不支持 | 下个迭代支持 |\n| 文本断言 | 暂不支持 | 下个迭代支持 |\n\n## 环境要求\n\n- **node \u003e 16.18.0**\n\n## 工具使用者准备工作（user）\n\n```shell\nnpm i -g playwright\n\n```\n\n```shell\nnpm i -g @idux/wetest-cli\n\n```\n\n## 工具开发者准备工作（developer）\n\n```shell\nnpm i -g pnpm\n\npnpm install\n\npnpm build\n\npnpm dev\n\ncd packages/cli\n\npnpm link -g\n```\n\n## 开始（user and developer）\n\n### 编写工具配置.wetest.js：\n\n通过wetest init 命令生成wetest初始配置，配置说明如下：\n\n```shell\nwetest init\n```\n\n```javascript\n{\n       recorder: {\n        // selector相关的开放配置\n        selector: {\n            // 元素埋点标记，当不配置的该项的时候，使用wetest无埋点选择器\n            buryingPoint: '',\n\n            // 不作为选择器的class\n            excludeClass: [],\n\n            // 不作为选择器的包含以下修饰的class，例如xxxx_btn-hover\n            excludeClassModify: /(-hover|active)/,\n\n            // 不作为选择器的属性\n            excludeAttr: /(id-.*)/,\n\n            // 排除指定内容的id，例如id=\"id-xxx\"的ID不会作为有效选择器\n            excludeIdByVal: /(id-.*)/\n        }\n    },\n\n    runner: {\n\n        // 无头浏览器信息，可以增加firefox、webkit浏览器信息\n        userAgent: {\n            chromium: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'\n        },\n\n        // 登录url，用来判断是否过期需要重登录\n        loginUrl: 'https://github.com/login',\n\n        // 不需要等待的请求，这列请求对业务没有影响，但对自动化执行可能会形成阻塞\n        abortUrl: /(.*sentry_key.*|.*matomo.*)/\n    }\n}\n```\n\n\u003e .wetest.js放置在执行wetest命令根目录下，通过-c 参数指定位置\n\n### 录制用例\n\n**输入启动录制命令：wetest record [pageURL] -o [caseDir] -c [.wetest.jsDir]**\n\n\u003e 解释：为要打开的页面，caseDir为录制的用例存放目录\n\n\u003e [pageURL] 需要打开进行录制的页面\n\n\u003e -o [caseDir] 录制的用例输出存放目录\n\n\u003e -c [.wetest.jsDir] 工具配置文件的存放位置，一般在命令执行根目录新建.wetest.js文件\n\n\u003e 录制命令其他参数：\n\n\u003e -b [browser] 启动录制的浏览器，当前支持chrome、firefox、webkit\n\n\u003e -c [.wetest.jsDir] 工具配置文件.wetest.js的存放位置\n\n\u003e 例子：wetest record https://github.com -o tests -c .wetest.js\n\n### 自动回归用例：\n\n**输入启动录制命令：wetest run [caseDir] -c [.wetest.jsDir]**\n\n\u003e 解释：\n\n\u003e [caseDir]为录制的用例存放目录\n\n\u003e -c [.wetest.jsDir] 工具配置文件的存放位置，一般在命令执行根目录新建.wetest.js文件\n\n\u003e 回放命令其他参数：\n\n\u003e -hl [headless] 是否启动无头浏览器执行用例\n\n\u003e -fb [fileGlob] flob语法筛选回放制定的目录用例\n\n\u003e -ai [action-interval] 设置每个回放动作的间隔时间\n\n\u003e 例子：wetest run tests -c .wetest.js -hl\n\n### 错误报告：\n\nwetest执行完自动化用例后，会在__reporter__生成错误报告（单页web应用），需要在__reporter__下启动服务查看（可用http-server包启动服务）\n报告包含了所有自动化用例的执行情况，包括：用例报告、错误报告、用例每一步的执行情况，强烈推荐使用报告中的**快速定位错误**功能\n\n## developer\n\n### 如何调试\n\n- 对于wetest工具层面层面的调试，在开启pnpm dev后（当然是已经pnpm link -g过了），强烈推荐使用visual studio code中terminal的JavaScript Debug terminal断点调试\n- 对于自动化报告应用，是独立的Vue单页应用，按照Vue应用调试即可，需要注意的是，自动化报告应用在构建后会复制到@idux/wetest-wetest上，每次执行完用例后注入报告数据，所以如果报告应用要结合报告数据调试的话，目前只能执行完用例后在__reporter__上启动web服务查看，这点确实比较麻烦一些\n\n### 项目结构介绍\n\n#### cli\n\n提供命令行工具，引用了engine的代码\n\n#### engine\n\n基于playwright二次封装，提供录制和回归的功能\n\n```\n│  assertor.ts // 断言器\n│  browserManager.ts // 浏览器管理，管理page和context\n│  caseManager.ts // 用例管理器\n│  mockProxy.ts // 数据代理器\n│  recorder.ts // 录制器\n│  runner.ts // 回归器\n```\n\n#### inject\n\n提供工具栏和事件监听等功能，engine通过playwright的api引入，在启动record时，注入inject代码，挂载工具栏和事件监听\n\n#### ai-selector\n\n元素选择器，用于定位操作的元素，执行无埋点生成选择器，当然有埋点更佳，维护性会更好一些\n\n#### share\n\n公共的东西\n\n#### web\n\nwetest报告源码\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiduxfe%2Fwetest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiduxfe%2Fwetest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiduxfe%2Fwetest/lists"}