鬼谷子论坛一波中特|一波中特图库 ?
實驗:UIAutomation使用中的問題
作者:強官濤   類型:Python開發    類別:實驗   日期:2019-05-28    閱讀:1539 次   消耗積分:0 分

前面以計算器為例子,UIAutomation可以輕松實現。但在實際操作中,不可能就能得到所有元素的唯一屬性,很多時候是什么都沒有,或者是大家都用一樣的名字。這樣定位就不容易實現。

以QQMusic為例,選擇歌手后會出現歌曲列表。但是,通過UISpy根本找不到唯一的屬性,如圖x-x所示。


20190528_144208_053.jpg




20190528_144219_487.jpg

(圖x-x 定位第一首歌曲


從上圖可以看出,第一首歌只提供一個processId的屬性,但是該屬性在QQmusic里幾乎所有元素都一樣,所以不能用來定位。該問題提供一種解決方案,拖動UIAutomation界面的Properties下拉滾動條,可以看到出現元素的坐標,那么是否可以用過坐標來定位呢?如圖x-xs所示。


20190528_144230_115.jpg

(圖x-x 元素坐標


在UIAutomation里面提供一個click(x,y,waittime)的方法。我們可以嘗試坐標定位。代碼如下:


65import subprocess

import uiautomation

import time

#打開QQMusic

subprocess.Popen('C:\Program Files (x86)\Tencent\QQMusic\QQMusic.exe')

time.sleep(2)

#定位主界面

musicwindow = uiautomation.WindowControl(searchDepth=1, ProcessId='6092 (QQMusic)')

#定位輸入框

edit = uiautomation.EditControl(searchFromControl = musicwindow, foundIndex = 1,ProcessId='7148 (QQMusic)')

#將光標定位到輸入框中

edit.Click()

#輸入歌手,{ENTER}是模擬鍵盤回車

edit.SendKeys('樊凡{ENTER}')

time.sleep(2)

#點擊指定坐標

uiautomation.Click(435,330)


結果發現,并不能播放。在歌曲中有個播放按鈕,需要定位播放按鈕的位置,提供一個簡單獲取位置坐標的方法,可以通過截圖整個屏幕的方式保存圖片。然后使用畫圖的方式打開。這樣就可以在左下方獲取播放按鈕的坐標,如圖x-x所示。


20190528_144241_605.jpg

(圖x-x 播放按鈕坐標


修改Click()中坐標,重新運行程序,就可以實現播放。

當然,程序本身提供全部播放,也可以將代碼改為點擊全部播放按鈕,可以通過UISpy獲取元素識別特征,然后調用。代碼如下:


edit.SendKeys('樊凡{ENTER}')

time.sleep(2)

musicwindow.ButtonControl(Name='播放全部').Click()


當然,坐標定位不是最好的解決問題的方式,想要解決上面這種問題,可以嘗試多級父子節點關系的查找定位,但這種方式肯定會非常復雜!


下期推送:Sikuli簡介及使用方法



為了答謝大家對蝸牛學院的支持,蝸牛學院將會定期對大家免費發放干貨,敬請關注蝸牛學院的官方微信。


20190320_095757_834.jpg


版權所有,轉載本站文章請注明出處:蝸牛學院在線課堂, http://www.gpkmad.shop/note/316
上一篇: 資訊:“9107”的工作干了兩年多,我還怕啥蝸牛學院的“996”呢?
下一篇: 訪談:她說:就業了我才終于明白,為什么蝸牛學院每一階段都要更換任課老師
提示:登錄后添加有效評論可享受積分哦!
鬼谷子论坛一波中特 股票涨跌由什么决定视频 最好的股票配资平台排名 信富配资 湖北快三基本走势图 秒速时时彩稳赚技巧 老版欢乐真人麻将下 浙江十一选五开奖结 2010年上证指数走势图 联美配资 最新内蒙古11选5