在UI自动化测试中,一切操作的都是从应用启动开始的,而在Linux桌面应用自动化测试中,我们启动应用的方法有多种,下面做一个简单的介绍:
1.使用dogtail启动
dogtail提供了应用启动的方法,在utils库中,使用run方法启动:
首先导入方法:
from dogtail.utils import *
调用run方法
run('deepin-music')
即可启动音乐
这种方法的优点是采用进程的方式直接启动,不依赖与UI,无论桌面或任务栏上是否存在应用图标,都可以正常启动。
但是在实际项目中,仍然存在一个问题,
如果使用ssh远程调用,或者Jenkins中执行测试脚本的时候,在sniff中会出现找不到应用,经过分析,可能是因为使用这种方法启动的时候,实际是采用一个子进程启动了应用,dogtail无法识别到。
2.从任务栏启动
使用dogtail点击任务栏上的应用图标
通常有两种方法:
(1)使用dogtail点击任务栏上的应用图标。
(2)已知应用图标在任务栏上的位置,然后使用鼠标点击对应坐标。
第二种方法的缺点是位置必须固定,如果移动位置就不行了,而使用第一种方法,无论位置在哪里,只要图标在任务栏上存在即可。
3.点击桌面图标启动
桌面图标目前是采用图像识别技术,定位到应用图标的坐标,然后通过pyauogui进行点击操作。
详细技术方案可以参考我的另外两篇博客:
4.从启动器启动(俗称开始菜单)
启动中启动的实现逻辑实际和任务栏上启动差不多。
首先,需要使用鼠标点击任务栏上的启动器图标,或者键盘super键,将启动器呼出来,
然后,在启动器中点击对应的图标,
但是这里有个问题,启动器中的应用列表,一页展示不完,所以如果我们要点击的应用图标不在第一页怎么办,通常解决方案有两种:
(1)需要进行向下滑动,这里就涉及到相应的识别方案,判断如果不在第一页就往下滑动翻页。
(2)启动器提供搜索的功能,输入应用名称搜索,然后进行点击。
从实际操作中来看,采用第二种方法的效率会高一点。
5.终端命令启动
在python中,使用os.popen()或os.system()或者subprocess.Popen(),实现命令行启动,比如:
import os
os.popen('deepin-music')
这种方式启动是比较简单的,但是在实际项目中,仍然存在远程执行脚本的时候,dogtail无法识别的问题。
总结
以上几种方法,各有优缺点,在实际项目中:
(1)如果需要在Jenkins中做持续集成,建议使用第二种任务栏启动的方法。
(2)如果不会采用远程执行的,建议采用第一种或者最后一种方案。
(3)第三种和第四种启动方法,通常在测试用例中会涉及到,所以偶尔会用。