微信小程序自动化测试-----小米 M4W,华为荣耀honor 9i ,华为 caz-tl20以及华为mate20 pro的调试

目前小程序调试了两个品牌的手机,一个是小米4W,一个是华为荣耀honor 9i。说下这两部手机调试下来的不同点吧。(先调试的小米4,所以那时候踩得坑,不太记得有哪些问题了,主要是总结华为这次调试的结果)
所有的调试都基于我们公司的小程序上调试,不能代表全部调试问题总结。

有疑问的加V了解详情:zx1187463903
在这里插入图片描述
先说明针对这个模块文件的修改
1:去掉file://开头或者attached:false的脏数据(原始框架只是过滤了file开头的脏数据,但是调试华为手机,发现还会出现一条不是file开头,但是attached:false的脏数据,所以加上这个条件,remove这条数据)

    def _cleanJsonData(self, responseJson):
        removeList = []
        for response in responseJson:
            if u'file:///' in response['url'] or u'''"attached":false''' in response['description']:
                removeList.append(response)
        for i in removeList:
            responseJson.remove(i)

2:原始框架sencondLastPageMessage是取pageUrlDictLength-1,但调试小程序发现,pageUrlDictLength=7,应该取pageUrlDictLength-6,也就是第二个值,所以就重写了获取这个值的方式sencondLastPageMessage(因为不确定,其他情况pageUrlDictLength值是几)
在这里插入图片描述

                # sencondLastPageMessage = self.pageUrlDict.get(self.pageMap.get(pageUrlDictLength - 1))
                sencondLastPageMessage = self.pageUrlDict.get(self.pageMap.get(1))

3:为什么不用这种获取pid的方式呢,因为有些手机adb得到的最顶层进程不仅仅是微信一个程序,当出现多条数据的时候就先将微信进程com.tencent.mm的进行分割,找到微信的那条数据,然后再对pid值进去分离获取.这样就可以不管是几个进程,都可以获取到微信的pid值.
首先以华为caz-tl20为例,CMD,执行命令:adb shell dumpsys activity top | findstr ACTIVITY找到小程序的进程,如下:
在这里插入图片描述

在这里插入图片描述

        # strlist = stdout.split('pid=')
        # pid = strlist[1].split("\r\n")[0]
        strlist = stdout.split('com.tencent.mm/.plugin.appbrand.ui.')
        str = strlist[1].split('pid=')
        pid = str[1].split("\r")[0] #这里更改为“\r”分割,之前是“\r\n”结尾,但现在adb得到的结果是以“\r\r\n”结尾,所以直接用“\r”来分割。
        webviewCmd = _ADB_GET_WEBVIEW_TOOLS_CMD[osName] % (pid)  

注意:华为mate20,如果走mate20作为测试机,你会发现,从搜一搜得到的进程pid可以运行的,但是注意这里的进程名称是“com.tencent.mm/.plugin.appbrand.ui.AppBrandInToolsUI”,和其他手机不同的是:其他手机进程“ ACTIVITY com.tencent.mm/.plugin.appbrand.ui.AppBrandUI”得到的pid是可以运行的,但mate20不可以。所以如果选择mate20作为测试机,最好走搜一搜进入。如下图,区别可以和上面的截图做对比。

在这里插入图片描述

4:原始框架上eventData增加了一个[object Text]
在这里插入图片描述

eventData = u'[object Text][object HTMLDivElement][object Text][object Text]'

为什么多加一个[object Text],因为调试发现,返回正确的值和框架里的值一直不是同一个,无法进入下一步,少了一个[object Text],所以加上才能调试通过。
在这里插入图片描述
针对这个模块的修改
1:重新写了一个输入的方法inputElementByXpath,使用ADBKeyBoard.apk代替inputPlug.apk,(如果也是使用adb输入法记得把与input输入法有关的注销掉)

    def inputElementByXpath(self, xpath, text, needClick=True):
        """
        安装adbkeyboard.apk实现adb中文输入,目前方法只针对windows系统
        :param xpath: 控件的xpath地址
        :param text: 输入的文字
        :return:
        """
        self.logger.info('xpath ---> ' + xpath + ' text ---> ' + text)
        if needClick:
            self.clickElementByXpath(xpath)

        if self.isElementExist(xpath):
            commandHelper.runCommand("adb shell am broadcast -a ADB_INPUT_TEXT --es msg '" + text.encode('cp936') + "'")
            self.wait(WAIT_REFLESH_05_SECOND)

使用方法:

        self.wxDriver.inputElementByXpath('//*[@id="mainPage"]/div[1]/div[2]/ul/li[1]/p/input', 'FAutoTest测试')

2:新增了滚动屏幕的操作,不过框架里自带的这个滚动屏幕的方法(scrollToElementByXpath)也很快,相比较而言,推荐框架自带的方法(scrollToElementByXpath).
在这里插入图片描述

    def swipeUp(self, n, t=100):
        '''
        向上滑动屏幕
        举例,屏幕高560,宽360
        向上滚动,x1=180,y1=420,y2=140
        由之前的位置(180,420)上移到(180,140)
        '''
        height = self.getWindowHeight()
        width = self.getWindowWidth()
        x1 = width * 0.5
        y1 = height * 0.75
        y2 = height * 0.25
        for i in range(n):
            self.d.swipe(x1, y1, x1, y2, t)

使用方式:

self.wxDriver.swipeUp(3)   

这里的3,就是滚动的次数,自己根据需要来设置。

3:为了提高速度,先将这一句滚动的操作注释掉
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43574761/article/details/86528610