uiautomator2自动化测试系列(二)

大家好,我是DZ,接上篇文章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自动化测试系列(二)


相关文章:

  • 2022-12-23
  • 2021-12-04
  • 2021-12-06
  • 2021-05-22
  • 2021-11-30
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-30
  • 2021-08-12
  • 2021-12-03
  • 2022-01-06
  • 2021-07-06
  • 2021-09-22
  • 2021-12-06
相关资源
相似解决方案