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

Midscene.js - AI驱动,轻松实现UI自动化

UI自动化测试一直是软件测试中的一项重要任务,而随着AI技术的快速发展,自动化测试的能力也在不断提升。如何让UI自动化更智能、精准、灵活?Midscene.js作为一款AI驱动的UI自动化测试工具,正逐步改变着传统自动化测试的面貌。你是不是也在寻找一款能够轻松实现UI自动化测试的工具呢?那就不妨来了解一下这款神器!

UI自动化测试常常因界面变化多、操作繁琐、元素识别困难等问题让测试人员头疼。Midscene.js作为一款AI驱动的自动化工具,它是如何突破这些难题,并且实现精准高效的UI自动化测试呢?本文将为你深度解析Midscene.js的强大功能,帮助你实现更智能的自动化测试。

随着AI技术的不断发展,AI驱动的自动化工具逐渐成为开发和测试人员的新宠。传统的UI自动化测试往往依赖元素定位和脚本编写,维护难度大且容易出现误差,而AI自动化的兴起,尤其是在UI测试领域,打破了这些局限,让软件测试变得更加智能和高效。

1、前言

截至目前,自然语言驱动的UI自动化测试技术已实现‌效率、协作与适应性三重突破‌:

  • ‌技术层面‌:多模态AI模型(视觉+语义)与边缘计算结合,精准解析动态交互(如AR/VR手势、全球化多语言布局),实现复杂场景覆盖。

  • ‌行业价值‌:在金融合规、医疗审计等领域自动化验证高危流程,误报率降低60%,测试用例生成效率提升12倍。

  • ‌协作模式‌:非技术人员可通过自然语言直接编写脚本,跨职能团队共享“业务语言”降低沟通成本,AI自愈机制使脚本维护成本减少70%。

该技术正从“辅助工具”进化为‌质量保障核心决策中枢‌,推动软件交付从“人适应工具”到“工具理解意图”的范式重构。

本篇将介绍一款,也是只需用自然语言描述就可实现完成自动化测试操作的工具 - Midscene.js。

2、简介

Midscene.js让人工智能成为你的浏览器操作助手,只需用自然语言描述你想做的事情,它就会帮助你操作网页、验证内容以及提取数据。无论你是想快速体验一下,还是进行深度开发,都能轻松上手。

功能特点:

  • 自然语言交互:只需描述你的目标和步骤,Midscene就会为你规划并操作用户界面。

  • Chrome扩展程序体验:通过Chrome扩展程序即可立即开始体验,无需编写代码。

  • Puppeteer/Playwright集成:支持集成Puppeteer和Playwright,让你能够将人工智能功能与这些强大的自动化工具相结合,轻松实现自动化操作。

  • 支持开源模型:支持对UI-TARS和Qwen2.5-VL进行私有化部署,在用户界面自动化场景中,它们的表现优于GPT-4o和Claude等闭源模型,同时能更好地保护数据安全。

  • 支持通用模型:支持GPT-4o和Claude等通用大模型,适应各种场景需求。

  • 用于调试的可视化报告:通过我们的测试报告和演练场,你可以轻松理解、重放和调试整个过程。

  • 支持缓存:首次通过人工智能执行任务时,任务会被缓存,后续执行相同任务时,执行效率将大幅提高。

  • 完全开源:体验全新的自动化开发感受,尽情享受吧!

  • 理解用户界面、JSON格式响应:你可以指定数据格式要求,并接收JSON格式的响应内容。

  • 直观的断言:用自然语言表达你的断言,人工智能会理解并处理这些断言。

  • 与Javascript集成:你可以永远相信Javascript。

模型选择:

Midscene.js推荐使用的三种模型是GPT-4o,Qwen2.5-VL(千问)和UI-TARS。它们的的主要特性是:

  • GPT-4o:表现比较平衡,需要使用较多token。

  • 千问Qwen-2.5-VL:开源的VL模型,几乎与GPT-4o表现相同,使用阿里云部署的版本时成本很低。

  • UI-TARS:开源的端到端GUI代理模型,擅长执行目标驱动的任务,有错误纠正能力。

你也可以使用其他模型。

Midscene提供了三种关键方法:

交互(.ai, .aiAction)、提取(.aiQuery)、断言(.aiAssert)。

  • 交互:用 .ai 方法描述步骤并执行交互。

  • 提取:用 .aiQuery 从UI中“理解”并提取数据,返回值是JSON格式,你可以尽情描述想要的数据结构。

  • 断言:用 .aiAssert 来执行断言。

