亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種用于Web UI自動化測試腳本修復的網(wǎng)頁元素重定位方法

        2023-10-10 07:36:30陳俊生彭莉芬
        長春師范大學學報 2023年8期
        關(guān)鍵詞:腳本控件網(wǎng)頁

        陳俊生,彭莉芬

        (安徽電子信息職業(yè)技術(shù)學院,安徽 蚌埠 233030)

        0 引言

        為了保證更好的用戶體驗和反數(shù)據(jù)爬取的需求,Web UI頁面更新迭代速度非???其直接后果就是導致原有的測試腳本失效[1]。此時重新生成測試腳本代價昂貴,因此修復舊的測試腳本集是最佳選擇[2-3]。Web UI頁面更新迭代帶來的測試腳本失效問題,其實質(zhì)還是由于網(wǎng)頁元素結(jié)構(gòu)改變所造成的網(wǎng)頁元素定位失效問題。網(wǎng)頁元素定位方法分為基于DOM樹、基于模板匹配和基于機器視角三大類[4-6]。目前被廣泛應(yīng)用于自動化測試的方法主要是基于DOM樹的網(wǎng)頁元素定位方法,通過對DOM樹的元素進行識別和定位來完成測試腳本的生成和修復工作。

        Selenium是一個基于DOM樹的Web應(yīng)用程序自動化測試工具[7],測試直接運行在瀏覽器中可以最大限度模擬用戶的實際操作,支持XPath、CSS選擇器和元素屬性等多種網(wǎng)頁元素定位方法。Selenium IDE是其中一個工具,該工具除了可以編輯和調(diào)試測試以外,還可以錄制和回放測試。在Web UI自動化測試腳本修復方面,多種基于Selenium IDE錄制、回放功能和新舊版本W(wǎng)eb UI頁面DOM樹的網(wǎng)頁元素重定位方法被提出[5,8-9],取得了不錯的效果,但也存在不足。例如現(xiàn)有方法普遍是對新舊版本W(wǎng)eb UI頁面DOM樹本體進行操作,運算量大,耗時較長,并且存在一定的誤定位。為了應(yīng)對上述問題,本文利用新舊版本W(wǎng)eb UI頁面DOM樹的差異對現(xiàn)有方法進行改進,設(shè)計了一種基于優(yōu)化差異DOM樹的網(wǎng)頁元素重定位方法,目的在于優(yōu)化現(xiàn)有的算法規(guī)則,以減少網(wǎng)頁元素重定位的運算量,降低誤定位率。

        1 基于優(yōu)化差異DOM樹的網(wǎng)頁元素重定位方法模型構(gòu)建

        本文提出基于優(yōu)化差異DOM樹的網(wǎng)頁元素重定位方法模型,如圖1所示。

        圖1 基于優(yōu)化差異DOM樹的網(wǎng)頁元素重定位方法模型

        其核心思想就是利用新舊版本W(wǎng)eb UI頁面 DOM樹的差異和舊版測試腳本在新版本頁面上回放所生成錯誤測試報告中的失效XPath路徑,最大限度地縮小網(wǎng)頁元素重定位范圍,通過一系列算法的提出,最終實現(xiàn)失效腳本對應(yīng)網(wǎng)頁元素快速、準確重定位。具體來說,在Web UI迭代開發(fā)的過程中,首先利用Selenium IDE錄制舊版Web UI頁面的測試腳本,當Web UI發(fā)生更新時,先獲取舊版測試腳本在新版頁面上回放的錯誤測試報告,并提取報告中失效的XPath路徑信息;然后通過新舊版本W(wǎng)eb UI頁面的DOM樹進行差異比較,構(gòu)造差異DOM樹,并利用失效腳本中的XPath路徑信息對差異DOM樹進行減枝優(yōu)化;最后通過優(yōu)化以后的差異DOM樹并結(jié)合網(wǎng)頁元素XPath路徑生成算法,提取出可用于失效腳本對應(yīng)網(wǎng)頁元素重定位的有效XPath路徑,進而幫助測試人員快速、準確地進行測試腳本修復。

        模型構(gòu)建過程主要分為新舊版本W(wǎng)eb UI頁面 DOM樹的序列化表示、構(gòu)造差異DOM樹、差異DOM樹的優(yōu)化及網(wǎng)頁元素的重定位四個部分。

        1.1 新舊版本W(wǎng)eb UI頁面DOM樹的序列化表示

        DOM樹可以看作根據(jù)HTML和XML文檔所形成的一棵對象節(jié)點樹[10]。一個Web UI頁面可以用一棵完整的DOM樹來表示。在一棵DOM樹中,各節(jié)點的位置可表示為從DOM樹的根節(jié)點到此節(jié)點所經(jīng)過的所有節(jié)點標簽組成的序列[11],則一個葉子節(jié)點完整的樹路徑如式(1)所示。

        L=(c,s1,s2,…,sn,w1,w2,…,wm),

        (1)

        其中,c表示DOM樹中該葉子節(jié)點路徑出現(xiàn)的總次數(shù);(s1,s2,…,sn)表示該葉子節(jié)點路徑所有標簽(含屬性)所組成的序列,(w1,w2,…,wm)表示該葉子節(jié)點路徑出現(xiàn)的位置。

        由式(1)可知,當某一Web UI頁面發(fā)生更新時,新舊版本W(wǎng)eb UI頁面所對應(yīng)的DOM樹可以分別表示成由上述一系列樹路徑標簽序列所組成的集合,記為T0和T1。

        T0={L01,L02,…,L0i},

        (2)

        T1={L11,L12,…,L1i}.

        (3)

        1.2 構(gòu)造差異DOM樹

        因為差異DOM樹是通過比較新舊版本W(wǎng)eb UI頁面DOM樹的差異而生成的對象節(jié)點樹,所以差異DOM樹對應(yīng)的樹路徑必然位于T0和T1的對稱差集中,記為Td。

        Td={x|x∈T0∪T1,x?T0∩T1}.

        (4)

        接下來就是利用Td來構(gòu)造新舊版本W(wǎng)eb UI頁面的差異DOM樹。由于本文方法是針對同一Web UI頁面框架及內(nèi)容更新所引起的自動化測試腳本失效問題,通過大量的實例研究,同一Web UI頁面的更新大體可以分為以下六種類型:①頁面控件外觀改變;②頁面控件位置改變;③頁面控件內(nèi)容改變;④頁面控件標簽層級變動;⑤增加頁面控件;⑥刪除頁面控件。以上各種更新無論是通過CSS來控制頁面的改變,還是對節(jié)點標簽和屬性直接修改,又或者是通過嵌入HTML的JavaScript方式來修改,正常的開發(fā)者由于其開發(fā)習慣或為了保證后續(xù)的可維護性,對頁面進行改版時都會遵循相似的原則,從DOM樹的角度來看,改版前后發(fā)生改變的頁面元素所對應(yīng)的樹路徑中,包含相同id屬性串或者class屬性串(如果沒有id屬性)的節(jié)點必然具有公共的雙親節(jié)點。這里需要注意的是,當Web UI頁面發(fā)生類型⑤和⑥的更新,即增加和刪除頁面控件時,相關(guān)節(jié)點是沒有公共雙親節(jié)點的,其自身的雙親節(jié)點即為公共雙親節(jié)點。

        為了提高后續(xù)網(wǎng)頁元素重定位的效率,在差異DOM樹構(gòu)造過程中,具有公共雙親節(jié)點的樹路徑需要被掛到相同節(jié)點下。則構(gòu)造差異DOM樹的核心問題即轉(zhuǎn)化為如何從差異DOM樹路徑集合Td中找出所有含相同id屬性串或者class屬性串節(jié)點的公共雙親節(jié)點,獲取公共雙親節(jié)點的具體處理過程見算法1。

        算法1 獲取公共雙親節(jié)點算法

        Input:差異DOM樹路徑序列Tdlist

        Output:Tdlist中所有含有相同id|class屬性串節(jié)點的公共雙親節(jié)點序列PNode

        PNode? ? //初始化結(jié)果集合

        for i in range(Tdlist.length) do

        Ssequence? ?

        Ssequence ← Tdlist[i].S //獲取標簽(含屬性)的序列

        for tag in Ssequence do

        node ← find(tag, id|class) //獲取包含id|class屬性串的標簽節(jié)點

        if node.parents ? PNode then

        PNode ← node.parents //保存

        end if

        end for

        end for

        return PNode //輸出結(jié)果

        結(jié)合算法1的結(jié)果PNode和Td即可完成差異DOM樹的構(gòu)造,例如④和⑤兩種類型更新對應(yīng)的差異DOM樹,如圖2所示。

        圖2 局部差異DOM樹構(gòu)造

        圖2中Root表示差異DOM樹根節(jié)點,PNode1和PNode2表示公共雙親節(jié)點,contain id1和contain id2表示含有id1和id2屬性的節(jié)點,Leaf Node1和Leaf Node2表示葉子節(jié)點,從Root開始,左子樹對應(yīng)的是類型⑤的更新,右子樹對應(yīng)的是類型④的更新。

        此時的差異DOM樹路徑集合記為Td0,Td0和Td的結(jié)構(gòu)類似,但在(w1,w2,…,wm)即葉子節(jié)點路徑出現(xiàn)的位置上有顯著差異。

        1.3 差異DOM樹的優(yōu)化

        由差異DOM樹的構(gòu)造過程可知,其中包含了所有更新類型對應(yīng)網(wǎng)頁元素正確及失效的子樹分支,為了進一步提高后續(xù)網(wǎng)頁元素重定位的精度和效率,需要對差異DOM樹進行必要的優(yōu)化。本文提出了一種利用Selenium IDE錄制和回放功能的差異DOM樹剪枝優(yōu)化算法,將失效的XPath路徑對應(yīng)的子樹分枝從差異DOM樹中移除,以進一步縮小后續(xù)網(wǎng)頁元素重定位的范圍。為了描述和處理的方便,錯誤測試報告中失效的XPath路徑信息也要先將其表示成Td0類似的結(jié)構(gòu),記為Te。

        Te={Le1,Le2,…,Lex}.

        (5)

        差異DOM樹剪枝優(yōu)化算法的具體處理過程見算法2。

        算法2 差異DOM樹剪枝優(yōu)化算法

        Input:此時差異DOM樹路徑序列Td0list,錯誤樹路徑序列Telist

        Output:Td0list中可以用于腳本修復的正確樹路徑序列Ttlist

        Ttlist ? ? //初始化結(jié)果集合

        for i in range(Td0list.length) do

        wseq ? ?

        wseq←Td0list[i].S //獲取輸入集中的標簽序列

        for path in Telist do //遍歷

        if path.s ∈ wseq then // 存在相同標簽序列

        Ttlist ←removepath(Td0list,path) //剪枝

        end if

        end for

        end for

        return Ttlist //輸出結(jié)果

        1.4 網(wǎng)頁元素的重定位

        失效測試腳本對應(yīng)網(wǎng)頁元素的重定位問題,其實質(zhì)就是從經(jīng)過優(yōu)化的差異DOM樹(記為Tt)中生成可以用于測試腳本修復的正確XPath路徑,然后替換或刪除掉失效腳本中的錯誤XPath路徑,即可完成測試腳本的修復。由1.2節(jié)的分析可知,Web UI的更新可以分為頁面控件外觀改變、頁面控件位置改變、頁面控件內(nèi)容改變、頁面控件標簽層級變動、頁面控件增加和頁面控件刪除六種類型。前五種類型的更新所對應(yīng)測試腳本修復問題是相同的,只需提取正確的XPath路徑并替換失效腳本中的錯誤路徑即可,第六種類型的更新則需要提取其對應(yīng)的XPath路徑并從失效的腳本中剔除。

        本文采用DFS與優(yōu)化差異DOM樹相結(jié)合的網(wǎng)頁元素XPath路徑生成算法。采用深度優(yōu)先搜索遍歷優(yōu)化差異DOM樹各子樹中的所有子節(jié)點,通過記錄標簽名和位置值生成所需的Xpath路徑,并結(jié)合舊版DOM樹的樹路徑序列來判定生成的Xpath路徑在Web UI測試腳本修復過程中的處理方式(替換或刪除)。網(wǎng)頁元素XPath路徑生成算法的具體處理過程見算法3。

        算法3 網(wǎng)頁元素Xpath路徑生成算法

        Input:優(yōu)化的差異DOM樹路徑序列Ttlist,舊版Web UI DOM樹路徑序列T0list

        Output:Ttlist中可以用于腳本修復的Xpath路徑序列Xlist1和Xlist2

        function DFS_XPATH(tseq) //遍歷標簽序列中所有的標簽節(jié)點,生成XPath路徑

        tag_xpath ? ‘//’

        position ? 0

        for node ∈ tseq do

        Tag_name ← node. Tag_name

        tag_xpath ← tag_xpath + Tag_name + ‘[’ + position + ‘]’

        position ← position + 1

        end for

        return tag_xpath

        end function

        Xlist1,Xlist2 ? ? //初始化結(jié)果集合

        for i ∈range(Ttlist.length) do

        Tseq? ?

        Tseq ←Ttlist[i].S //獲取各子樹分枝的標簽序列

        if Tseq ? T0list.S then

        Xlist1 ← call DFS_XPATH(Tseq) //需要刪除的XPath路徑

        else

        Xlist2 ← call DFS_XPATH(Tseq) //需要替換的XPath路徑

        end if

        end for

        return Xlist1,Xlist2 //輸出結(jié)果

        2 實驗結(jié)果與分析

        現(xiàn)有可用于Web UI自動化測試腳本修復的網(wǎng)頁元素重定位方法大都是基于新舊Web UI頁面DOM樹本體的操作,幾乎沒有利用新舊Web UI頁面DOM樹的差異比較,即構(gòu)造差異DOM樹來進行網(wǎng)頁元素重定位。因此實驗對比的是現(xiàn)有的沒有構(gòu)造差異DOM樹的方法和本文構(gòu)造差異DOM樹的方法在網(wǎng)頁元素重定位精度和效率上的差異。為了實驗結(jié)果描述和分析的方便,現(xiàn)有的方法記為Original DOM,本文提出的方法記為Improved DOM。

        選取安徽電子信息職業(yè)技術(shù)學院校情智能分析平臺教師用戶界面的v1和v2兩個迭代開發(fā)版本,通過在v2版本中有針對性地設(shè)置四種不同規(guī)模的更新測試樣本(涉及更新的網(wǎng)頁元素分別為120、240、360和480 個)來驗證本文Improved DOM方法的應(yīng)用效果。實驗機器配置為Intel i7-9700K(3.6 G/12 M/8核)、16 G DDR4和256 G SSD固態(tài)硬盤,實驗平臺為Win10+Python3.10。

        為了驗證本文Improved DOM方法在網(wǎng)頁元素重定位精度和運行時間上的改進效果,先利用Selenium IDE錄制了v1版本測試腳本集,然后在v2版本上回放錄制的測試腳本集,并提取出錯誤測試報告中失效的XPath路徑信息,最后分別采用現(xiàn)有Original DOM方法和本文Improved DOM方法進行失效腳本對應(yīng)網(wǎng)頁元素的重定位。實驗得到的平均重定位精度與平均運算時間如表1所示。

        表1 兩種方法重定位精度和運行時間比較

        由表1可以看出,本文Improved DOM方法大幅減少了運行時間,平均運行時間只為Original DOM方法的28%左右,重定位精度也有明顯提升,且隨著更新網(wǎng)頁元素數(shù)量的增加,本文Improved DOM方法重定位精度下降更為緩慢,重定位效果較好。

        3 結(jié)語

        本文針對同一Web UI頁面頻繁更新所帶來的自動測試腳本失效問題,利用新舊版本W(wǎng)eb UI頁面對應(yīng)DOM樹的差異和舊版測試腳本在新版本頁面上回放所生成的錯誤測試報告中的失效XPath路徑,提出了一種可以應(yīng)用于Web UI自動化測試腳本修復的網(wǎng)頁元素重定位方法。該方法通過新舊Web UI頁面差異DOM樹的構(gòu)造和優(yōu)化,大幅減少了網(wǎng)頁元素重定位的運算量,降低了誤定位率,提高了執(zhí)行效率。實驗結(jié)果表明,該方法運行時間短,定位精度高,是一種穩(wěn)定性強、效果較好的可用于Web UI自動化測試腳本修復的網(wǎng)頁元素重定位方法。

        猜你喜歡
        腳本控件網(wǎng)頁
        酒駕
        安奇奇與小cool 龍(第二回)
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        基于CSS的網(wǎng)頁導航欄的設(shè)計
        電子制作(2018年10期)2018-08-04 03:24:38
        快樂假期
        中學生(2017年19期)2017-09-03 10:39:07
        基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
        電子制作(2017年2期)2017-05-17 03:54:56
        網(wǎng)頁制作在英語教學中的應(yīng)用
        電子測試(2015年18期)2016-01-14 01:22:58
        10個必知的網(wǎng)頁設(shè)計術(shù)語
        就這樣玩會VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        精品中文字幕制服中文| 一本一道av无码中文字幕麻豆| 国产探花在线精品一区二区| 亚洲最大天堂无码精品区| 丁香九月综合激情| 亚洲国产av综合一区| 把女人弄爽特黄a大片| 婷婷丁香五月中文字幕| 欧美日韩国产另类在线观看 | 国产午夜福利精品| 国产av一区二区三区在线| 亚洲字幕中文综合久久| 成年免费视频黄网站zxgk| 国产精品自产拍在线18禁| 日本人妻三级在线观看| 国产精品久人妻精品老妇| 日韩人妻无码一区二区三区久久99| 久久久久一| 日本免费视频一区二区三区| 国产精品毛片一区二区三区| 亚洲av色福利天堂| 亚洲乱码中文字幕综合| 风韵丰满熟妇啪啪区99杏| 久久久久人妻一区精品色欧美| 国产成人综合久久久久久| 国产风骚主播视频一区二区 | 国产精品狼人久久久久影院| 久久久久久亚洲AV成人无码国产| 久久av少妇亚洲精品| 久久久亚洲欧洲日产国码二区| 一本之道高清无码视频| 日日噜噜噜夜夜爽爽狠狠视频| 国产精品日韩av一区二区| 免费无码毛片一区二区app | 一级黄色一区二区三区| 久久成人国产精品免费软件 | 日本一区二区不卡精品| 亚洲色大成网站www久久九| 欧美性爱一区二区三区无a| 日本免费看片一区二区三区| 久久视频在线|