chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用 GPT4V+AI Agent 做自動(dòng) UI 測試的探索

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-06-20 15:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、背景

從 Web 誕生之日起,UI 自動(dòng)化就成了測試的難點(diǎn),到現(xiàn)在近 30 年,一直沒有有效的手段解決Web UI測試的問題,盡管發(fā)展了很多的 webdriver 驅(qū)動(dòng),圖片 diff 驅(qū)動(dòng)的工具,但是這些工具的投入產(chǎn)出比一直被質(zhì)疑,自動(dòng)化率越多維護(hù)成本越高,大部分都做著就放棄了,還有一部分在做與不做間糾結(jié)。

本文結(jié)合一些開源的項(xiàng)目探索使用GPT 自動(dòng)做 UI 測試的可能性。

二、方案選型

當(dāng)前UI 的主要問題:一個(gè)是通過 Webdriver 控制瀏覽器執(zhí)行,這些工具都需要先查找到對應(yīng)元素的 Elements,無論是錄制的還是自己編寫的在面對 UI 變化,元素變化時(shí)都需要耗費(fèi)很大的精力去重新識別,解析 Dom 查找,這個(gè)工作乏味且沒有效率;另一種是通過圖像進(jìn)行點(diǎn)擊,比如 Sikuli 這種工具,主要的問題也是復(fù)用性較差,換個(gè)分辨率的機(jī)器或者圖片發(fā)生少的改動(dòng)就不可用。

使用 GPT 做 UI 測試嘗試了兩種方案:

第一種將 Html 元素投喂給 GPT,主要方法獲取 Html代碼,對 Html 做初步縮減處理,再做向量化,然后喂給 GPT4 自動(dòng)生成 Webdriver 驅(qū)動(dòng)腳本,效果一般,而且因?yàn)?Html 比較大,Token 的消耗很大。

第二種思路是讓 GPT 像人一樣思考和測試,比如一個(gè)人打開一個(gè)網(wǎng)頁后,他通過眼睛看到的頁面文字或圖標(biāo),然后用手完成點(diǎn)擊和輸入的操作,最后通過頁面的彈窗或者文字來識別是否有錯(cuò)誤,這幾個(gè)動(dòng)作通過大腦統(tǒng)一協(xié)調(diào)。

這里主要介紹第二種.

三、新方案實(shí)踐

1.新方案簡介

新的方案主要結(jié)合 Playwright,SoM視覺標(biāo)記,GPT4Vison,GPT4,AutoGen來實(shí)現(xiàn)。主要的原理

通過 Playwright進(jìn)行瀏覽器操作,包括頁面圖像的獲取、瀏覽器的各種操作,相當(dāng)于‘‘手’’;

進(jìn)行SoM 視覺數(shù)據(jù)標(biāo)記,因?yàn)?GPT4Vison 在進(jìn)行頁面原始識別時(shí)并不是很準(zhǔn)確,參考微軟的論文可以通過視覺標(biāo)記的手段來輔助 GPT4V 識別,相當(dāng)于“眼睛”。

通過GPT4+AutoGen 將這些步驟串起來實(shí)現(xiàn)協(xié)調(diào)控制,相當(dāng)于“大腦”和“神經(jīng)中樞”。

2.主要架構(gòu)

?

wKgaomZz3VOAPrwVAAH-GDO9wd0403.png

3.實(shí)現(xiàn)步驟

1. 使用 Playwright 注入 JS