官网地址:https://midscenejs.com/

3、快速上手

一、通过Chrome插件快速体验

通过使用Midscene.js的Chrome插件,你可以快速在任意网页上体验Midscene的主要功能,而无需编写任何代码。

1、安装:

前往Chrome扩展商店安装Midscene.js插件:

https://chromewebstore.google.com/detail/midscene/gbldofcpkknbggpkmbdaefngejllnief

或者联系作者,获取离线Midscene.js插件。

2、配置:

安装Midscene.js插件后,需要设置环境变量(接入的模型和API KEY)。

本文示例作者使用火山云的豆包doubao-vision-pro-32k模型。

调用前需要配置推理点:

https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint

在推理点界面中,寻找一个如 ep-202... 形式的接入点ID 作为模型名称。

配置环境变量完成。

配置信息:

export OPENAI_BASE_URL="https://ark.cn-beijing.volces.com/api/v3"export OPENAI_API_KEY="..."export MIDSCENE_MODEL_NAME="ep-202....."

 

3、开始体验:

打开一个购物网站。

输入执行步骤“将书包和$49.99的衣服添加到购物车里,并进入到购物车里进行查看”。

根据想提取的信息,来获取JSON格式的返回值。

获取断言格式。

实际网页已经跳转到购物车里。

回放操作和下载报告文件。

 

打开可视化报告。

图片

 

二、使用YAML格式的自动化脚本

使用官方的示例项目

https://github.com/web-infra-dev/midscene-example/tree/main/yaml-scripts-demo

1、安装:

确保已安装Node.js,全局安装@midscene/cli。

npm i -g @midscene/cli

2、配置:

配置OpenAI API KEY。

# 更新为你自己的Key
export OPENAI_API_KEY="sk-abcdefghijklmnopqrstuvwxyz"

或使用.env文件存储配置,Midscene命令行工具在运行yaml脚本时会自动加载它。

OPENAI_API_KEY="sk-abcdefghijklmnopqrstuvwxyz"

本例作者继续使用火山云的豆包doubao-vision-pro-32k模型。

3、.yaml文件结构:

在.yaml文件中,有两个部分:target和tasks。

target部分定义了任务的基本信息。

target:# 访问的 URL,必填。如果提供了 `serve` 参数,则提供相对路径url: <url># 在本地路径下启动一个静态服务,可选serve: <root-directory># 浏览器 UA,可选userAgent: <ua># 浏览器视口宽度,可选,默认 1280viewportWidth: <width># 浏览器视口高度,可选,默认 960viewportHeight: <height># 浏览器设备像素比,可选,默认 1deviceScaleFactor: <scale># JSON 格式的浏览器 Cookie 文件路径,可选cookie: <path-to-cookie-file># 等待网络空闲的策略,可选waitForNetworkIdle:# 等待超时时间,可选,默认 10000mstimeout: <ms># 是否在等待超时后继续,可选,默认 truecontinueOnNetworkIdleError: <boolean># 输出 aiQuery 结果的 JSON 文件路径,可选output: <path-to-output-file># 是否限制页面在当前 tab 打开,可选,默认 trueforceSameTabNavigation: <boolean># 桥接模式,可选,默认 false,可以为 'newTabWithUrl' 或 'currentTab'。更多详情请参阅后文bridgeMode: false | 'newTabWithUrl' | 'currentTab'

tasks部分是一个数组,定义了脚本执行的步骤。记得在每个步骤前添加 - 符号。

tasks:- name: <name>continueOnError: <boolean> # 可选,错误时是否继续执行下一个任务,默认 falseflow:# 执行一个交互,`ai` 是 `aiAction` 的简写方式- ai: <prompt># 执行一个交互- aiAction: <prompt># 执行一个断言- aiAssert: <prompt># 执行一个查询,返回一个 JSON 对象- aiQuery: <prompt> # 记得在提示词中描述输出结果的格式name: <name> # 查询结果在 JSON 输出中的 key# 等待某个条件满足,并设置超时时间(ms,可选,默认 30000)- aiWaitFor: <prompt>timeout: <ms># 等待一定时间- sleep: <ms>- name: <name>flow:# ...

4、示例脚本:

示例项目总共有4个脚本。

extract-github-status.yaml,从github状态页面提取状态信息。

local-static-server.yml,将public文件夹用作静态服务器,并测试index.html文件。

sauce-demo.yaml,登录到sauce demo,将项目信息提取到json文件中,并断言“sauce Labs Fleece夹克”的价格。

