?在講全分辨率之前,先來說一下為什么我們平時(shí)寫的腳本不能實(shí)現(xiàn)全分辨率。
(1)腳本中含有固定坐標(biāo)值城看。
看下圖:
這是模擬兩個(gè)屏幕,一個(gè)“小屏”杏慰,一個(gè)“大屏”,假設(shè)我要點(diǎn)擊上面的腳本app(云掃碼)炼鞠,小屏點(diǎn)擊的坐標(biāo)是(x,y)缘滥,大屏點(diǎn)擊的坐標(biāo)是(x1,y1),如果我們比較x和x1谒主,或者y和y1朝扼,很明顯兩者數(shù)值是不相等的。
那么當(dāng)我們用tap x,y去點(diǎn)擊小屏上的app是可以點(diǎn)到霎肯,但是點(diǎn)擊大屏上的app擎颖,由于坐標(biāo)不對(duì)榛斯,是點(diǎn)擊不到。這樣按照小屏寫的腳本只能在小屏上使用搂捧,按照大屏寫的腳本只能在大屏上使用驮俗,所以腳本不通用。
注:當(dāng)屏幕長寬比一樣時(shí)允跑,是可以通過縮放比例控制坐標(biāo)值王凑,實(shí)現(xiàn)通用。
(2)腳本中使用了圖色命令
說一下圖色命令包括哪些聋丝,看下圖:
圖片中的命令都屬于圖色命令索烹,只要你的腳本中用到了這些命令,基本上就不能實(shí)現(xiàn)全分辨率弱睦。
還是拿之前的圖為例:
同樣一個(gè)圖片百姓,看起來很像,但是當(dāng)我們放大來看况木,會(huì)發(fā)現(xiàn)兩者的像素顏色排列是差別很大的垒拢。
而我們的圖色命令是基于像素顏色和坐標(biāo)的比對(duì)實(shí)現(xiàn)的,當(dāng)兩者差別很大的時(shí)候焦读,即使看著很像子库,本質(zhì)上已經(jīng)是兩個(gè)“完全不同”的圖了,自然也就無法使用圖色命令矗晃。
(3)不同設(shè)備(不同系統(tǒng)版本)
同一個(gè)圖片仑嗅,在不同的設(shè)備或者不同系統(tǒng)版本上,顯示的時(shí)候是有細(xì)微差別的张症。這個(gè)差別我們?nèi)庋鄯直姹容^難仓技,但是對(duì)于圖色命令是很容易區(qū)分,這也是我們?cè)谑褂脠D色命令的時(shí)候俗他,會(huì)把相似度稍微調(diào)低一點(diǎn)脖捻。
說完不能實(shí)現(xiàn)全分辨率的原因以后,我們說一下全分辨率怎么寫兆衅。
(1)能寫全分辨率的前提
你要操作的app必須有xml地沮,不能是游戲app,對(duì)于蘋果ios系統(tǒng)的xml我不熟悉羡亩,這里暫時(shí)不做討論摩疑。
(2)什么是xml
具體描述你可以查看百度百科,簡單點(diǎn)說就是屏幕上的各個(gè)元素的代碼形式畏铆。
我們通過元素抓取可以看到雷袋,屏幕是由一個(gè)個(gè)小方塊組成,這些方塊就是界面的組成元素辞居,我們稱為“節(jié)點(diǎn)”楷怒。
節(jié)點(diǎn)體現(xiàn)在代碼上就是node
node分為兩種形式:
①含有子節(jié)點(diǎn)的?子節(jié)點(diǎn)
②不含有子節(jié)點(diǎn)的?
node的屬性和屬性值
一個(gè)node節(jié)點(diǎn)有什么功能蛋勺,在什么位置,都是由以上這些屬性決定的鸠删。這里面我標(biāo)紅兩個(gè)我們會(huì)用到的抱完。
①text屬性,也就是文字冶共,通常我們要提取一個(gè)界面上的文字乾蛤,就是提取這個(gè)text屬性值
②bounds屬性,坐標(biāo)范圍捅僵,當(dāng)我們要點(diǎn)擊某個(gè)內(nèi)容家卖,只要知道它的坐標(biāo)范圍,點(diǎn)擊這個(gè)范圍值就可以了庙楚。
(3)關(guān)于xml的提取
目前有三個(gè)方法上荡,山海插件的getuixml命令,jsd插件馒闷,隱藏的Element命令酪捡,我個(gè)人比較喜歡山海插件的getuixml命令,按鍵自帶的纳账,缺點(diǎn)是獲取xml需要的時(shí)間比較長逛薇。
(4)從xml里面提取節(jié)點(diǎn)屬性值。
除了自帶的節(jié)點(diǎn)提取命令以外疏虫,還有可以看看我前兩天發(fā)的文章:關(guān)于字符串提取的方法永罚。