UIAutomation使用中的问题
作者:强哥   类别:Python开发    日期:2019-05-28 14:49:38    阅读:2856 次   消耗积分: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.woniunote.com/article/313
上一篇: “9107”的工作干了两年多,我还怕啥蜗牛学院的“996”呢?
下一篇: 她说:就业了我才终于明白,为什么蜗牛学院每一阶段都要更换任课老师
提示:登录后添加有效评论可享受积分哦!
最新文章
    最多阅读
      特别推荐
      回到顶部