search-headphone-on-ebay.yaml,模拟移动设备,在ebay上搜索耳机,将商品信息提取到json文件中,并断言购物车图标。

5、运行脚本:

# 运行所有脚本:
midscene ./midscene-scripts/# 运行单个脚本:
midscene ./midscene-scripts/sauce-demo.yaml# 运行在有界面模式下,使用 --headed 选项:
midscene ./midscene-scripts/sauce-demo.yaml --headed# 运行在有界面模式下,并在结束后保持浏览器窗口打开,使用 --keep-window 选项:
midscene ./midscene-scripts/sauce-demo.yaml --keep-window

6、可视化报告:

extract-github-status脚本报告。

local-static-server脚本报告。

图片

 

sauce-demo脚本报告。

图片

search-headphone-on-ebay脚本报告。

图片

总结

如果你正在寻找一款高效、智能的UI自动化测试工具,不妨试试Midscene.js。它的AI驱动特性,能够为你的测试团队带来革命性的提升。无论是减少人工干预、提高测试准确性,还是降低维护成本,Midscene.js都能为你提供强有力的支持。快来了解更多信息,提升测试效率吧!

AI驱动的自动化测试工具正在迅速改变测试领域的格局。Midscene.js凭借其创新的智能识别和高效的测试脚本生成,成为UI自动化测试中的佼佼者。随着AI技术的不断进步,我们可以期待在不久的将来,UI自动化测试将变得更加智能、灵活,进一步提升软件的质量和开发效率。

"让AI驱动的UI自动化测试为你的开发团队插上腾飞的翅膀,快速、高效、精准,超越传统测试的极限!"

 

相关文章:

Midscene.js - AI驱动,轻松实现UI自动化

UI自动化测试一直是软件测试中的一项重要任务&#xff0c;而随着AI技术的快速发展&#xff0c;自动化测试的能力也在不断提升。如何让UI自动化更智能、精准、灵活&#xff1f;Midscene.js作为一款AI驱动的UI自动化测试工具&#xff0c;正逐步改变着传统自动化测试的面貌。你是不…...

(九)Mapbox GL JS 中 Marker 图层的使用详解

什么是 Marker&#xff1f; 在 Mapbox GL JS 中&#xff0c;Marker&#xff08;标记&#xff09; 是一个可视化元素&#xff0c;用于在地图上标记特定的地理位置。它可以是一个默认的图标、自定义的图像&#xff0c;或者任何 HTML 元素。Marker 不仅能显示位置&#xff0c;还能…...

2k1000LA 使能 nand.

背景 : 默认的 发货的镜像 确实 是识别不了 nand 的。 ------------------------------------------------------------------------------------------ 但是 我之前 已经写好了文档,因此 拷贝到线上。 1 首先我要使能这几个。 在menuconfig 中使能一下。...

Junit+Mock

base project <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version><relativePath/></parent><dependencies><!--添加mysql依…...

maven编译出错,javac: ��Ч��Ŀ�귢�а�: 17

1、异常信息 javac: &#xfffd;&#xfffd;Ч&#xfffd;&#xfffd;Ŀ&#xfffd;귢&#xfffd;а&#xfffd;: 17 &#xfffd;&#xfffd;: javac <options> <source files> -help &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;г&a…...

Vue使用Three.js加载glb (gltf) 文件模型及实现简单的选中高亮、测距、测面积

安装&#xff1a; # three.jsnpm install --save three 附中文网&#xff1a; 5. gltf不同文件形式(.glb) | Three.js中文网 附官网&#xff1a; 安装 – three.js docs 完整代码&#xff08;简易demo&#xff09;&#xff1a; <template><div class"siteInspe…...

<el-table>右侧有空白列解决办法

问题如图&#xff1a; 解决办法&#xff1a;.box 为本页面最外层的class名&#xff0c;保证各个页面样式不会互相污染。 .box::v-deep .el-table th.gutter {display: none;width: 0}.box ::v-deep.el-table colgroup col[namegutter] {display: none;width: 0;}.box::v-deep …...

Linux网络 网络层

IP 协议 协议头格式 4 位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4. 4 位头部长度(header length): IP 头部的长度是多少个 32bit, 也就是 4 字节&#xff0c;4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节. 8 位服务类型(Type Of Service):…...

系统讨论Qt的并发编程——逻辑上下文的分类

目录 前言 首先&#xff0c;讨论Qt里常见的三种上下文 同一线程的串行执行 同一线程的异步执行 多线程的执行 moveToThread办法 前言 笔者最近看了一个具备一定启发性质的Qt教程&#xff0c;在这里&#xff0c;笔者打算整理一下自己的笔记。分享在这里. 首先&#xff0c…...

