?在講全分辨率之前,先來說一下為什么我們平時寫的腳本不能實現全分辨率。
(1)腳本中含有固定坐標值。
看下圖:
這是模擬兩個屏幕,一個“小屏”,一個“大屏”,假設我要點擊上面的腳本app(云掃碼),小屏點擊的坐標是(x,y),大屏點擊的坐標是(x1,y1),如果我們比較x和x1,或者y和y1,很明顯兩者數值是不相等的。
那么當我們用tap x,y去點擊小屏上的app是可以點到,但是點擊大屏上的app,由于坐標不對,是點擊不到。這樣按照小屏寫的腳本只能在小屏上使用,按照大屏寫的腳本只能在大屏上使用,所以腳本不通用。
注:當屏幕長寬比一樣時,是可以通過縮放比例控制坐標值,實現通用。
(2)腳本中使用了圖色命令
說一下圖色命令包括哪些,看下圖:
圖片中的命令都屬于圖色命令,只要你的腳本中用到了這些命令,基本上就不能實現全分辨率。
還是拿之前的圖為例:
同樣一個圖片,看起來很像,但是當我們放大來看,會發現兩者的像素顏色排列是差別很大的。
而我們的圖色命令是基于像素顏色和坐標的比對實現的,當兩者差別很大的時候,即使看著很像,本質上已經是兩個“完全不同”的圖了,自然也就無法使用圖色命令。
(3)不同設備(不同系統版本)
同一個圖片,在不同的設備或者不同系統版本上,顯示的時候是有細微差別的。這個差別我們肉眼分辨比較難,但是對于圖色命令是很容易區分,這也是我們在使用圖色命令的時候,會把相似度稍微調低一點。
說完不能實現全分辨率的原因以后,我們說一下全分辨率怎么寫。
(1)能寫全分辨率的前提
你要操作的app必須有xml,不能是游戲app,對于蘋果ios系統的xml我不熟悉,這里暫時不做討論。
(2)什么是xml
具體描述你可以查看百度百科,簡單點說就是屏幕上的各個元素的代碼形式。
我們通過元素抓取可以看到,屏幕是由一個個小方塊組成,這些方塊就是界面的組成元素,我們稱為“節點”。
節點體現在代碼上就是node
node分為兩種形式:
①含有子節點的?子節點
②不含有子節點的?
node的屬性和屬性值
一個node節點有什么功能,在什么位置,都是由以上這些屬性決定的。這里面我標紅兩個我們會用到的。
①text屬性,也就是文字,通常我們要提取一個界面上的文字,就是提取這個text屬性值
②bounds屬性,坐標范圍,當我們要點擊某個內容,只要知道它的坐標范圍,點擊這個范圍值就可以了。
(3)關于xml的提取
目前有三個方法,山海插件的getuixml命令,jsd插件,隱藏的Element命令,我個人比較喜歡山海插件的getuixml命令,按鍵自帶的,缺點是獲取xml需要的時間比較長。
(4)從xml里面提取節點屬性值。
除了自帶的節點提取命令以外,還有可以看看我前兩天發的文章:關于字符串提取的方法。