目录
1. 背景
项目需要,研究了一下Linux下的GUI测试工具:LDTP。GNU LDTP(Linux Desktop Testing Project) 是一个 GNU/ Linux/ Unix 下的 GUI 应用测试工具。支持系统包括:FreeBSD/ Fedora/ Mac/ OpenSUSE/ OpenSolaris/ Windows/ Ubuntu等。本文介绍一下LDTP2的环境搭建,基本使用以及在使用中踩的坑。
2. 环境
- 操作系统:Ubuntu 18.4/ Window7
- LDTP: ldtp2 v3.5.1
- 语言:Python2 >= 2.6; Python3 >= 3.0
3. 安装和使用
1)下载地址
操作系统 | 地址 |
Linux | https://github.com/ldtp/ldtp2 |
Windows | https://github.com/ldtp/cobra/releases |
2)Windows下的安装和使用
a.双击 CobraWinLDTP-4.0.0.msi,按照提示安装完即可。
b.在<安装盘>\Program Files (x86)\VMware\CobraWinLDTP目录下,双击 CobraWinLDTP.exe,启动Server端。
c. 运行-》cmd,输入 Python3,进入Python命令;输入如下命令,如果没有报错,则证明安装成功。
3)Linux下的安装和使用
这里有两种方法。
a. 度娘上都能查到的在线安装方法:
apt-get install ldtp
同样的,安装完成后,导入LDTP,如果没有报错则表示安装成功。
b. 源码安装(这里以作者环境和安装过程为例,均是亲验总结,如有其他环境或问题需要具体分析):
i. 安装完Ubuntu后,缺省无法ssh连接,会出现报错:Permission denied(publickey, password)。修改方法:
- 编辑ssh配置文件: # vi /etc/ssh/sshd_config。去掉如下两个参数的注释,修改参数值:
- PermitRootLogin yes
- StrictModes yes
- 重启ssh服务。# /etc/init.d/ssh restart
ii. 修改apt源。这是由于作者的环境无法直接对接外网镜像源,若能直接连网则可以忽略该步骤。
- # vi /etc/apt/sources.list。全部替换为本地源,这里列举其中部分源信息
deb [trusted=yes] http://本地源IP/本地源路径 bionic main restricted universe multiverse
deb-src [trusted=yes] http://本地源IP/本地源路径 bionic main restricted universe multiverse
- 更新源后升级apt。# apt update -y
iii. 修改gsettings。这里需要在Ubuntu系统中进行修改,不能直接ssh连接修改。
# gsettings set org.gnome.desktop.interface toolkit-accessibility true
# gsettings set org.gnome.desktop.a11y.applications screen-reader-enabled true
补充:gsettings的部分命令
# gsettings list-schemas | grep interface
# gsettings list-keys org.gnome.desktop.interface | grep toolkit
# gsettings get org.gnome.desktop.interface toolkit-accessibility
iv. 安装LDTP
如若直接按照github上的安装过程,是无法使用的(这里被坑了好久),首先需要安装如下一些依赖包。
# apt install -y python3-pip
# apt install -y python3-setuptools
# pip3 install twisted -i <本地源> --trusted-host <本地源IP>
# apt install -y python-ldtp
v. 修改源码。这是因为Python3中已经没有unicode()这个方法了,而LDTP的部分源码是基于Python2进行开发的。为了解决这个兼容性,只能进行源码修改,否则无法获取中文字符。
# vi /usr/local/lib/python3.6/dist-packages/ldtp-3.5.1-py3.6.egg/ldtp/__init__.py
将gettextvalue()的返回从unicode()改为str():
vi. 重启Ubuntu。一定要记得做完上述的修改后,重启操作系统哦~~~
vii. 基本使用方法同windows。
- mouseleftclick('frm0', 'btn关闭') # 点击frm0中的“关闭”按钮
- gettextvalue('frm0', 'txt0') # 获取frm0中文本框txt0中的文本
- setcursorposition('frm0', 'txt0', 1) # 将光标放在frm0中文本框txt0的首字符位置
4. 踩到的“坑”
1)在Windows中没有启动Server端。出现报错:ConnectionRefusedError: [WinError 10061]
2)在Windows缺省安装之后,导入LDTP包是正常的,但是使用方法getwindowlist()却出现如下报错:
TypeError:unsupported operand type(s) for *: 'map' and 'list'
报错的代码只是一个日志记录,并不影响功能使用,所以将这里注释后,重新导入LDTP包即可。
3)部分方法在使用时出现有这样的报错:Unable to get editable text 和 Text cannot be entered into object. 。暂时还没有找到解决方法,怀疑是由于元件有属性没有设置正确导致的。
4)按照说明文档中进行远程连接# ldtp -s 时,报错: ModuleNotFoundError: No module named 'xmlrpc_daemon'。暂时没有找到解决办法。不清楚是没有使用对远程连接场景还是确实有错误。
5. 参考资料
https://ldtp.freedesktop.org/ldtp-tutorial.pdf
https://ldtp.freedesktop.org/user-doc/d7/d25/a00182.html#Syntax
https://www.cnblogs.com/backpacker/p/10945514.html