大家好,我是DZ,接上篇文章uiautomator2自动化测试系列(一)继续讲解系列课程。如有问题文章底部留言区留言讨论吧!
一、元素定位
首先安装 weditor (UI Inspector),不用原生的uiatomator的原因是uiautomator是独占资源,所以当atx运行的时候uiautomatorviewer是不能用的,为了减少atx频繁的启停,所以推荐使用weditor(调用python-uiautomator2的接口避免的冲突问题)。
pip install -U weditor
Windows系统可以使用命令在桌面创建一个快捷方式
python -m weditor --shortcut
命令行启动
python -m weditor
会自动打开浏览器,输入设备的ip或者***,点击Connect即可。
具体怎么查看设备的ip(打开手机,无线查看)和设备***(终端输入adb devices 查看)。两种方法WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况,看你们具体选择。不过这里推荐使用usb,对比下来速度稍微快点,还可以充电^_^
具体启动浏览器左边一部分如下图
在上图红色输入框中输入你的设备ip或者***,点击connect,就会加载出页面截图(如果没有点击右侧的relaod,要是还没有,查看终端后台是否连接出问题,最后要是还不行,请参照网管万能大法:重启机器,谢谢!)
中间红色框中展示了定位方式(点击对应的测试应用,就会自动生成)
ResourceId定位: d(resourceId="").click()
ext定位 d(text="秒).click()
Description定位 d(description="..").click()
ClassName定位 d(className="").click()
xpath d.xpath().click() 不支持,因为代码太长了(一家之言额)
Position d.click(0.627, 0.266) 这个就更不推荐了,因为代码维护起来,你根本不知道写的是啥功能。要是你过于倔强,你用也可以,毕竟任性! 以上是web端页面可以知道的定位的方式,代码层面的定位那就不仅仅于此了。我划分为第7类,有所重复和上面六点。
selector
-
以上定位的方法还支持多条件组合等 推荐使用weditor的还有一个根本原因web可以直接操作手机,进行调试,同时自动生成了代码,流程跑通调试结束之后,直接ctrl+c 和ctrl+v 就可以搞定了,用起来十分方便快捷(强烈推荐)。
二、脚本介绍
元素定位之后我们就可以开始准备测试脚本。
首先是设备的连接,连接方式具体看源码
源码中提供了三个方法,但是我们只需要用connect方法,connect方法对2和3方法进行了简单的封装,同时源码中还给出了实例。
查看该方法返回的是啥
以上源码可以看出是返回的对象是UIAutomatorServer,其是与手机端通信的服务端,通过它与手机端进行相关操作。
github上提供了相关API Documents 详细见https://github.com/openatx/uiautomator2#api-documents
下面我们来介绍下UIAutomatorServer这个类(以下部分源码)
class UIAutomatorServer(object):__isfrozen = False__plugins = {}def __init__(self, host, port=7912):"""Args:host (str): host addressport (int): port numberRaises:EnvironmentError"""self._host = hostself._port = portself._reqsess = TimeoutRequestsSession() # use requests.Session to enable HTTP Keep-Aliveself._server_url = 'http://{}:{}'.format(host, port)self._server_jsonrpc_url = self._server_url + "/jsonrpc/0"self._default_session = Session(self, None)self._cached_plugins = {}self.__devinfo = Noneself._hooks = {}self.platform = None # hot fix for weditorself.ash = AdbShell(self.shell)self.wait_timeout = 20.0self.click_post_delay = Noneself._freeze() # prevent creating new attrs# self._atx_agent_check()
构造函数来看只需要是host来参数,初始化做了 TimeoutRequestsSession(requests.Session),以及一些默认额参数如wait_timeout (等待元素的超时时间给了一个默认参数20s),最终是通过发送http请求给手机端的client,可以理解为(C/S)。但是源码中还有一个session类和Adb相关的类对其有做了一层封装,增加了很多的操作功能,详细见session.py和Adb。
今日推荐书籍:
测试架构师小程序上线了,欢迎点击下方二维码体验哈~~