PyLinuxAuto 是一个用于 Linux 桌面 GUI 自动化测试的 Python 模块,支持多种元素定位方法和键鼠操作。
官方文档:https://youqu.uniontech.com/
pip3 install pylinuxauto
import pylinuxauto
# 单击
pylinuxauto.click()
# 双击
pylinuxauto.double_click()
# 右键点击
pylinuxauto.right_click()
安装 PyLinuxAuto 之后,在终端输入 sniff
启动 AT-SPI Browser:
shell
mikigo@mikigo-PC:~$ sniff
查看应用的标签
在 sniff 里面可以看到系统中已启动的应用,点击应用名称前面的三角形图标,可以展开应用的标签,所有标签以 tree 的形式展示,对应应用里面的父窗口和子窗口。
获取元素控件的标签名称
首先,为了方便查看元素控件对应的位置,建议现在上方工具栏点击 Actions
,然后勾选 Hightlight Items
,这样在 sniff 中鼠标选中元素标签的时候,应用中会有相应的光标锁定。
在 sniff 里面点击进入应用的标签 tree 中后,点击相应的元素控件,在工具下方,会展示元素控件的 Name
,这个就是标签名称。
在 tree
中有些地方是空白的或者是 Form,是因为开发人员在添加标签的时候没有添加,或者有些父窗口不需要添加,这种在实际业务中是不影响的,我们只要保证自动化测试用例中,要用到的元素都添加了标签即可。
通过 Accessibility
路径查找并操作元素,路径名称可以通过 sniff
命令查看。
import pylinuxauto
pylinuxauto.find_element_by_attr_path("/dde-doc/Btn_文件管理器").click()
在元素识别的过程中,我们需要截取某个元素的小图进行识别,比如截取播放按钮:
那么实际上,元素定位的问题就转换为,将截图的小图(play_btn
)拿到整个屏幕的大图(screen
)中去做匹配,如果匹配成功,返回小图在大图中的坐标( x, y )即可。
传入一张目标图片的路径,自动在当前屏幕中查找目标图片。
Client 代码:
python
import pylinuxauto
from pylinuxauto.config import config
# 配置IMAGE服务端IP
config.IMAGE_SERVER_IP = "192.168.0.1"
# 获取元素对象
pylinuxauto.find_element_by_image("~/Desktop/template.png")
对目标图像进行操作:
# 本地路径
pylinuxauto.find_element_by_image("~/Desktop/template.png").click()
pylinuxauto.find_element_by_image("~/Desktop/template.png").right_click()
pylinuxauto.find_element_by_image("~/Desktop/template.png").double_click()
pylinuxauto.find_element_by_image("~/Desktop/template.png").center()
pylinuxauto.find_element_by_image("~/Desktop/template.png").result
图片资源为远程 URL
:
from pylinuxauto.config import config
config.IMAGE_BASE_URL = "http://10.8.12.24/image_res/deepin-music/"
# 简写形式,@ 符号代表 IMAGE_BASE_URL
pylinuxauto.find_element_by_image("@1.png").result
# 全 URL
pylinuxauto.find_element_by_image("http://10.8.12.24/image_res/deepin-music/1.png").result
使用传入需要识别的文本字符,使用 OCR 在当前屏幕中识别。
import pylinuxauto
from pylinuxauto.config import config
config.OCR_SERVER_IP = "192.168.0.1"
pylinuxauto.find_element_by_ocr("中国").click()
对于一些文字的场景非常适用,可以用于元素定位操作
pylinuxauto.find_element_by_ocr("中国").click()
pylinuxauto.find_element_by_ocr("中国").right_click()
pylinuxauto.find_element_by_ocr("中国").double_click()
pylinuxauto.find_element_by_ocr("中国").center()
pylinuxauto.find_element_by_ocr("中国").result
在 UI 设计图中我们是可以获取到元素按钮相对于应用边框的距离的,然后我们可以获取到应用界面在当前屏幕中的位置及应用窗口的大小,示意图如下:
在 UI 设计稿上点击【播放所有】图标,然后移动鼠标就就可以看到上图的参考线及数据;
通过将目标按钮相对于应用窗口的位置信息配置,然后动态获取应用窗口在当前屏幕中的信息,最后计算出目标按钮在当前屏幕中的位置。
from pylinuxauto import Ele, Ref
playall_btn = Ele(xy=(290, 80), ref=Ref.LEFT_TOP, appname="deepin-music", alias="播放全部")
xy
是该元素按钮的相对与参考系的 (x, y)
的距离;
ref
是配置该元素的参考系,Ref
是参考系的类对象:
Ref.LEFT_TOP
左上;Ref.LEFT_BOTTOM
左下;Ref.RIGHT_TOP
右上;Ref.RIGHT_BOTTOM
右下;参考系的选取标准
:拉动改变窗口大小时,元素按钮相对于参考系位置是不变的;
appname
应用的包名;
alias
可选,元素的别名;
pylinuxauto.find_element_by_ref(playall_btn).click()
pylinuxauto.find_element_by_ref(playall_btn).right_click()
pylinuxauto.find_element_by_ref(playall_btn).double_click()