browser = playwright.chromium.launch(channel="chrome",headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("http://oa.jd.com/")
inject_js ="./pagemark.js"
withopen(inject_js,'r')asfile:
    content =file.read()
    page.evaluate(f"{content}")

2. SoM 視覺提示標(biāo)記

如前文提到的 GPT4V 并不能有效的識別 Web 的元素,所以在使用 GPT4V 之前進(jìn)行圖像標(biāo)記,圖像標(biāo)記現(xiàn)在有兩種方式,一種是通過 AI 識別圖片進(jìn)行標(biāo)記,這種主要利用在對靜態(tài)圖片圖像的識別,對于 Web 頁面的標(biāo)記,我們可以采用注入 JS 修改頁面元素的方式來標(biāo)記。這里通過在瀏覽器中注入 pagemark.js,利用 Playwright 執(zhí)行 js 函數(shù)來完成頁面的標(biāo)記,該 JS 能夠完成標(biāo)準(zhǔn)的coco annotation的標(biāo)注。

// DOM Labelerlet labels =[];functionunmarkPage(){
 for(const label of labels){
 document.body.removeChild(label);
 }

 labels =[];
 }

 functionmarkPage(){
 unmarkPage();
 
 var bodyRect = document.body.getBoundingClientRect();

 var items =Array.prototype.slice.call(
 document.querySelectorAll('*')
 ).map(function(element){
 var vw = Math.max(document.documentElement.clientWidth ||0, window.innerWidth ||0);
 var vh = Math.max(document.documentElement.clientHeight ||0, window.innerHeight ||0);
 
 var rects =[...element.getClientRects()].filter(bb=>{
 var center_x = bb.left + bb.width /2;
 var center_y = bb.top + bb.height /2;
 var elAtCenter = document.elementFromPoint(center_x, center_y);
  
  return elAtCenter === element || element.contains(elAtCenter) 
 }).map(bb=>{
 const rect ={
 left: Math.max(0, bb.left),
 top: Math.max(0, bb.top),
 right: Math.min(vw, bb.right),
 bottom: Math.min(vh, bb.bottom)
  };
  return{
 ...rect,
 width: rect.right - rect.left,
 height: rect.bottom - rect.top
  }
  });

  var area = rects.reduce((acc, rect)=> acc + rect.width * rect.height,0);

 return{
 element: element,
 include: 
 (element.tagName ==="INPUT"|| element.tagName ==="TEXTAREA"|| element.tagName ==="SELECT")||
 (element.tagName ==="BUTTON"|| element.tagName ==="A"||(element.onclick !=null)|| window.getComputedStyle(element).cursor =="pointer")||
 (element.tagName ==="IFRAME"|| element.tagName ==="VIDEO")
 ,
 area,
 rects,
 text: element.textContent.trim().replace(/s{2,}/g,' ')
 };
 }).filter(item=>
 item.include &&(item.area >=20)
 );

 // Only keep inner clickable items
 items = items.filter(x=>!items.some(y=> x.element.contains(y.element)&&!(x == y)))

 // Function to generate random colors
 functiongetRandomColor(){
 var letters ='0123456789ABCDEF';
 var color ='#';
 for(var i =0; i {
 newElement = document.createElement("div");
 var borderColor =getRandomColor();
 newElement.style.outline =`2px dashed ${borderColor}`;
 newElement.style.position ="fixed";
 newElement.style.left = bbox.left +"px";
 newElement.style.top = bbox.top +"px";
 newElement.style.width = bbox.width +"px";
 newElement.style.height = bbox.height +"px";
 newElement.style.pointerEvents ="none";
 newElement.style.boxSizing ="border-box";
 newElement.style.zIndex =2147483647;
 // newElement.style.background = `${borderColor}80`;
 // Add floating label at the corner
 var label = document.createElement("span");
 label.textContent = index;
 label.style.position ="absolute";
 label.style.top ="-19px";
 label.style.left ="0px";
 label.style.background = borderColor;
 label.style.color ="white";
 label.style.padding ="2px 4px";
 label.style.fontSize ="12px";
 label.style.borderRadius ="2px";
 newElement.appendChild(label);
 
 document.body.appendChild(newElement);
  labels.push(newElement);
  console.log(index)
  
  });
  })
 }

以某系統(tǒng)為例,標(biāo)注后的效果如下圖:

wKgZomZz3VSARCAcAAchE3Vf-v4276.png

將標(biāo)記元素的位置編號保存到本地coco.json

{ 
    "1":{"x":"10","y":"40","w":"8","h":"10","center_x":"30","center_y":"13"}, 
    "2":{"x":"20","y":"40","w":"16","h":"10","center_x":"30","center_y":"21"}, 
    "10":{"x":"40","y":"80","w":"16","h":"10","center_x":"80","center_y":"21"}}

其中 center_x, center_y 為元素的中心點(diǎn)坐標(biāo)

3.GPT4V 識別

Prompt

我上傳了一張網(wǎng)頁截圖,頁面元素已經(jīng)使用COCO Annotator進(jìn)行了數(shù)字標(biāo)記。
請分析這張圖片,并識別出網(wǎng)頁的用途以及各個(gè)標(biāo)記元素的功能?;谀愕姆治?,請生成一個(gè)規(guī)劃路徑來完成以下任務(wù):
- 輸入ERP搜索。            
- 檢查列表是否為空            
請使用圖片中的數(shù)字標(biāo)記來描述完成任務(wù)的具體步驟。

