uiautomator2自动化测试系列(二)

大家好,我是Notorious,接上篇文章uiautomator2自动化测试系列(一)继续讲解系列课程。如有问题文章底部留言区留言讨论吧!

一、元素定位

首先安装 weditor (UI Inspector),不用原生的uiatomator的原因是uiautomator是独占资源,所以当atx运行的时候uiautomatorviewer是不能用的,为了减少atx频繁的启停,所以推荐使用weditor(调用python-uiautomator2的接口避免的冲突问题)。

  1. pip install -U weditor

Windows系统可以使用命令在桌面创建一个快捷方式

  1. python -m weditor --shortcut

命令行启动

  1. python -m weditor

会自动打开浏览器,输入设备的ip或者序列号,点击Connect即可。

具体怎么查看设备的ip(打开手机,无线查看)和设备序列号(终端输入adb devices 查看)。两种方法WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况,看你们具体选择。不过这里推荐使用usb,对比下来速度稍微快点,还可以充电^_^

具体启动浏览器左边一部分如下图

uiautomator2自动化测试系列(二)

在上图红色输入框中输入你的设备ip或者序列号,点击connect,就会加载出页面截图(如果没有点击右侧的relaod,要是还没有,查看终端后台是否连接出问题,最后要是还不行,请参照网管万能大法:重启机器,谢谢!)

中间红色框中展示了定位方式(点击对应的测试应用,就会自动生成)
  1. ResourceId定位: d(resourceId=””).click()

  2. ext定位 d(text=”秒).click()

  3. Description定位 d(description=”..”).click()

  4. ClassName定位 d(className=””).click()

  5. xpath d.xpath().click() 不支持,因为代码太长了(一家之言额)

  6. Position d.click(0.627, 0.266) 这个就更不推荐了,因为代码维护起来,你根本不知道写的是啥功能。要是你过于倔强,你用也可以,毕竟任性!
    以上是web端页面可以知道的定位的方式,代码层面的定位那就不仅仅于此了。我划分为第7类,有所重复和上面六点。

  7. selector

uiautomator2自动化测试系列(二)

  • 以上定位的方法还支持多条件组合等 推荐使用weditor的还有一个根本原因web可以直接操作手机,进行调试,同时自动生成了代码,流程跑通调试结束之后,直接ctrl+c 和ctrl+v 就可以搞定了,用起来十分方便快捷(强烈推荐)。

二、脚本介绍

元素定位之后我们就可以开始准备测试脚本。
首先是设备的连接,连接方式具体看源码

uiautomator2自动化测试系列(二)

源码中提供了三个方法,但是我们只需要用connect方法,connect方法对2和3方法进行了简单的封装,同时源码中还给出了实例。
查看该方法返回的是啥

uiautomator2自动化测试系列(二)

以上源码可以看出是返回的对象是UIAutomatorServer,其是与手机端通信的服务端,通过它与手机端进行相关操作。

github上提供了相关API Documents
详细见https://github.com/openatx/uiautomator2#api-documents

下面我们来介绍下UIAutomatorServer这个类(以下部分源码)

  1. class UIAutomatorServer(object):
  2. __isfrozen = False
  3. __plugins = {}
  4. def __init__(self, host, port=7912):
  5. """
  6. Args:
  7. host (str): host address
  8. port (int): port number
  9. Raises:
  10. EnvironmentError
  11. """
  12. self._host = host
  13. self._port = port
  14. self._reqsess = TimeoutRequestsSession(
  15. ) # use requests.Session to enable HTTP Keep-Alive
  16. self._server_url = 'http://{}:{}'.format(host, port)
  17. self._server_jsonrpc_url = self._server_url + "/jsonrpc/0"
  18. self._default_session = Session(self, None)
  19. self._cached_plugins = {}
  20. self.__devinfo = None
  21. self._hooks = {}
  22. self.platform = None # hot fix for weditor
  23. self.ash = AdbShell(self.shell)
  24. self.wait_timeout = 20.0
  25. self.click_post_delay = None
  26. self._freeze() # prevent creating new attrs
  27. # self._atx_agent_check()

构造函数来看只需要是host来参数,初始化做了 TimeoutRequestsSession(requests.Session),以及一些默认额参数如wait_timeout (等待元素的超时时间给了一个默认参数20s),最终是通过发送http请求给手机端的client,可以理解为(C/S)。但是源码中还有一个session类和Adb相关的类对其有做了一层封装,增加了很多的操作功能,详细见session.py和Adb。

本文来源于互联网:uiautomator2自动化测试系列(二)

       

本站文章如未特殊注明,均为原创,转载请注明出处: 未必平凡  本文链接地址: https://vv2014.com/714.html