《Linux Shell 脚本深度探索:原理与高效编程》

1. 基本结构 Shebang 行 #!/bin/bash # Shebang 行指定了脚本使用的解释器。 /bin/bash 表示使用 Bash 解释器执行脚本。 注释 # 这是注释&#xff0c;不会被执行 2. 变量 定义变量 variable_namevalue # 不需要加 $ 来定义变量。 # 变量名不能包含空格或特殊字符。 访…...

深入剖析:基于红黑树实现自定义 map 和 set 容器

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; 在 C 标准模板库&#xff08;STL&#xff09;的大家庭里&#xff0c;map和set可是超级重要的关联容器成员呢&#x1f60e;&#x…...

在大数据项目中如何设计和优化数据模型

在大数据项目中&#xff0c;设计和优化数据模型是一个涉及多个步骤和维度的复杂过程。以下是我通常采取的方法&#xff1a; 一、数据模型设计 明确业务需求&#xff1a; 深入了解项目的业务场景和目标&#xff0c;明确数据模型需要解决的具体问题。与业务团队紧密合作&#xf…...

JavaScript querySelector()、querySelectorAll() CSS选择器解析(DOM元素选择)

文章目录 基于querySelector系列方法的CSS选择器深度解析一、方法概述二、基础选择器类型1. 类型选择器2. ID选择器3. 类选择器4. 属性选择器 三、组合选择器1. 后代组合器2. 子元素组合器3. 相邻兄弟组合器4. 通用兄弟组合器 四、伪类与伪元素1. 结构伪类2. 状态伪类3. 内容伪…...

Linux系统中处理子进程的终止问题

1. 理解子进程终止的机制 在Unix/Linux系统中&#xff0c;当子进程终止时&#xff0c;会向父进程发送一个SIGCHLD信号。父进程需要捕捉这个信号&#xff0c;并通过调用wait()或waitpid()等函数来回收子进程的资源。这一过程被称为“回收僵尸进程”。 如果父进程没有及时调用w…...

Docker 不再难懂:快速掌握容器命令与架构原理

1. Docker 是容器技术的一种 容器&#xff08;Container&#xff09;概述 容器&#xff08;Container&#xff09;是一种轻量级的虚拟化技术&#xff0c;它将应用程序及其所有依赖环境打包在一个独立的、可移植的运行时环境中。容器通过操作系统级的虚拟化提供隔离&#xff0…...

取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票

在做航班智能客服问答系统时会遇到取消票证的场景&#xff0c;这里涉及数据库的操作时会把指定的票证从数据库中删除&#xff0c;同时也会把票证和航班等相关表中的关联关系一起删除。但在删除之前&#xff0c;需要先检查当前用户是否拥有这张票&#xff0c;只有票主才有权限取…...

力扣-贪心-763 划分字母区间

思路 先统计字符串中每一个字母出现的最后下标&#xff0c;然后从end初始化为第一个字母出现的最后下标&#xff0c;在i<end时&#xff0c;不断更新end&#xff0c;因为一旦囊括新的字母就最起码要遍历到新字母出现的最后下标&#xff0c;在i>end时&#xff0c;说明遍历…...

【Redis 原理】网络模型

文章目录 用户空间 && 内核空间阻塞IO非阻塞IO信号驱动IO异步IOIO多路复用selectpollepoll Web服务流程Redis 网络模型Redis单线程网络模型的整个流程Redis多线程网络模型的整个流程 用户空间 && 内核空间 为了避免用户应用导致冲突甚至内核崩溃&#xff0c;用…...

cpp中的继承

一、继承概念 在cpp中&#xff0c;封装、继承、多态是面向对象的三大特性。这里的继承就是允许已经存在的类&#xff08;也就是基类&#xff09;的基础上创建新类&#xff08;派生类或者子类&#xff09;&#xff0c;从而实现代码的复用。 如上图所示&#xff0c;Person是基类&…...

DeepSeek全栈接入指南:从零到生产环境的深度实践

第一章:DeepSeek技术体系全景解析 1.1 认知DeepSeek技术生态 DeepSeek作为新一代人工智能技术平台,构建了覆盖算法开发、模型训练、服务部署的全链路技术栈。其核心能力体现在: 1.1.1 多模态智能引擎 自然语言处理:支持文本生成(NLG)、语义理解(NLU)、情感分析等计算…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...