uiautomator2自动化测试系列(二)

uiautomator2自动化测试系列(二)_第1张图片

大家好,我是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,对比下来速度稍微快点,还可以充电^_^

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

uiautomator2自动化测试系列(二)_第2张图片

在上图红色输入框中输入你的设备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自动化测试系列(二)_第3张图片

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

二、脚本介绍

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

uiautomator2自动化测试系列(二)_第4张图片

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

uiautomator2自动化测试系列(二)_第5张图片

以上源码可以看出是返回的对象是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 address	
            port (int): port number	
        Raises:	
            EnvironmentError	
        """	
        self._host = host	
        self._port = port	
        self._reqsess = TimeoutRequestsSession(	
        )  # use requests.Session to enable HTTP Keep-Alive	
        self._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 = None	
        self._hooks = {}	
        self.platform = None  # hot fix for weditor	
        self.ash = AdbShell(self.shell)  	
        self.wait_timeout = 20.0 	
        self.click_post_delay = None 	
        self._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。

今日推荐书籍:

测试架构师小程序上线了,欢迎点击下方二维码体验哈~~

uiautomator2自动化测试系列(二)_第6张图片

你可能感兴趣的:(uiautomator2自动化测试系列(二))