GPT4V Response

這張圖片顯示的是一個(gè)具有多個(gè)數(shù)字標(biāo)記的網(wǎng)頁截圖。根據(jù)這些標(biāo)記,我們可以推測出網(wǎng)頁的用途以及各個(gè)元素的功能。
為了完成您提出的任務(wù),我們可以按照以下步驟操作:
nn1. 使用標(biāo)記為10的搜索框輸入ERP搜索詞。這個(gè)搜索框的標(biāo)簽顯示為“搜索框輸入erp”,表明它用于輸入搜索詞。
nn2. 點(diǎn)擊標(biāo)記為17的搜索按鈕。這個(gè)按鈕的標(biāo)簽是“搜索”,表明它用于提交搜索請求。
nn3. 檢查列表是否為空。這個(gè)步驟可能需要查看標(biāo)記為19的區(qū)域,這個(gè)區(qū)域被標(biāo)記為“列表內(nèi)容”,如果這個(gè)區(qū)域沒有顯示任何內(nèi)容或者有提示信息顯示列表為空,則說明搜索結(jié)果為空。
nn以 上步驟基于圖片中的數(shù)字標(biāo)記和元素標(biāo)簽來描述完成任務(wù)的具體操作。"

提取元素坐標(biāo)

利用正則表達(dá)式從GPT4V 的 response 中提取查詢到的元素的 bbox id= 10,17,19, 結(jié)合在 SoM 標(biāo)記中記錄的 json 文件,找到編號 10 的元素坐標(biāo)"10":{"x":"40","y":"80","w":"16","h","10","center_x":"80","center_y":"21"}

class GPT4VRecognize
     def get_location(self, query):  
         coco_json='./coco.json'
         withopen(coco_json,'r') as file: 
             content =file.read() 
         matches=re.findall(r'd+',gpt4v_response_content)
         num=-1
         iflen(matches)>0:
             num=matches[0]
         data = json.loads(json_str) 
         center_x = data[num]["center_x"]
         center_y = data[num]["center_y"]
         return center_x,center_y
  

4.Playwright操作頁面

Playwright是一個(gè)非常強(qiáng)大的操作瀏覽器的工具,這里因?yàn)榍懊嬉呀?jīng)通過 GPT4V 識別了圖片,所以我們主要通過 坐標(biāo) 的方式來控制元素,不再需要解析Dom 來控制,主要的包括,點(diǎn)擊,雙擊,鼠標(biāo)拖動(dòng),輸入,截圖等:

class Actions:
    page=None
    __init__(self,url):
        global page
        browser = playwright.chromium.launch(channel="chrome",headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto("http://oa.jd.com/")
    def mouse_move(self,x,y):
        page.mouse.move(self,x,y)
    def screenshot(self):
        page.screenshot()
    def mouse_click(self,x,y):
        page.mouse.click(self,x,y)
    def input_text(self,x,y,text):
        page.mouse.click(self,x,y)
        page.keyboard.type(text) 
    def mouse_db_click(self,x,y):
    def select_option(self,x,y,option):
    ......

5.使用 AutoGen編排

AutoGen是一個(gè)代理工具,它能夠代理多個(gè) LLM在不同會(huì)話間切換,能夠自動(dòng)的調(diào)用預(yù)定的函數(shù),并協(xié)調(diào)這些 LLM 完成任務(wù)。

在上面的程序中,實(shí)現(xiàn)了:眼睛:通過 GPT4V 來識別元素;手:通過 Playwright 來做各種操作;后面需要通過一個(gè)大腦來協(xié)調(diào)手、眼完成任務(wù),這里通過 GPT4+AutoGen 來實(shí)現(xiàn)大腦的協(xié)同調(diào)度。

config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
assistant= autogen.AssistantAgent(
name="assistant",
system_message=
    """
    You are the orchestrator responsible for completing a task involving the UI window. 
    Utilize the provided functions to take a screenshot after each action. 
    Remember to only use the functions you have been given and focus on the task at hand.
     """,
 llm_config={"config_list": config_list},
)
 user_proxy = autogen.UserProxyAgent(
 name="brain_proxy",
 human_input_mode="NEVER",
 code_execution_config={"work_dir":"coding"},
 max_consecutive_auto_reply=10,
 llm_config={"config_list": config_list},)

action = Actions(url)
gpt4v=GPT4VRecognize()
user_proxy.register_function(
     function_map={
         "get_location": gpt4v.get_location,
         "mouse_move":action.mouse_move,
         "screenshot":action.screenshot,
         "mouse_click":action.mouse_click,
         "mouse_dbclick":action.mouse_dbclick,
         "select_option":action.select_option 
     })
def run(message_ask):
    user_proxy.initiate_chat(assistant,message=message_ask)

if __name__ =="__main__":
    run("通過 輸入erp 'wwww30' 搜索結(jié)果,并檢查是否返回空列表")
 

四、問題和后續(xù)

1.當(dāng)前的主要問題

本文主要拋磚引玉,通過一種完全按人類思維進(jìn)行 UI測試的方式,在實(shí)驗(yàn)過程中還有很多問題待解決。

1. GPT 在中文語境下識別的不太友好,在實(shí)驗(yàn)過程中對中文的 prompt 理解有誤,需要不斷的優(yōu)化 prompt,尤其是頁面中的中文元素。

2. AutoGen 對于處理預(yù)定義的動(dòng)作也會(huì)有問題,需要不斷調(diào)優(yōu)。

3. GPT4V 真的很貴。

2.未來的想法

1. 將每次向 GPT4V請求的圖像識別做本地化處理,結(jié)合現(xiàn)有的一些測試方法,從而減少 Token,縮短執(zhí)行耗時(shí)。

2. 面向業(yè)務(wù)的 GPT需要不斷訓(xùn)練,將系統(tǒng)使用手冊和一有的 PRD 文檔投喂給 GPT,增強(qiáng) gpt 的系統(tǒng)識別和測試能力。

五、參考

1.Set-of-Mark Prompting Unleashes Extraordinary Visual Grounding in GPT-4V?

2.Microsoft AutoGen?

3.GPT-4V-ACT?

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 測試
    +關(guān)注

    關(guān)注

    9

    文章

    6201

    瀏覽量

    131346
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39755

    瀏覽量

    301360
  • GPT
    GPT
    +關(guān)注

    關(guān)注

    0

    文章

    368

    瀏覽量

    16871
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    正面對決GPT-5和Germini-3,DeepSeek-V3.2震撼發(fā)布

    3.2達(dá)到了GPT-5的水平,DeepSeek-V3.2首次將“思考模式(thinking mode)”與工具使用深度整合,成為其下一代 AI 助理(AI
    的頭像 發(fā)表于 12-02 14:10 ?9482次閱讀
    正面對決<b class='flag-5'>GPT</b>-5和Germini-3,DeepSeek-<b class='flag-5'>V</b>3.2震撼發(fā)布

    ARMxy 系列攜手 AI Agent,開啟智能工廠新模式

    ARMxy 系列工業(yè)計(jì)算機(jī),展示 AI Agent 如何在工廠實(shí)現(xiàn)數(shù)據(jù)采集、智能分析、預(yù)測性維護(hù)和自動(dòng)控制,推動(dòng)智能制造與能源優(yōu)化。
    的頭像 發(fā)表于 09-12 15:08 ?543次閱讀

    開源鴻蒙AI Agent TSG正式成立

    鴻蒙 AI Agent TSG(技術(shù)專家組)正式宣布成立,旨在聯(lián)合產(chǎn)學(xué)研力量,共同洞察 Agent 在通信、協(xié)同、自演進(jìn)等方面的技術(shù)趨勢,并規(guī)劃和探索下一代
    的頭像 發(fā)表于 07-28 17:38 ?910次閱讀

    研華工業(yè)AI Agent的發(fā)展態(tài)勢及實(shí)踐思考

    工業(yè) 4.0 風(fēng)起云涌之際,AI Agent 產(chǎn)業(yè)化落地成為各界競逐焦點(diǎn)。研華科技憑借深厚的行業(yè)積淀,勇于創(chuàng)新、積極探索,在企業(yè)級工業(yè) AI Age
    的頭像 發(fā)表于 06-23 09:31 ?1050次閱讀

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+讀《零基礎(chǔ)開發(fā)AI Agent》掌握扣子平臺開發(fā)智能體方法

    收到發(fā)燒友網(wǎng)站寄來的《零基礎(chǔ)開發(fā)AI Agent》這本書已經(jīng)有好些天了,這段時(shí)間有幸拜讀了一下全書,掌握了一個(gè)開發(fā)智能體的方法。 該書充分從零基礎(chǔ)入手,先闡述了Agent是什么,它的基本概念和知識
    發(fā)表于 05-14 19:51

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+Agent的案例解讀

    功能,幫助學(xué)術(shù)用戶能快速提取研究所需信息,提升研究效率。? 2)促進(jìn)學(xué)術(shù)研究 AI 提供的自動(dòng)檢索與解析功能,有助于地研究者快速定位相關(guān)資料,加快研究進(jìn)度。 由此可見,扣子的Agent開發(fā)平臺,不但向用戶提供了開發(fā)的平臺,還向用
    發(fā)表于 05-14 11:23

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+Agent開發(fā)平臺

    Agent開發(fā)平臺上,開發(fā)者可以個(gè)性化地設(shè)計(jì)Agent與用戶的對話頁面,一般包括開場白、預(yù)設(shè)問題、自定義UI組件、數(shù)字人聲音及語音對話等。 7)調(diào)試與校驗(yàn) 調(diào)試與校驗(yàn)功能用于測試
    發(fā)表于 05-13 12:24

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+Agent的工作原理及特點(diǎn)

    如圖2所示。 圖2 提示詞編寫萬能公式 要搭建AI應(yīng)用可分為5個(gè)層次,見圖3所示。 圖3 AI應(yīng)用層次 Agent的能力與特點(diǎn): 以設(shè)置鬧鐘和Agent叫醒服務(wù)的對比為例來說明
    發(fā)表于 05-11 10:24

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+ 入門篇學(xué)習(xí)

    4.智能體具有自主規(guī)劃和行動(dòng)的能力 5.大模型分為3個(gè)層次:基礎(chǔ)層(心臟)、垂直/行業(yè)層(動(dòng)脈)、應(yīng)用層(毛細(xì)血管) 6.AI Agent具備更顯著的去中心化特點(diǎn),能夠充分滿足每個(gè)人獨(dú)特的需求
    發(fā)表于 05-02 09:26

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+關(guān)于AI Agent開發(fā)入門的第一印象與相關(guān)官方文檔和社區(qū)資料的內(nèi)容補(bǔ)充

    今天有幸收到了電子發(fā)燒友寄來的由中國工信出版集團(tuán)和電子工業(yè)出版社聯(lián)合出版的關(guān)于AI Agent開發(fā)的《零基礎(chǔ)開發(fā)AI Agent》的新書,不禁高興雀躍,以下是我拍下的書的頁封和背面:
    發(fā)表于 04-22 18:16

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+初品Agent

    期待中的《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子智能體》終于寄到了,該書由葉濤、 管鍇、張心雨完成,并由電子工業(yè)出版社出版發(fā)行。 全書分為三個(gè)部分,即入門篇、工具篇及實(shí)踐篇。由此可見這是
    發(fā)表于 04-22 11:51

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】總體預(yù)覽及入門篇

    基礎(chǔ)知識有所補(bǔ)充,另外書本后面的案例也會(huì)對Ai的應(yīng)用產(chǎn)生一些啟發(fā). 首先老規(guī)矩,先看一下目錄結(jié)構(gòu) 包含3大主題: 入門篇:介紹了Agent的概念、發(fā)展、與Prompt和Copilot的區(qū)別
    發(fā)表于 04-20 21:53

    請求贈(zèng)閱《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子智能體》

    博主好!致敬葉濤 管鍇 張心雨三位AI具身智能-智能體方面的專家、導(dǎo)師! 《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子智能體》一不懂編程的多數(shù)大眾也可以開發(fā)
    發(fā)表于 04-10 12:16

    《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子智能體》

    《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子智能體》是一本為普通人量身打造的AI開發(fā)指南。它不僅深入淺出地講解了Agent的概念和發(fā)展
    發(fā)表于 03-18 12:03

    名單公布!【書籍評測活動(dòng)NO.59】零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子智能體

    的新技術(shù)實(shí)踐指南,助你把握科技大勢。 ▊《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子智能體》 葉濤管鍇張心雨 著 不懂編程也可以開發(fā)Agent
    發(fā)表于 03-10 16:29